如何利用 LangGraph 构建具有自我修正能力的自动化代码 Review Agent

一杯咖啡日记 初级 2026/5/12 273 浏览 2 点赞 约 1 分钟

把 LangGraph 的状态机机制引入 Code Review,最核心的突破点在于将「检查-反馈-修复」这个循环从简单的 Prompt 串联变成了可定义的图拓扑结构。传统的单次 LLM Review 经常出现“指出问题但修复后引入新 Bug”的死循环,用 LangGraph 搭建一个带有 Conditional Edge(条件边)的闭环,可以让 Agent 在代码真正通过静态检查或测试用例前,绝不退出循环。

如何利用 LangGraph 构建具有自我修正能力的自动化代码 Review Agent

我的实现逻辑是构建三个节点:Reviewer(审查员)、Coder(修复员)和 Verifier(验证员)。

关键配置:状态定义
首先定义一个 AgentState,用来追踪当前代码版本、错误列表以及循环次数,防止死循环。

from typing import Annotated, TypedDict, List
from langgraph.graph import StateGraph, END

class AgentState(TypedDict):
    code: str
    critiques: List[str]
    iteration_count: int
    is_fixed: bool

避坑指南:如何写好 Reviewer 的 Prompt
很多人的 Review Agent 说话太客气,导致 Coder 节点产生幻觉。我发现强制要求 Reviewer 输出「结构化错误列表」效果最好。

# Prompt 技巧
你是一个极其苛刻的代码审计专家。
请仅输出以下格式,不要任何废话:
- ERROR: [行号] [错误类型] -> [具体原因]
- SUGGESTION: [行号] [优化点] -> [改进方案]
如果代码完美,请仅输出 "PASS"。

核心逻辑:条件跳转
最关键的操作是在 Verifier 节点后设置条件边。我在这里接入了 pytestpylint 的命令行输出,而不是让 LLM 自行判断是否修复。

def should_continue(state: AgentState):
    # 如果验证通过,或者循环超过 3 次,则强制结束
    if state["is_fixed"] or state["iteration_count"] >= 3:
        return "end"
    return "continue"

# 构建图
workflow = StateGraph(AgentState)
workflow.add_node("reviewer", review_node)
workflow.add_node("coder", fix_node)
workflow.add_node("verifier", verify_node)

workflow.set_entry_point("reviewer")
workflow.add_edge("reviewer", "coder")
workflow.add_edge("coder", "verifier")
workflow.add_conditional_edges("verifier", should_continue, {
    "continue": "reviewer", 
    "end": END
})

效率提升点:上下文压缩
在多次迭代后,Token 消耗会剧增。我踩过的一个坑是把所有历史对话都传给 Coder,导致它在第三次修复时忘记了第一次的原始需求。现在的技巧是:在 coder 节点只接收 current_codelatest_critique,把历史记录在 state 中通过 reduce 函数进行精简,只保留未解决的 Bug 列表。

这样构建出来的 Agent 能够独立完成「发现 Bug -> 尝试修复 -> 运行测试 -> 再次审计」的全过程,比单纯在 Cursor 里来回对话要稳定得多,因为逻辑流是确定性的。

同类方向的延伸案例可以参考AI大模型变现案例库,有不少直接可参考的案例。

全部回复 (0)

还没有回复,来发第一条吧!

发表回复

支持 Markdown 格式