基于 LangGraph 的智能代码审查 Agent。它把代码分析、语法检查、多维度审查、修复生成和报告输出组织成显式状态图,用确定性工具处理语法与常见安全风险,再由 LLM 补充可读性、性能和最佳实践建议。
A resilient code-review workflow that combines deterministic AST/security tools with LLM-assisted review, explicit routing, graceful degradation, and automated tests.
flowchart LR
A["Source code"] --> B["Analyze"]
B --> C["Syntax check"]
C --> D{"Syntax error and fix enabled?"}
D -- Yes --> F["Generate fix"]
D -- No --> S["Security scan"]
S --> E["LLM review"]
E --> G{"Need fix?"}
G -- Yes --> F
G -- No --> H["Format report"]
F --> H
H --> I["Review result"]
- 显式 Agent 编排:LangGraph 状态图展示每一步输入、输出和路由条件。
- 确定性语法检查:使用 Python AST 检测语法错误和提取代码结构。
- 安全扫描:识别硬编码密钥、SQL 动态拼接、命令注入和不安全配置。
- LLM 代码审查:从安全性、可读性、性能和最佳实践维度输出结构化问题。
- 按需修复:根据问题严重度进入修复节点,也可通过
--no-fix只生成报告。 - 上下文记忆:保存最近的对话和审查摘要,支持连续追问。
- 失败降级:模型初始化、审查或修复不可用时,仍返回本地语法检查与安全扫描报告。
- 自动化测试:18 项测试覆盖工具、路由、模型配置、失败降级、记忆和完整工作流。
早期的隐式 Agent 循环难以确认工具执行顺序,也不方便复现失败路径。状态图让语法检查、模型审查和修复生成成为独立节点,路由条件可以单独测试;新增工具时只需扩展节点和状态契约,不必重写整条流程。
Python · LangGraph · LangChain · OpenAI-compatible API · AST · Pytest
git clone https://github.com/AikingChoice/code-review-agent.git
cd code-review-agent
python -m venv .venv
source .venv/bin/activate # Windows: .venv\Scripts\activate
pip install -r requirements.txt
cp .env.example .env在 .env 中填写 DEEPSEEK_API_KEY 或 OPENAI_API_KEY,然后运行:
# 审查文件
python -m src.main path/to/example.py
# 审查代码片段
python -m src.main --code "def add(a, b): return a + b"
# 仅审查,不生成修复代码
python -m src.main path/to/example.py --no-fix无需 API Key 也可以运行本地安全扫描示例和自动化测试:
python -m pytest -q当前结果:18 passed。GitHub Actions 会在每次提交和 Pull Request 时自动执行测试。
AgentState 保存源代码、语言、问题列表、修复代码、历史上下文和最终报告。节点只更新自己负责的字段:
| Node | Responsibility |
|---|---|
analyze |
检测语言,统计代码并提取函数、类和导入信息 |
syntax_check |
运行确定性语法检查,决定是否直接修复 |
security_check |
执行敏感信息、SQL 与命令注入规则扫描 |
review |
调用 LLM 生成结构化审查问题 |
fix |
根据错误与警告生成修复版本 |
format |
汇总问题和修复代码,生成 Markdown 报告 |
安全扫描不完全依赖模型:
- 敏感信息与危险配置使用规则扫描。
- Python SQL f-string 和字符串拼接使用 AST 识别。
- 参数化 SQL 查询不会被标记为风险。
- 高危或严重问题会使报告的
safe字段变为false。
code-review-agent/
├── src/agent/ # LangGraph 状态、节点和路由
├── src/tools/ # 语法检查与安全扫描工具
├── src/memory/ # 会话上下文
├── examples/ # 示例代码与演示
└── tests/ # 工具和端到端工作流测试
- 增加工具超时、重试和结构化输出校验。
- 支持 JavaScript/TypeScript 的 AST 分析。
- 接入 GitHub Pull Request,自动发布行级审查意见。
- 建立误报率、召回率、响应时间和修复采纳率评测集。