bluecodeTemptation13/ai-code-review-assistant
GitHub: bluecodeTemptation13/ai-code-review-assistant
基于 LangGraph 和 Claude API 构建的多智能体系统,通过 GitHub webhook 自动对 Pull Request 进行安全、性能和代码质量审查并回帖 Markdown 报告。
Stars: 0 | Forks: 0
# AI 代码审查助手
这是一个多智能体系统,用于审查 GitHub pull request 中的安全与性能问题,通过 LangGraph 进行编排,并(可选地)使用 Claude 进行上下文感知审查,最后将结果作为 PR 评论发布。
## 状态
已完成全部规划范围的构建:Security Scanner、Performance Analyzer、Code Quality Agent、LangGraph 编排、Report Generator、GitHub webhook。**尚未针对真实 PR 进行运行** —— 这是在将任何指标(审查时间缩短、捕获的问题、PR 数量)添加到任何地方(包括简历)之前的下一步。这里没有捏造的数字。
## 架构
```
GitHub PR event
|
v
FastAPI webhook (app/api/routes.py)
|
v
GitHub API: fetch changed files (app/service/github_client.py)
|
v
LangGraph review graph (graph.py)
|
+--> Security Scanner (app/agents/security_scanner.py)
+--> Performance Analyzer (app/agents/performance_analyzer.py)
+--> Code Quality Agent (app/agents/code_quality.py)
+--> Report Generator (app/agents/report_generator.py)
|
v
Markdown comment posted back to the PR
```
### Agents
- **Security Scanner** — 静态 AST/regex 规则(硬编码的 secrets、调用点的 SQL injection、eval/exec、不安全的反序列化、弱加密、禁用 TLS 验证、shell injection)加上一个可选的 Claude 过程,用于确认/修剪发现的问题并添加基于推理的发现。使用 `ENABLE_LLM_REVIEW=true` 和有效的 `ANTHROPIC_API_KEY` 启用 LLM 过程;如果缺少其中任何一个,则仅运行静态规则。
- **Performance Analyzer** — 仅限静态 AST 规则:N+1 查询模式、超过阈值的圈复杂度、`async def` 内的阻塞式 I/O,以及循环中的 O(n²) 字符串拼接。
- **Code Quality Agent** — 仅限静态 AST/regex 规则:命名约定违规(函数/类)、公共函数/类/模块缺失 docstring、return/raise/break/continue 之后不可达的死代码,以及未使用的 import。
- **Report Generator** — 将所有三个 agent 的发现合并为一份 Markdown 报告,包含一个汇总表和按严重程度排序的逐文件详情。
## 设置
```
python -m venv .venv && source .venv/bin/activate
pip install -r requirements.txt
cp .env.example .env # fill in real values
```
### 必需的环境变量
| 变量 | 用途 |
|---|---|
| `ANTHROPIC_API_KEY` | Claude API key(仅在 `ENABLE_LLM_REVIEW=true` 时需要) |
| `CLAUDE_MODEL` | 默认为 `claude-sonnet-4-6` |
| `GITHUB_WEBHOOK_SECRET` | 在 GitHub webhook 上配置的共享 secret,用于验证 `X-Hub-Signature-256` |
| `GITHUB_TOKEN` | 具有 `repo` scope 的 personal access token(或 GitHub App token),用于获取 PR 文件并发表评论 |
所有其他设置(参见 `app/config/settings.py`)都有合理的默认值。
## 本地运行
```
python main.py
# 在另一个终端中,将其暴露以便 GitHub 的 webhook 可以访问:
ngrok http 8000
```
将 GitHub webhook(Settings → Webhooks)指向
`https://.ngrok.io/webhook/github`,content type 设为
`application/json`,secret 与 `GITHUB_WEBHOOK_SECRET` 匹配,并
订阅 `Pull requests` 事件。
## 测试
```
pytest tests/ -v
```
包含 56 个测试,全部为静态/mocked —— 运行该测试套件无需网络访问或 API key。覆盖范围包括:静态规则的真阳性、真阴性案例(参数化查询、安全的 YAML 加载、占位符 secrets 等)、完整的 LangGraph 端到端运行,以及 mock 了 GitHub 调用的 webhook 路由。
## Linting
```
ruff check app/ main.py graph.py tests/
pylint app/ main.py graph.py
```
## Docker
```
docker build -t ai-code-review-assistant .
docker run -p 8000:8000 --env-file .env ai-code-review-assistant
```
以非 root 用户运行;`/health` 是容器的健康检查 endpoint。
## 目录结构
```
main.py FastAPI app entry point
graph.py LangGraph orchestration
Dockerfile
requirements.txt
app/
agents/ Security Scanner, Performance Analyzer, Report Generator
api/ FastAPI routes (GitHub webhook)
config/ Env-var-based settings
logger/ JSON structured logging
models/ Pydantic schemas (Finding, ScanReport, ...)
service/ GitHub API client
utils/ Shared AST helpers
tests/
```
## 尚未完成
- 真实 PR 验证(根据人类实际会留下的审查意见进行准确性检查)
- 任何类型的指标 —— 有待完成上述验证
标签:AI代码审查, Claude API, GitHub Webhook, LangGraph, PyRIT, 多智能体系统, 请求拦截, 逆向工具, 错误基检测, 静态代码分析