我开源了一个自部署 GitHub AI Code Review Bot
最近我把一个 AI Code Review 机器人开源了:Prism Reviewer。
它不是一个只能本地跑 prompt 的 demo,而是一个可以真正接到 GitHub Pull Request 上的自部署机器人:通过 GitHub App 接收 PR 事件,拉取 diff 和文件内容,做 AST 感知分析、检索增强、多模型路由,然后把审查结果发布成 PR 总结、行内评论和 GitHub Checks。
项目地址:
为什么做这个项目
现在很多 AI Code Review 工具要么是 SaaS,要么只是“把 diff 塞进 prompt 里”的脚本。
我想做的是一个更接近真实工程场景的开源版本:
- 可以自己部署,不必把私有代码交给第三方托管服务。
- 可以自己选择模型,DeepSeek、Qwen、Claude 都能接。
- 可以真正接 GitHub App,而不是只能手动复制 diff。
- 可以在 PR 里留下行内评论,而不是只生成一段总结。
- 可以扩展 RAG,把仓库架构文档、代码片段、审查规则作为上下文。
所以 Prism Reviewer 的定位是:
一个自部署的 GitHub AI Code Review Bot。
你自己创建 GitHub App,自己部署服务,自己配置模型 API Key。它默认不依赖作者服务器,也不绑定某个模型厂商。
它能做什么
Prism Reviewer 当前已经支持这些能力:
- GitHub App 接入:监听 PR opened、reopened、ready_for_review、synchronize 等事件。
- Webhook 签名校验:校验 GitHub 的
x-hub-signature-256,避免伪造请求。 - AST 感知 diff 分析:对 JS/TS 文件解析 AST,提取函数、类、方法、变量和 import。
- 多模型路由:普通 PR 走 DeepSeek,大 diff 可走 Qwen,安全敏感改动优先走 Claude。
- Qdrant RAG:可选把仓库上下文写入 Qdrant,Review 时检索相关上下文。
- bge-reranker:可选对检索结果做重排。
- PR 总结评论:在 Conversation 页面输出本次 PR 的整体总结和问题列表。
- 行内 Review 评论:能定位到 diff 行的问题会直接评论到 Files changed 页面。
- GitHub Checks:同步发布 Checks annotation,方便在 CI 区域查看。
- SSE 流式输出:每次 Review run 都有阶段事件,后续可以接 Web Dashboard。
效果截图
PR 总结效果:
行内评论效果:
Demo PR:
技术架构
整体流程大概是这样:
GitHub Pull Request
↓
GitHub App Webhook
↓
签名校验 + 事件过滤
↓
拉取 PR 文件、patch 和 head 文件内容
↓
AST + diff 摘要
↓
Qdrant 检索仓库上下文
↓
bge-reranker 重排
↓
多模型路由
↓
DeepSeek / Qwen / Claude / 本地规则
↓
结构化 Review Finding
↓
PR 总结评论 + 行内评论 + Checks Annotation
我没有一上来就堆很重的 Agent 框架,而是先把状态机拆清楚:加载文件、构建 AST、检索上下文、选择模型、运行模型、发布结果。这样后续如果要接 LangGraph,可以把这些阶段自然映射成节点。
为什么要做 AST 感知
最简单的 AI Review 做法是直接把 diff 丢给模型。
这个方式能跑,但信息太粗。模型不知道这次改动落在哪个函数、哪个类、改动文件 import 了什么、是否触碰了安全敏感依赖。
Prism Reviewer 会对 JS/TS 文件解析 AST,并提取:
- 改动命中的函数
- 改动命中的类
- 改动命中的方法
- 改动命中的变量声明
- import 来源
- diff 新增行范围
这些信息会进入 prompt,让模型更容易给出可定位、可解释的审查意见。
多模型路由怎么做
不同 PR 不一定适合同一个模型。
当前默认策略是:
- 没有配置模型 Key:走本地规则,方便离线演示。
- 普通 PR:走 DeepSeek,成本低、速度快。
- 大体量 diff:如果配置了 Qwen,走 Qwen。
- 安全敏感改动:如果配置了 Claude,优先走 Claude。
这样做的目的不是追求“模型越贵越好”,而是让成本和效果更平衡。
为什么支持 Qdrant RAG
真实代码审查不只看 diff。
很多问题需要知道项目里的架构约定、公共工具、测试策略、历史上下文。Prism Reviewer 预留了 Qdrant 索引能力,可以把仓库代码片段、架构文档、审查策略写入向量库。
Review 时,系统会根据当前 PR 文件名和 AST 符号构建检索 query,再把相关上下文塞进 prompt。
默认也支持 hash embedding,不需要额外 API Key,适合低成本部署。想要更好的语义检索,可以切换到 Qwen embedding。
如何部署
本地 Docker 验证:
git clone https://github.com/which336/prism-reviewer.git
cd prism-reviewer
cp .env.local-docker.example .env
docker compose --profile app up -d --build app
curl http://localhost:8080/healthz
curl http://localhost:8080/readyz
生产自部署:
cp .env.production.example .env
# 编辑 .env,填写 GitHub App 配置和至少一个模型 Key
docker compose --profile app up -d --build app
完整部署文档:
适合谁
这个项目适合:
- 想给自己团队加一个自部署 AI Code Review Bot 的人。
- 想学习 GitHub App、Webhook、PR Review API 的人。
- 想做 AI 工程化项目,而不是只写 prompt demo 的人。
- 想研究 AST diff、RAG、多模型路由、SSE 的人。
- 想基于它继续做 LangGraph 多 Agent 状态机的人。
后续计划
后面我计划继续补这些能力:
- 接入 tree-sitter,支持 Python / Go / Rust / Java / Kotlin 的 AST 摘要。
- 增加 LangGraph adapter,把当前 Review 状态机变成多 Agent 图。
- 增加仓库级配置文件,例如
.prism-reviewer.yml。 - 增加 Web Dashboard,展示 Review run 历史、模型路由和 finding 趋势。
- 增加更多 Review policy pack,比如安全、后端、前端、测试、基础设施。
项目地址
GitHub:
如果你也想要一个能自己部署、自己控制模型 Key、能真正评论 GitHub PR 的 AI Code Review Bot,可以试试这个项目。