LangGraph 多 Agent 协作系统
Coder + Auditor 协作模式,实现编码-审查自动化流水线。
LangGraph 多 Agent 协作:Coder + Auditor Code Review 系统
项目背景
在 BigGraph RAG 平台的开发过程中,我尝试引入 AI Agent 来辅助代码生成。但单个 Agent 容易出现"幻觉代码"——写出来但不经过验证就提交。受 Code Review 流程启发,我设计了Coder + Auditor 双 Agent 协作系统:Coder 负责写代码,Auditor 负责审查,两者通过 LangGraph 图结构串联。
LangGraph 图设计
LangGraph 的核心思想是将 Agent 执行流程建模为有向图,节点是操作,边是转换条件:
from langgraph.graph import StateGraph, END
class AgentState(TypedDict):
messages: list # 消息历史
code: str # 当前代码
review_result: str # 审查结果
iteration: int # 迭代次数
graph = StateGraph(AgentState)
# 定义节点
graph.add_node("coder", code_generator)
graph.add_node("auditor", code_reviewer)
# 定义条件边
graph.add_conditional_edges(
"coder",
decide_next_step, # 条件函数
{
"review": "auditor",
"rewrite": "coder",
END: END,
}
)
graph.set_entry_point("coder")
app = graph.compile()
工作流程
Coder 编写代码 → Auditor 审查 →
├─ 通过 → 结束
└─ 发现问题 → Coder 修改 → Auditor 再次审查(循环,最多 3 次)
节点实现
Coder 节点:接收任务描述,调用 LLM 生成代码,输出到 state["code"]。
Auditor 节点:审查代码质量(正确性、安全性、性能、代码风格),输出审查意见。
条件函数 decide_next_step:根据审计结果决定走哪条边。
核心难点:状态管理
LangGraph 通过共享状态(StateGraph 的泛型参数)在节点间传递数据。我的状态设计包含:
messages:完整的对话历史,用于 LLM 上下文code:当前代码快照review_result:审计意见iteration:循环次数计数器
关键:状态是可变的,下游节点可以看到上游节点的输出。这让协作流程中的信息传递非常自然。
实际效果
在 BigGraph 的代码生成场景中,双 Agent 协作比单 Agent 生成的代码质量有明显提升:
- Auditor 发现的主要问题类型:缺少异常处理、边界条件遗漏、命名不规范
- 平均迭代 1.5 次后代码通过审查
- 超过 3 次仍不通过的场景通常是需求描述不清晰
与 ReAct 的对比
之前用 LangChain 的 ReAct(Reason + Act)循环实现 Agent——每次循环思考-行动-观察。LangGraph 图结构的优势:
| 特性 | ReAct | LangGraph |
|---|---|---|
| 分支逻辑 | 线性循环 | 条件分支、并行 |
| 状态可见性 | 隐式 | 显式共享 |
| 复杂流程 | 笨重 | 自然表达 |
| 调试 | 日志难追踪 | 节点级可追踪 |
LangGraph 适合需要多角色协作、条件分支、循环控制的 Agent 场景。比简单的 LLM 调用链更强大,但设计复杂度也更高。