11 · 从流水线到会转弯的图:LangGraph 的三件套(状态、节点、边)
第零幕:只用 langchain_core,能做什么?缺什么才要 LangGraph?
小林学到这里,把 langchain_core 能干的都摸清了。他画了一张”能力边界图”:小林在这篇的顿悟起点就是:他早就开始用 LangGraph 了(create_agent 返回的就是 CompiledStateGraph),只是从没正式认识它。 这一章,就是揭开它的面纱。
开头的现象
小林用create_agent 做出了”会记住、会干活的助手”。但他一直有个心结:create_agent 是个黑盒。 模型下一步要干嘛?循环到哪一步了?老板说”能不能让机器人干危险操作前先问我一句”——小林盯着 create_agent 的文档,找不到”中途插一手”的开关。
他做了一个让他头皮发麻的实验:print(type(agent))——
第一幕:小林解剖了 create_agent——一张 4 节点 4 边的图
小林用agent.get_graph() 把 create_agent 拆开了。他看到的东西让他倒吸一口凉气:
response_metadata 里看到了证据:模型返回的 stop_reason 是 tool_use(“我要调工具”)还是 end_turn(“我说完了”)——那张条件边看的,就是这个开关。
想验证”create_agent 是一张图”吗?跑10_agent.py后用agent.get_graph()打印节点——你会看到__start__ → model → tools → __end__,tools → model那个回环就是”自动循环”的物理证据。
第二幕:小林亲手搭了一张图——StateGraph 的四个零件
小林想:“既然 create_agent 是一张图,那我能不能自己搭一张?” 他翻到了 LangGraph 的核心类StateGraph,发现搭图只需要四个零件:
8,验证了一个关键机制:每个节点只返回”自己改的那一小块”({"count": ...}),LangGraph 自动把它合并进状态里。 这就是 LangGraph 和普通链(|)的本质区别:LCEL 的 | 是”单向流水线”,数据流过去就完事;StateGraph 是”共享状态”——每个节点能读能写整个状态,还能根据状态决定走哪条边。
想验证”节点只改自己的”吗?跑11_langgraph.py第一部分——两个节点各改各的(+1、*2),LangGraph 自动合并,最后输出 8。你把 node_b 改成返回{"count": 999}试试——它会覆盖,说明”后写的节点覆盖前写的”。
第三幕:条件边——流程会转弯了
小林搭完直线图,又试了”条件边”——让图根据状态决定走哪条路:5 → 4 和 50 → 150,明白了条件边是干嘛的:add_conditional_edges("check", decide, {"big": "big", "small": "small"}) 的意思是——从 check 节点出发,调用 decide 函数看结果,结果 "big" 就走 big 节点,"small" 就走 small 节点。 这就是流程图里的”菱形判断框”。
他忽然想到 create_agent 里那张图的”条件边”:model 节点上的条件边不也是看 tool_calls 决定走 tools 还是 END 吗? 他自己搭的图和 create_agent 是同一套机制。
想验证”转弯”吗?跑11_langgraph.py第二部分——count=5 走 small(期望 4),count=50 走 big(期望 150)。把 decide 的判断条件从> 10改成> 100,再跑 50——它就走 small 了。
🔧 技术细节:这一章涉及的关键类和签名
①StateGraph——搭图的骨架(langgraph.graph)
想验证吗?agent.get_graph()打印节点和边——你会看到__start__ → model → tools → __end__和回环tools → model。
结论(小林用一天换来的)
LangGraph 的基础 = 状态 + 节点 + 边:StateGraph(状态结构) 建图,add_node 加处理函数,add_edge/add_conditional_edges 连线(条件边让流程会转弯、会循环),compile() 编译成可调用对象。 每个节点只返回”自己改的部分”,LangGraph 自动合并进状态——这就是”图”和”链”的本质区别:链是单向流水线,图是共享状态 + 会转弯。
复现信号:什么时候你会想起这一章
- 想让流程”会转弯”(根据状态走不同分支)——
add_conditional_edges。 - 想让流程”循环”(模型↔工具)——条件边回环(
tools → agent)。 - 只是固定问答(RAG)——别上 LangGraph,第 09 篇的
|链够用。