
想象一下,周五晚上 11 点,你刚写完一个“智能客服助理”。老板要求:“AI 回答不上来的时候,必须挂起等待人工客服介入;人工回答完后,AI 还要能接着刚才的话题继续聊,不能失忆。”
你看着满屏的 if-else 和 Redis 里零散的 session_id 临时状态,陷入了沉思。用 LangChain 的 SequentialChain 只能直来直去,一旦要在流程中开倒车或者停下来等人,代码就变成了一碗意大利面——又长又乱,拆东墙补西墙。
痛点总结:
- 流程失控:复杂的循环推理逻辑难以用线性代码维护。
- 状态丢失:服务一重启,AI 就忘了刚才说到哪了。
- 人机协同难:打断 AI、人类操作、AI 继续——这套组合拳开发成本极高。
别急,今天这篇文章就是来救场的。主角就是 LangGraph。
1.1 专业术语(说给面试官听的)
LangGraph 是 LangChain 生态中的核心库,专门用于构建有状态的、多参与者的循环应用。它把 AI 应用的运行逻辑抽象成了一个有向图(Graph)。
1.2 生活化类比(说给你自己听的)
- LangChain 是工厂流水线:零件(数据)从入口进,经过打磨、喷漆、包装,单向流动,最后出门。一旦启动,中间不能停,也不能拐弯回去重新打磨。
- LangGraph 是城市地铁线路图 + 智能调度中心:
- 图(Graph) = 地铁轨道网,有环线(循环)、有分岔(条件判断)。
- 状态(State) = 你的公交卡余额和乘车记录。不管你换乘多少趟,它都记得你从哪站上的车,该收多少钱。
- 节点(Nodes) = 地铁站(执行具体任务的 AI 或 函数)。
- 边(Edges) = 轨道(数据的流向)。
一句话总结:LangGraph 让你像画地铁图一样设计 AI 的逻辑,既直观,又稳当。
针对上面提到的“周五晚上崩溃场景”,LangGraph 给出了教科书级的解决方案:
while 循环 + 全局变量记录
step,极易死循环。
内置 Cycle 支持。图结构天然支持
A -> B -> C -> A。
服务重启 / 断点续传 需要手写 Redis 序列化/反序列化逻辑,维护成本高。
Checkpointer 机制。每走一步自动存档,重启后从断点继续。
人工审批 / 暂停干预 需要引入复杂的消息队列或长轮询等待逻辑。
interrupt 函数。一句话让 AI 暂停并等待人类 API 信号。
监控 & 可视化 靠打 Log,看着一堆
Step 1...Step 2... 头昏眼花。
get_graph().draw_mermaid_png()。直接生成流程图,一眼看懂。
Part A:基础教学(手把手,让你 5 分钟跑起来)
1. 安装
pip install langgraph langchain langchain-openai
2. 定义状态(地铁卡的芯片数据)
我们需要告诉图,你的应用要记住哪些信息。
from typing import TypedDict, List from langgraph.graph import StateGraph, END # 定义这张“地铁卡”里的字段 class AgentState(TypedDict): messages: List[str] # 对话历史 next_step: str # 下一站去哪
3. 定义节点(建两个地铁站)
节点 A:思考站(AI 负责想问题)
节点 B:工具站(AI 负责查资料)
def node_think(state: AgentState): # 模拟 AI 思考:如果最后一条消息是问天气,就需要查工具 last_msg = state["messages"][-1] if state["messages"] else "" print(f"易 思考站:收到消息 '{last_msg}'") if "天气" in last_msg: # 告诉调度中心:下一站去“工具站” return {"next_step": "tool"} else: # 直接结束 return {"next_step": "end"} def node_tool(state: AgentState): # 模拟查天气 print(" 工具站:正在查询实时天气...") new_msg = "外面晴天,26度。" # 把查到的结果追加到对话历史里 return {"messages": state["messages"] + [new_msg]}
4. 设置条件边(决定地铁往哪开)
这是 LangGraph 的灵魂。根据 next_step 的值决定下一站去哪。
def router(state: AgentState): if state["next_step"] == "tool": return "tool" return END
5. 组装运行
# 1. 建图 builder = StateGraph(AgentState) # 2. 加站点 builder.add_node("think", node_think) builder.add_node("tool", node_tool) # 3. 画轨道 builder.set_entry_point("think") # 从思考站出发 builder.add_conditional_edges("think", router) # 思考完看情况走 builder.add_edge("tool", "think") # 工具查完,回去继续思考(形成循环!) # 4. 编译(这是施工完毕的指令) graph = builder.compile() # 5. 跑起来 result = graph.invoke({"messages": ["今天广州天气怎么样?"]}) print(f"最终结果: {result['messages']}")
Part B:企业级落地三大实战场景
有了基础,我们看大厂是怎么用的。
场景 1:智能客服“转人工”与“断点续传”
需求:AI 判断需要人工介入 -> 暂停并把会话推给人工系统 -> 人工回复 -> AI 继续服务。
LangGraph 实现关键代码(Human-in-the-Loop):
from langgraph.checkpoint.memory import MemorySaver from langgraph.types import interrupt def ai_diagnose(state): # ... AI 诊断逻辑 ... if confidence < 0.7: # 魔法在这里:图暂停运行,等待外界填入 user_input human_feedback = interrupt("亲,这个问题有点难,请问你要人工帮忙吗?(输入 y/n)") if human_feedback == "y": return {"need_human": True} return {"need_human": False} # 关键配置:加 Checkpointer memory = MemorySaver() # 生产环境换成 PostgresSaver graph = builder.compile(checkpointer=memory) # 运行时指定 thread_id,重启后只要 thread_id 一样,就能接着跑 config = {"configurable": {"thread_id": "user_123"}} graph.invoke(input, config)
场景 2:代码审查多智能体协作 (Multi-Agent)
架构图:Coder 写代码 -> Reviewer 审核 -> (不通过) 打回 Coder 重写 -> Tester 测试 -> (不通过) 打回 Coder。
在 LangGraph 中,这就是几个节点之间加几条回退边的事,完全不用写 while True: if ... break 这种不可控代码。
场景 3:长会话记忆管理(生产级存储)
默认 MemorySaver 存内存,重启就丢。企业项目必须换底座:
from langgraph.checkpoint.postgres import PostgresSaver import psycopg # 连接生产数据库 conn = psycopg.connect("postgresql://user:pass@localhost:5432/db") checkpointer = PostgresSaver(conn) graph = builder.compile(checkpointer=checkpointer)
这样,AI 的状态就永久落盘了,服务器随便重启,用户无感知。
坑 1:Checkpointer 内存泄漏(吃了 32G 内存报警)
- 现象:用
MemorySaver跑了几天,服务器内存爆了。 - 原因:LangGraph 会保存每一步的快照,如果是无限循环的 Agent,快照会无限膨胀。
- 解决:
- 生产环境严禁用
MemorySaver,必须换PostgresSaver或RedisSaver。 - 定期清理
checkpoint表,保留最近 N 条即可。
- 生产环境严禁用
坑 2:异步节点与同步节点混用导致死锁
- 现象:定义了
async def node_a和def node_b,跑着跑着图卡住不动了。 - 解决:统一风格!要么全用同步函数 +
graph.stream(),要么全用异步函数 +graph.astream()。LangGraph 内部的事件循环非常敏感。
不要再让你的 Agent 代码变成一碗无法维护的“意大利面”了。LangGraph 提供的图编排能力和原生状态管理,是目前企业构建可靠、可扩展 AI 应用的**实践。
- 想玩简单的? 用 LangChain。
- 想上生产、做产品、要稳定? 上 LangGraph。
觉得有用的话,点赞 + 收藏不迷路!后续我会带来更多关于 LangGraph Supervisor Agent(主控智能体)的深度实战解析。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/258595.html