跳到正文
Joeplover
AI Agent·2026-05-22·约 3 分钟阅读

LangGraph 多 Agent 协作系统

Coder + Auditor 协作模式,实现编码-审查自动化流水线。

AI 多智能体协作

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 图结构的优势:

特性ReActLangGraph
分支逻辑线性循环条件分支、并行
状态可见性隐式显式共享
复杂流程笨重自然表达
调试日志难追踪节点级可追踪

LangGraph 适合需要多角色协作、条件分支、循环控制的 Agent 场景。比简单的 LLM 调用链更强大,但设计复杂度也更高。