跳至内容

AICodeReviewer

自托管的 AI 代码评审编排服务。统一接入各 VCS 的 webhook 和 trigger, 用你选的 agent CLI 评审代码,把结构化结果路由到 PR 评论、issue 和 IM 机器人。

AICodeReviewer (AICR) 是一个自托管服务,在多个版本控制系统之上编排 AI 代码评审。它把 webhook 和 trigger 归一到同一条评审流水线,在你选定的沙箱里运行 agent CLI,再把结构化结果路由回 PR 评论、托管 issue 或 IM 机器人。agent 的 自由文本 stdout 不会作为正式报告。

结构化报告契约

Agent 通过一组固定的 MCP 工具上报发现,AICR 负责校验、去重和渲染。 agent 的自由文本 stdout 不会成为报告。

多 agent 支持

Kilo Code、Claude Code、opencode、Zoo Code 和 Copilot CLI 共用同一套运行时契约,切换 agent 不用改流水线。

多 VCS 接入

GitHub、Gitea、Forgejo、GitLab 走 webhook;Perforce 和 Subversion 走 trigger。全部归一为同一个 ReviewEvent

默认安全

只拉取变更文件、只读源码挂载、沙箱命令白名单、每个边界的 secret 脱敏, 以及硬超时清理。

成本与上下文控制

自动 diff 压缩、按 run 的预算上限、LLM fallback 链,dashboard 按项目和 provider 统计 token 与成本。

自托管、单容器

server、队列 worker、orchestrator、dashboard 和数据库运行在同一进程中。 docker runpodman run 即可部署。

  1. Webhook 或 trigger 到达,来自你的 VCS(push、PR 或手动 /aicr review 命令)。AICR 用你配置的 HMAC secret 或 API key 验证请求。

  2. VCS 适配器拉取变更。 只拉取变更的文件(scoped fetch),不做全量 clone。 对 PR 计算 merge-base diff;对 P4 和 SVN 计算 changelist 或 revision diff。

  3. Diff 压缩。 当变更集超过模型上下文窗口时,AICR 保留最相关的 hunk, 裁剪其余部分。

  4. Agent 在沙箱中运行。 你选择的 agent CLI 在 Docker 或 Podman 容器中执行, 带着 diff、你的 instructions 和固定的 MCP 工具集。源码挂载只读,命令走白名单, 超时后杀掉整棵进程树。

  5. 结构化结果路由。 Problem 变成 PR 行内评论(带代码上下文)、托管 issue (带生命周期跟踪,修复后自动关闭)或 IM 摘要卡片(飞书/企业微信)。同一个 aicr.report_problem 调用驱动全部三种输出。

  • 多 VCS 接入。 GitHub、Gitea、Forgejo、GitLab 通过 webhook 接入;Perforce (P4) 和 Subversion (SVN) 通过 trigger 端点接入。全部归一为同一个 ReviewEvent
  • 多 agent 支持。 Kilo Code、Claude Code、opencode、Zoo Code 和 Copilot CLI 共用同一套运行时契约。AICR 把你的 ModelSpec 翻译成每个工具的原生字段,并在 run manifest 里记录不支持的能力降级,不会静默丢弃。
  • 结构化报告契约。 Agent 通过一组固定的 MCP 工具产出结果 (aicr.report_problemaicr.publish_summaryaicr.skipaicr.fetch_more_contextaicr.try_blame)。同一个 problem 可以渲染为 PR 行内评论、托管 issue 或 IM 摘要卡片。
  • 默认安全。 Scoped VCS fetch(只拉变更文件)、只读源码挂载、沙箱命令白名单、 每个边界的 secret 脱敏、整棵进程树的超时清理,以及服务容器用 --init 回收僵尸进程。
  • 上下文感知压缩。 大 diff 在进入模型上下文窗口前自动压缩。可以按模型覆盖 压缩阈值,不用改评审流水线。
  • 托管 Problem 生命周期。 Problem 通过稳定 fingerprint 跨 run 追踪。当文件被 重新评审且问题消失时,托管 issue 自动关闭。文件范围守卫保证:没评审到某文件的 run 不会误关该文件上的 issue。
  • 内置可观测性。 Dashboard 提供按项目统计、按 run 的 token 与成本明细、 provider 级 LLM 用量、每日汇总,以及供 Prometheus 抓取的 /metrics 端点。
  • 重试与降级。 队列级重试带指数退避。LLM fallback 链在主 provider 失败或 限流时切到下一个。
维度 选项
VCS 提供商 GitHub、Gitea、Forgejo、GitLab(webhook);Perforce (P4)、Subversion (SVN)(trigger)
Agent CLI Kilo Code、Claude Code、opencode、Zoo Code、Copilot CLI
输出通道 PR/MR 行内评论与摘要、托管 problem issue、飞书机器人、企业微信机器人
沙箱 native、docker、podman、docker_socket(k8s_podfirecracker 预留)
模型提供商 任意 OpenAI 兼容 API;models.dev 目录提供上下文窗口和定价元数据

每个发现都遵循同一套契约:无论由哪个 agent 产出、由哪个 channel 渲染,报告格式都 一致。一个 problem 始终携带严重级别分类文件路径行范围和人类可读的 message(外加可选的修复 suggestion)。

严重级别是固定的五级刻度,方便下游路由和分诊:

严重级别 含义
critical 合入前必须修复——数据丢失、安全漏洞、崩溃或数据损坏
high 在现实条件下有真实影响的疑似 bug 或漏洞
medium 值得处理的正确性、契约或性能风险
low 轻微问题或代码异味;可延后处理
info 提示性说明或观察,无需操作

分类把发现归入固定的族,例如 correctnesssecurityperformanceapi-contractstyle,分组和去重由此跨 run 保持一致。

评审以精确为先:agent 只报告验证过、可操作的问题,summary 只围绕这些问题展开, 不罗列“检查过但没发现异常”的部分。没有可操作问题时,评审以显式 skip 收尾, 不会发布空洞的表扬式 summary。

  • 最小假设。 AICR 归一化 VCS 输入,但不猜测你的工作流。跳过策略、输出路由、 标签管理、提交策略等行为都可配置。
  • 诚实降级。 agent 适配器或模型不支持某项功能(如结构化输出、推理模式)时, 会在 run manifest 中显式记录,不会静默丢弃。
  • 单容器部署。 整个服务——HTTP server、队列 worker、agent 编排器、dashboard 和 SQLite 数据库——运行在同一个进程中。docker runpodman run 即可部署; 需要更高并发时,多个 worker 进程可共享同一个 SQLite 或 Redis 队列。
  • 可读输出。 每个 problem 包含严重级别、分类、文件路径、行范围和人类可读消息。 IM 机器人收到渲染好的 Markdown 表格和代码块。agent 的原始 stdout 不会进入 用户可见的通知。

到生产最快的方式是单个 Docker 或 Podman 容器,前置反向代理,由 GitHub 或 Gitea webhook 触发。请从快速上手开始。做评估或贡献时, 本地 Node.js 快速上手只需要 pnpm installpnpm build