通过 LangGraph 状态管理实现多轮对话回溯与修正
把 LangGraph 里的 State 想象成一台可持久化的状态机,而不是简单的聊天记录,这比单纯存历史文本更有用。如果用普通的 Memory 机制处理复杂的对话,很容易出现“记忆污染”:模型在第三轮对话里产生幻觉后,后面的对话就只能在错误的底子上修补。
这种问题在纯 LLM 线性对话里很常见。以 Claude 3.5 Sonnet 为例,虽然它单次指令执行能力强,但多轮纠错严重依赖 Context Window 的滚动。一旦对话变得很长,早期的约束条件就会被稀释,导致模型“顾后忘前”,无法坚持之前的设定。这种场景通常只适合快速原型开发或简单问答。
而 LangGraph 的状态管理流提供了另一种思路。通过定义 TypedDict 状态,可以精确控制哪些信息进入 checkpoint。如果下游节点的输出不符合预期,就能直接将 State 强制回滚到上一个稳定节点,形成“存档/读档”机制。这种结构化的记忆保存方式,更适合复杂业务流程和需要严格逻辑校验的 Agent 编排。
想要通过状态对象干预执行流程,关键在于定义一个带版本号或时间戳的状态对象,然后在 StateGraph 中利用 update_state 方法来调整走向。代码里先定义了 AgentState,它包含 messages 和 current_step 字段。在 correction_node 函数中,如果检测到消息里有“错误”这个词,就会把 is_corrected 设为 True,并把 current_step 减一。
这种“自我审计”节点能让“记忆”变成主动控制流程的变量。当 Agent 发现结果有误时,它不会在对话里告诉 LLM“你错了”,而是直接修改 State 里的标志位,强制让 Graph 的边重新指向之前的处理节点。对于不能容忍中间步骤出错的复杂 Agent,这种基于状态机的回溯机制比简单的 ChatHistory 更可靠。
参考行业报告指出,随着 2026 State of AI Code Quality 的发布,验证正成为新的瓶颈。一些团队在早期使用结构化流程处理测试生成、代码审查和改进时,虽然能利用旧版模型的能力获取价值,但自从 Claude Sonnet 3.5 发布 9 个月以来,LLM 的一般性编码能力显著提升,基于结构的流程在面对 Fable 和 10 多个其他 LLM 代码重组任务时,其优势依然明显,比如在处理 1 Pro Proposal、Glm 5 Pro Proposal、Opus Proposal 和 Qwen 3 等具体提案时,这种结构化的状态控制能更好地确保准确性。
