作为LangChain的升级版,LangGraph主要是能够处理更复杂场景的大模型交互,为Agent助力,本文快速告诉如何使用LangGraph。
1. LangGraph是什么
想象一下,你正在搭建一个乐高积木城堡。如果只用基础积木块,你确实能搭出一个简单的结构。但如果你想要一个有护城河、吊桥和多个塔楼的复杂城堡,那么仅靠随意堆叠积木是很难实现的——你需要一个设计图和一些特殊的连接件。
在AI应用开发中也是如此。当我们只需要一个简单的AI助手回答问题时,用传统的方法就够了。但当我们想要构建一个能够思考、记忆、使用工具、甚至与人类协作的复杂AI系统时,我们就需要更强大的框架——这就是LangGraph的用武之地。
1.1 LangGraph:AI应用的"乐高高级版"
LangGraph就像是AI开发的"乐高高级版",它让你能够轻松地将不同的AI组件(比如大语言模型、搜索工具、数据库等)连接起来,形成一个复杂但有序的系统。在这个系统中:
- 每个组件就像一个乐高积木,可以独立工作
- 组件之间的连接方式是可以自由设计的,甚至可以形成循环
- 系统会记住之前的状态和历史,就像人类记忆一样
- 整个流程可以精确控制,确保AI按照我们期望的方式工作
换句话说,LangGraph是一个让复杂AI系统变得可行且可控的工具包,特别适合那些需要AI完成多步骤、需要记忆和推理的复杂任务。
1.2 LangGraph和LangChain:一家人但分工不同
如果你了解AI开发,可能听说过LangChain。那么LangGraph和LangChain是什么关系呢?它们其实是"一家人",都来自同一家公司(LangChain Inc.),但它们的职责不同。
想象一个厨房:LangChain提供各种厨具和食材(如锅、刀、肉、菜等基础组件),而LangGraph则是菜谱和烹饪流程的设计者,告诉你如何组合这些工具和食材,按什么顺序操作,何时需要循环尝试等等。
它们的主要区别是:
特点 | LangChain | LangGraph |
主要功能 | 提供各种AI组件和集成 | 设计AI组件之间的协作和流程 |
适合做什么 | 简单的问答、搜索、数据处理 | 复杂的多步骤任务、多智能体系统 |
控制精度 | 较粗(像积木的搭建) | 更精细(像电路的设计) |
状态管理 | 基础的状态传递 | 完整的状态管理系统 |
使用难度 | 对初学者友好 | 需要一定的设计思维 |
简单来说:LangChain提供了积木,LangGraph告诉你如何把这些积木连接成复杂而有序的系统。它们不是替代关系,而是互补关系,通常会一起使用。
2. LangGraph能做什么
2.1 LangGraph的杀手锏功能
LangGraph比普通的AI框架强在哪里?它有几个独特的优势:
1. 循环思考能力:普通的AI系统像流水线一样单向运行,而LangGraph支持循环,允许AI多次思考、改进答案,就像人类解决复杂问题时会反复思考一样。
2. 状态记忆:LangGraph能保持对话的上下文和状态,不会"健忘",这对长期交互至关重要。想象一下,你的AI助手能记住一周前的对话细节!
3. 精细控制:就像游戏手柄上的精确按键,LangGraph让你能精确控制AI的每一步行为,而不是简单地"一键生成"。
4. 人机协作:LangGraph设计了智能的人机协作机制,AI可以起草内容让人类审核,或者在关键决策点请求人类帮助。
5. 多智能体协作:如果把AI比作工人,LangGraph就像是一个让多个专业工人高效协作的工厂主管,每个"工人"负责自己擅长的部分。
2.2 真实世界中的应用案例
LangGraph并不是纸上谈兵,它已经在多个大公司得到了应用,带来了显著的效果提升:
LinkedIn的AI招聘助手:使用LangGraph构建的这个系统,能通过自然对话帮助招聘人员找到最匹配的候选人,大大提高了招聘效率。
Uber的代码助手:Uber用LangGraph建立了一个AI代码助手网络,自动处理大规模代码迁移和测试生成,让程序员专注于更有创造性的工作。
Klarna的客服机器人:基于LangGraph的AI客服为8500万用户提供支持,将问题解决时间缩短了80%!想象一下,原本需要50分钟解决的问题,现在只需10分钟。
AppFolio的决策助手:房产管理公司AppFolio的AI助手帮助管理者做出更快、更准的决定,准确率提高了2倍,每周节省10多小时的工作时间。
这些案例表明,LangGraph不只是一个技术玩具,而是能在实际业务中创造巨大价值的工具。无论是客服、内容创作、决策支持还是流程自动化,LangGraph都能显著提升效率和质量。
3. LangGraph怎么工作
3.1 图结构:AI的"路线图"
LangGraph的核心是"图"的概念,但这不是我们平常说的图表,而是一种表示连接关系的数学结构。想象一个城市的地铁线路图:
- 每个站点是一个"节点"(在LangGraph中,节点可能是一个AI模型、一个工具或一个函数)
- 连接站点的线路是"边"(决定了信息如何从一个节点流向另一个)
- 乘客可以沿着不同的线路在站点之间移动(就像数据和状态在节点之间流动)
LangGraph让你设计这样的"路线图",决定AI系统中的各个组件如何连接和交互。与普通的线性流程不同,LangGraph支持分支、循环和并行处理,就像一个复杂的地铁网络,而不是简单的A到B的单线。
3.2 状态管理:AI的"记忆系统"
想象你的大脑如何工作:你不仅能接收新信息,还能将它与记忆中的内容联系起来。AI系统也需要这样的能力,这就是LangGraph的状态管理发挥作用的地方。
LangGraph的状态管理就像一个智能的记事本,它:
- 记录所有重要信息(对话历史、中间结果、用户偏好等)
- 在不同组件之间传递这些信息
- 确保信息不会被意外修改(默认情况下是"只读"的)
- 允许有条件地更新信息
- 支持"时间旅行"(回到之前的状态)
这种状态管理让AI系统能够维持连贯的对话,记住上下文,并基于历史做出更好的决策——就像一个有良好记忆力的助手。
3.3 控制流:AI的"决策树"
普通的AI应用像是一条直线,而LangGraph的控制流更像一棵树或一张网,有多个可能的路径:
- 条件分支:基于某些条件选择不同的路径(如"如果用户问的是产品问题,走A路径;如果是技术问题,走B路径")
- 循环:允许重复执行某些步骤,直到达到特定条件(如"继续优化回答,直到确信它是正确的")
- 并行执行:同时执行多个任务(如"同时搜索多个数据源")
- 嵌套图:在大图中包含小图,就像程序中的函数调用(如"执行一个完整的研究子流程")
这种灵活的控制流让AI系统能够处理复杂的、不确定的情境,而不仅仅是简单的预定义流程。
4. 实践:用LangGraph打造智能客服机器人
理论讲完了,现在让我们动手实践,用LangGraph打造一个智能客服机器人。这个机器人能够:
- 回答用户的常见问题
- 搜索最新信息
- 在需要时请求人工支持
- 记住与用户的对话历史
我们梳理整个业务流程:
4.1 准备工作
首先,我们需要安装必要的包并设置环境:
# 安装需要的库
!pip install -U langgraph langchain langchain_deepseek
# 导入必要的模块
import os
from typing import TypedDict, List, Dict, Any
from langchain_deepseek import ChatDeepseek # 使用Deepseek模型替代
from langchain.schema import HumanMessage, AIMessage
from langchain.tools import Tool
from langchain_core.messages import BaseMessage, FunctionMessage
from langgraph.graph import StateGraph, END
4.2 定义我们的系统状态
首先,我们需要定义系统要记住什么信息:
# 定义系统状态类型 - 想象这是AI的"记事本"
class AgentState(TypedDict):
# 对话历史记录
messages: List[BaseMessage]
# 可用工具列表
tools: List[Tool]
# 是否需要人工客服介入
need_human: bool
# 工具调用结果
tool_result: Dict[str, Any]
4.3 创建智能体节点
接下来,我们定义系统的主要组件:
# 初始化Deepseek大语言模型
# 注意: 需要设置你的API密钥
# os.environ["DEEPSEEK_API_KEY"] = "你的API密钥"
model = ChatDeepseek(model="deepseek-chat", temperature=0)
# 定义搜索工具 - 简化版,实际应用中可能连接真实搜索API
def search_tool(query: str) -> str:
"""搜索产品信息库获取最新信息"""
# 这里是简化的实现,实际应用中应该连接到真实的知识库或搜索API
if "价格" in query:
return "我们目前有三种套餐:基础版(99元/月)、专业版(299元/月)和企业版(999元/月)。每种套餐的具体功能对比可以在官网查看。"
elif "退款" in query:
return "我们提供30天无理由退款保证。如需退款,请提供订单号和购买邮箱,我们会在3个工作日内处理。"
elif "配送" in query:
return "我们的实体产品通常在支付确认后24小时内发货,大部分地区可在3-5天内送达。特殊地区可能需要更长时间。"
else:
return "抱歉,没有找到关于这个问题的具体信息。你可以换个问法,或者咨询人工客服获取更多帮助。"
# 将搜索功能包装成工具
tools_list = [
Tool(
name="search_product_info",
func=search_tool,
description="用于查询产品价格、政策、配送等信息的工具"
)
]
# 定义AI客服智能体节点
def agent_customer_service(state: AgentState) -> Dict:
"""AI客服核心节点,负责理解用户问题并决定下一步行动"""
messages = state["messages"]
tools = state["tools"]
# 构建系统提示语
system_prompt = """
你是一个专业的在线客服助手。请按照以下准则工作:
1. 用友好、专业的口吻回答用户问题
2. 对于产品信息类的问题,使用"search_product_info"工具获取最新、准确的答案
3. 如果遇到复杂问题、投诉或特殊请求,请判断是否需要转接人工客服
4. 回答要简洁明了,避免不必要的啰嗦
5. 不要编造信息,如果不确定,就使用工具查询或建议转人工
记住:你的目标是高效解决用户问题,提供良好的客户体验!
"""
# 调用大语言模型
response = model.predict_messages(
messages,
system=system_prompt,
tools=tools
)
# 根据模型回复决定下一步行动
if hasattr(response, 'tool_calls') and response.tool_calls: # 模型决定使用工具
tool_call = response.tool_calls[0]
return {
"messages": messages + [response],
"next": "tool_executor", # 下一步执行工具
"tool_to_use": tool_call.name,
"tool_input": tool_call.args
}
elif any(keyword in response.content.lower() for keyword in ["人工客服", "转人工", "真人", "专员"]): # 需要人工介入
return {
"messages": messages + [response],
"need_human": True,
"next": "human_intervention" # 下一步转人工
}
else: # 直接回答用户
return {
"messages": messages + [response],
"next": END # 结束流程
}
# 定义工具执行节点
def tool_executor(state: AgentState) -> Dict:
"""执行工具调用并返回结果"""
tool_to_use = state["tool_to_use"]
tool_input = state["tool_input"]
# 查找要使用的工具
tool = next((t for t in state["tools"] if t.name == tool_to_use), None)
if tool:
# 执行工具调用
result = tool.invoke(tool_input)
# 创建工具响应消息
tool_message = FunctionMessage(
name=tool_to_use,
content=result
)
# 返回带有工具结果的新状态
return {
"messages": state["messages"] + [tool_message],
"tool_result": {
"name": tool_to_use,
"input": tool_input,
"output": result
},
"next": "agent_customer_service" # 结果返回给智能客服继续处理
}
else:
# 工具不存在的情况
error_message = FunctionMessage(
name="system",
content="请求的工具不存在或暂时不可用"
)
return {
"messages": state["messages"] + [error_message],
"next": "agent_customer_service" # 返回智能客服处理异常情况
}
# 定义人工介入节点
def human_intervention(state: AgentState) -> Dict:
"""处理需要人工客服介入的情况"""
# 在实际应用中,这里可能会调用客服中心API或排队系统
intervention_message = AIMessage(
content="您好,您的问题需要更专业的解答。我已经为您转接人工客服,请稍等片刻,很快会有专业客服接入对话。您的等待对我们很重要,感谢您的耐心!"
)
# 在实际系统中,这里可能还会记录用户信息、问题分类等,方便人工客服快速了解情况
return {
"messages": state["messages"] + [intervention_message],
"next": END # 流程结束,等待人工接入
}
4.4 将一切连接起来
现在,我们将这些节点组合成一个完整的工作流:
# 创建客服系统的工作流图
customer_service_system = StateGraph(AgentState)
# 添加节点到图中
customer_service_system.add_node("agent_customer_service", agent_customer_service)
customer_service_system.add_node("tool_executor", tool_executor)
customer_service_system.add_node("human_intervention", human_intervention)
# 定义节点之间的连接关系
customer_service_system.set_entry_point("agent_customer_service") # 入口点是智能客服节点
customer_service_system.add_edge("agent_customer_service", "tool_executor") # 智能客服可以调用工具
customer_service_system.add_edge("agent_customer_service", "human_intervention") # 智能客服可以请求人工介入
customer_service_system.add_edge("tool_executor", "agent_customer_service") # 工具执行完后回到智能客服
# 编译图,生成可执行的客服助手
customer_service_assistant = customer_service_system.compile()
4.5 试试看!
让我们用几个不同的问题测试我们的客服助手:
# 测试1:询问产品价格
initial_state_price = {
"messages": [HumanMessage(content="你们的产品价格是多少?有什么区别?")],
"tools": tools_list,
"need_human": False,
"tool_result": {}
}
# 运行客服助手
result_price = customer_service_assistant.invoke(initial_state_price)
# 打印对话结果
print("=== 价格咨询测试 ===")
for message in result_price["messages"]:
if isinstance(message, HumanMessage):
print(f"用户: {message.content}")
elif isinstance(message, AIMessage):
print(f"客服: {message.content}")
elif isinstance(message, FunctionMessage):
print(f"系统 ({message.name}): {message.content}")
print("\n")
# 测试2:复杂问题需要人工
initial_state_complex = {
"messages": [HumanMessage(content="我上周买的产品出了问题,已经联系了三次都没人解决,我要投诉并申请退款!")],
"tools": tools_list,
"need_human": False,
"tool_result": {}
}
# 运行客服助手
result_complex = customer_service_assistant.invoke(initial_state_complex)
# 打印对话结果
print("=== 复杂问题测试 ===")
for message in result_complex["messages"]:
if isinstance(message, HumanMessage):
print(f"用户: {message.content}")
elif isinstance(message, AIMessage):
print(f"客服: {message.content}")
elif isinstance(message, FunctionMessage):
print(f"系统 ({message.name}): {message.content}")
4.6 扩展的可能性
这个基础系统只是一个起点,我们可以通过以下方式进一步增强它:
-
1. 情感分析:添加情感检测节点,识别用户是否沮丧或生气,调整回应策略
-
2. 个性化记忆:记住用户的偏好和历史互动,提供更个性化的服务
-
3. 多步骤流程:处理下单、修改订单等多步骤流程
-
4. 多渠道集成:连接到微信、网站、APP等多个客户服务渠道
-
5. 知识库集成:接入更大的产品知识库,回答更专业的问题
5. LangGraph的优缺点和适用场景
5.1 LangGraph的过人之处
LangGraph作为一个专业的AI编排工具,有这些明显的优势:
1. 让复杂AI流程变得可行:它能让你构建出远比简单问答更复杂的AI应用,比如多轮研究、创意写作、复杂问题解决等。
2. 精确控制AI行为:你可以指定AI在每一步应该做什么,而不是把一切交给"黑盒"处理。这在需要可靠性和安全性的场景尤为重要。
3. 记忆与上下文管理:LangGraph的状态管理让AI能够记住历史交互,避免"金鱼记忆"问题,提供连贯的长期交互体验。
4. 人机协作无缝对接:它设计了良好的人机交互接口,让AI和人类能够无缝协作,互相补充各自的优势。
5. 模块化和可重用性:一旦建立了某个功能模块(如"研究"、"创作"、"分析"等),就可以在不同项目中重复使用,加速开发。
5.2 LangGraph的短板
当然,LangGraph也不是万能的,它有一些限制:
1. 入门门槛:相比简单的AI应用,LangGraph需要更多的学习和规划,对非技术人员不太友好。
2. 开发时间:设计复杂的图结构需要更多前期投入,对于简单任务可能有点"杀鸡用牛刀"。
3. 调试挑战:复杂的图结构和状态管理可能使调试变得复杂,尤其是在大型项目中。
4. 运行开销:在某些情况下,完整的状态管理可能带来额外的计算和存储开销。
5. 生态系统成熟度:作为一个相对较新的工具,LangGraph的社区资源和教程相对较少,可能需要更多自主探索。
5.3 什么情况下该用LangGraph?
根据LangGraph的特性,它特别适合以下场景:
最适合的场景:
- 需要多步推理和决策的复杂AI应用
- 多个AI组件需要协同工作的系统
- 需要维护长期对话和上下文的应用
- 需要精细控制AI行为的关键业务系统
- 需要人机协作的工作流
不太适合的场景:
- 简单的单次问答系统
- 资源极度受限的环境
- 需要极速开发的原型项目
- 非技术人员需要独立维护的系统
总的来说,如果你的AI项目"简单但不简单"——表面上看是普通的AI助手,但实际需要处理复杂逻辑、多轮交互或状态管理,那么LangGraph就是你的不二之选。
6. 总结与展望:LangGraph的未来
6.1 为什么LangGraph值得关注
LangGraph代表了AI应用开发的新方向。随着人们对AI的期望越来越高,简单的问答模式已经不够用了——我们需要更智能、更可靠、更复杂的AI系统,而LangGraph正是为此而生。
它的关键价值在于:
-
1. 让开发者能够构建真正智能的、有"思考能力"的AI系统
-
2. 提供了可靠性和可控性,让AI更值得信赖
-
3. 支持人机协作,发挥人类和AI的各自优势
-
4. 模块化设计使复杂AI系统的开发变得可行
6.2 LangGraph的发展趋势
展望未来,LangGraph可能会向这些方向发展:
1. 更易用的可视化开发工具:像流程图设计工具一样,让非程序员也能设计AI工作流。
2. 更多预置模板:针对客服、研究、内容创作等常见场景提供现成模板,简化开发。
3. 多模态支持增强:更好地处理图像、音频等多模态输入,构建更全面的AI体验。
4. 企业集成工具包:提供更多与企业系统(如CRM、ERP)的集成接口,促进企业采用。
5. 优化性能和资源利用:减少计算开销,让复杂AI系统运行更高效。
6.3 给开发者的建议
如果你是一名开发者,考虑学习和使用LangGraph,尤其是:
-
1. 从小项目开始:先用LangGraph构建一个小型但有意义的项目,熟悉其概念和工作流
-
2. 关注状态设计:精心设计状态结构是成功的关键,它决定了系统能"记住"什么
-
3. 模块化思考:将复杂系统分解为可重用的小模块,提高开发效率
-
4. 结合LangChain生态:善用LangChain的丰富组件,避免重复造轮子
-
5. 投入测试和监控:复杂系统需要更完善的测试和监控,确保稳定可靠
在AI技术日新月异的今天,掌握LangGraph这样的高级工具,将使你能够构建出超越普通AI应用的智能系统,为用户和企业创造更大价值。无论是客服机器人、研究助手、创意伙伴还是决策支持系统,LangGraph都能帮助你将大语言模型的能力充分释放出来,构建真正有用、有趣、有价值的AI应用和Agent。
喜欢【黑夜路人技术】的VX号,欢迎关注
【大模型介绍电子书】
要获取本书全文PDF内容,请在【黑夜路人技术】VX后台留言:“AI大模型基础” 或者 “大模型基础” 就会获得电子书的PDF。