ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

番外 2:LangGraph 深挖——框架到底帮你做了什么

番外 2:LangGraph 深挖——框架到底帮你做了什么 番外 2LangGraph 深挖——框架到底帮你做了什么这是「Agent 工程化」系列的番外篇。番外 1 横评了四条框架路线这篇把生态最庞大、生产用得最多的 LangGraph 拆开它到底帮你做了什么和我手写的 50 行 ReAct 循环是什么关系答案会让你安心——框架没有魔法它只是把你已经学过的原理用更工程化的方式实现了一遍。先回到那个 50 行循环正片第二篇我们手写了一个最小 ReAct Agent核心骨架长这样while任务未完成:llm 输出{思考,要调用的工具,参数}执行工具调用 把结果放回对话历史 判断任务是否完成这个循环能跑通 Demo但作为生产系统它有三个欠账欠账具体问题状态裸奔对话历史是裸内存进程一重启就全没了对应第 9 篇断点恢复流程靠 prompt 撑“下一步做什么全靠 LLM 自觉无法强制必须经过审批节点”无从观测循环里发生了什么没有标准化的记录接口对应第 10 篇可观测这三笔账正好是 LangGraph 帮你还的部分。它不做新的事它把这三件事做成了框架内置能力。LangGraph 的四个核心概念全部对应你学过的原理LangGraph 的抽象只有四个词理解了它们你就读懂了 LangGraphLangGraph 概念是什么对应正片原理State状态一个结构化的会话档案记录 messages、工具结果、任务进度第 4 篇对话历史 上下文Node节点一个执行步骤可以是 LLM 调用、工具调用、或一段代码第 2 篇循环里的行动Edge边节点之间的流转条件谁执行完走到谁第 8 篇Plan-Execute / 状态机StateGraph状态图把所有节点和边组织成一张图编译后运行第 2 篇那个 while 循环一句话LangGraph 把while 循环换成了图。节点是循环里的步骤边是步骤间的转移State 是循环里不断更新的对话历史。仅此而已。同一个例子手写版 vs LangGraph 版拿第二篇的经典例子——“查北京明天天气下雨提醒带伞”——分别实现你就能直观看到差异。手写版第二篇约 50 行forstepinrange(max_steps):responsellm(messages)ifresponse.actionfinish:returnresponse.answer resulttools[response.action](**response.args)messages.append(result)# 结果手动拼回历史LangGraph 版fromlanggraph.graphimportStateGraph,ENDfromtypingimportTypedDictclassState(TypedDict):city:str# 用户输入weather:str# 工具结果answer:str# 最终回答defcheck_weather(state):# 节点1查天气return{weather:get_weather(state[city])}defdecide(state):# 节点2判断并收尾return{answer:下雨记得带伞if雨instate[weather]else晴天不用带伞}graphStateGraph(State)graph.add_node(check_weather,check_weather)graph.add_node(decide,decide)graph.add_edge(check_weather,decide)# 查完天气 → 判断graph.add_edge(decide,END)# 判断完 → 结束graph.set_entry_point(check_weather)# 入口appgraph.compile()print(app.invoke({city:北京}))两者解决问题的方式完全一样差异只在工程能力能力手写版LangGraph 版控制流程靠 if/else 手写图结构声明式表达断点恢复自己实现第 9 篇内置 checkpoint人工审批自己实现内置 interrupt/resume可视化没有图结构天然可视记录 trace自己实现第 10 篇配套 LangSmith依赖零框架 学习成本四个还账能力逐个看1. Checkpoint断点恢复是内置的正片第 9 篇讲断点恢复时我们手动把 messages 落库。LangGraph 把它做成了框架默认能力——每个节点执行完自动保存 State 快照进程崩溃后从最近的 checkpoint 恢复几乎零成本获得。2. Interrupt人工审批是原生节点正片第 9 篇讲写操作二次确认。LangGraph 里这是原生语法——在需要审批的边之前插入 interrupt执行流会暂停等人确认后继续graph.add_node(confirm_order,human_confirm)# 暂停等人点头graph.add_edge(book_ticket,confirm_order)graph.add_edge(confirm_order,END)不需要自己写暂停-恢复逻辑框架处理好了。3. 确定性控制流程可以写死手写循环里下一步全靠 LLM 自觉LangGraph 里边是代码写死的——“检查完必须走审批审批通过才下单”。LLM 只负责节点内部的事走哪条路由代码决定。这就是番外 1 说的状态图驱动的可控流程。4. 可观测LangSmith 开箱即用正片第 10 篇自己搭 trace 表LangGraph 配套的 LangSmith 直接给到——每一步的输入输出、token 消耗、耗时自动记录还能在线对比不同版本的运行轨迹。代价框架不是免费的上面全是好处但代价必须讲清楚这才叫理性对比代价说明学习曲线State / Node / Edge / 条件路由先过概念关才写得出像样的图抽象排障出了 bug得先分清是图的逻辑错了还是框架内部错了升级风险框架版本迭代快API 变化可能静默改变行为番外 1 的 AutoGen 教训简单任务过重查个天气这种两节点任务用图的仪式感远超收益所以理性结论是LangGraph 不是更好的手写循环而是更工程化的手写循环。场景复杂、需要可控和可观测它省下的工程成本很可观场景简单、要极致轻量手写 50 行反而更合适。小结LangGraph 没魔法Node循环里的步骤Edge转移条件State对话历史——都是你学过的原理它帮你还了三笔账断点恢复checkpoint、人工审批interrupt、可观测LangSmith外加流程可控代价也要看学习曲线、抽象排障、升级风险、简单任务过重理性结论它是更工程化的手写循环不是更好的手写循环——用不用取决于你的场景而不是它的名气下一篇番外我们把这套理性对比推到选型层面——真实生产团队的 Agent 框架到底怎么选结合一线团队的实际案例给出一套不偏激的决策框架什么时候自研、什么时候复用、怎么评估、怎么留迁移路径。本系列路线从 0 到 1Agent 是什么 → 手写最小 ReAct → Function Calling 与工具设计 → 上下文管理 → Memory 记忆系统 → RAG 知识库 → Skill 自学习 → 编排模式与多 Agent → 给 Agent 装护栏 → 生产部署与可观测 → 评测与回归 →番外框架横评 → LangGraph 深挖 → 框架选型决策
返回列表