用 LangGraph 实现可恢复的智能体流程
文章通过工具调用循环和人工审批示例,讲解如何用节点、边与共享状态组织智能体。进一步讨论持久化、可观测性与故障处理,覆盖从演示走向实际应用的关键问题。
完整中文译文
LangGraph 把智能体的工具调用、分支判断和人工审批组织成显式流程。dev.to 的这篇文章用一个研究助手示例,讲解节点、边和共享状态如何配合,并讨论持久化、可观测性与故障处理。目前拿到的节选包含核心代码,但后续工程化内容并不完整。
目前能确认什么
LangGraph 是 LangChain 团队开发的库。按节选中的定义,节点是读取状态并返回局部更新的 Python 函数,边决定下一步去哪里,共享状态负责在节点间传递数据。
示例的路径很清楚:模型请求工具时执行搜索,再回到模型;生成答案后进入人工审核。审核通过则结束,拒绝则返回模型修改。搜索工具实际使用的是代码内置字典,接入真实检索仍需另行实现。
状态更新会合并到已有状态,具体合并方式由 reducer 决定。示例为消息字段配置了 add_messages,用于保留消息历史;interrupt() 则负责暂停流程,等待恢复输入。
流程可以暂停,不等于已经具备进程崩溃后的恢复保障。
节选介绍了保存步骤状态的 Checkpointer,但代码使用的是 MemorySaver(),尚未展示持久存储配置和完整恢复调用。
我的判断
对需要多轮工具调用、条件分支和人工审核的项目,显式流程的价值是让程序员能逐条检查执行路径:何时调用工具、何时结束、驳回后回到哪里。这也给分支测试和故障定位提供了明确边界。
不过,这段代码还不足以作为完整的上线方案。工具异常如何处理、循环何时强制终止、审核等待如何关联到具体任务,节选都没有交代。
还要区分「恢复状态」和「避免重复执行外部操作」。通用工程上,发消息、写数据库等操作需要考虑幂等性;本文如何处理这些问题,以及可观测性如何落地,仍要等后续原文或官方文档确认。