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, 多智能体系统, 请求拦截, 逆向工具, 错误基检测, 静态代码分析