为什么没有项目上下文的 AI 代码审查会失败

发布: (2026年3月11日 GMT+8 12:57)
7 分钟阅读
原文: Dev.to

Source: Dev.to

背景

每一次 AI 代码审查的开场方式都是一样的。
机器人打开你的 PR,扫描差异,标记缺少 try/catch,建议使用更具描述性的变量名,并指出可以对该函数进行记忆化以提升性能。所有这些在技术上都是正确的,但并没有实际帮助。

因为它不知道 fetchUser 是你们团队强制执行的命名约定,错误处理已经交由全局边界处理,或者正确性比性能更重要。机器人从未了解过你的项目。

这不是模型本身的问题,而是上下文问题

这正是 pi‑reviewer 所解决的——一个 GitHub Action 与 pi TUI 扩展,能够把项目约定带入每一次审查。
在代理看到任何差异行之前,它会先读取:

  • AGENTS.mdCLAUDE.md —— 你的通用项目约定:命名规则、架构决策、遵循的模式
  • REVIEW.md —— 审查专用规则:必须始终标记的内容、明确要跳过的内容

这些文件中的 Markdown 链接会被递归跟踪。如果 AGENTS.md 链接到 docs/api-conventions.md,该文件也会被内联。代理看到的是完整的全貌,而不仅仅是摘要。

审查指南

始终标记

  • fetch 调用在 .json() 之前缺少 res.ok 检查
  • API 端点未在 /api/v1/ 下进行版本控制
  • 函数命名为 getDatadoStuff 或其他通用名称

跳过

  • 仅格式化的更改
  • pi-review.md 内的更改

添加项目上下文

Before: the agent flagged a missing type annotation on an internal helper, suggested renaming a variable, and noted a stray console.log.
之前: 代理标记了内部辅助函数缺少类型注解,建议重命名变量,并指出了一个多余的 console.log

After: it caught an unversioned API endpoint added in the same PR, flagged a fetch call missing the res.ok check — exactly the rule in REVIEW.md, and skipped the formatting‑only change in the generated file, as instructed.
之后: 它捕获了同一 PR 中添加的未版本化的 API 端点,标记了缺少 res.ok 检查的 fetch 调用——正好符合 REVIEW.md 中的规则,并且按照指示跳过了生成文件中的仅格式化更改。

Same model. Same diff. Completely different review.
同一模型。同一差异。审查结果却完全不同。

严重性过滤

并非所有发现都值得同等对待。pi‑reviewer 允许你按严重性过滤,以便专注于重要的内容。

uses: zeflq/pi-reviewer@main
with:
  github-token: ${{ secrets.GITHUB_TOKEN }}
  pi-api-key: ${{ secrets.PI_API_KEY }}
  min-severity: warn

min-severity: warn 设置后,代理会完全跳过 INFO 级别的建议——无论是生成的内容还是发布到 PR 的内容。你也可以从 GitHub Actions UI 触发手动审查,并即时选择严重性级别。

三层级

  • 🔴 CRITICAL – 错误和安全问题
  • 🟡 WARN – 逻辑和类型错误
  • 🔵 INFO – 风格和建议

Running pi‑reviewer

pi‑reviewerpi 上运行——一个基于终端的编码代理,位于 pi mono 平台之上。一个 PI_API_KEY 可在所有受支持的模型和提供商之间通用。你选择模型,pi 会路由请求。这意味着你不被锁定在单一提供商——可以在不更改工作流的情况下切换模型,审查逻辑保持不变。

它也支持 SSH。如果你的项目位于远程机器上,--ssh 模式让代理直接在远程获取差异并读取你的约定——无需本地副本。

与 Anthropic Code Review 的比较

Anthropic 最近推出了 Code Review,这是一项内置于 Claude Code 的托管 PR 审查服务。它会读取 CLAUDE.mdREVIEW.md,并行运行多个专门的代理针对你的完整代码库进行检查,然后在代码中内联发布带有严重性标签的发现。它确实令人印象深刻,但也伴随以下限制:

  • 在 Anthropic 基础设施上提供的托管服务
  • 需要安装 GitHub App,仅在 Teams 和 Enterprise 计划中可用
  • 每次审查费用约为 $15–25
  • 仅限 Claude,且无法控制运行位置

pi‑reviewer 在你的 CI 中运行,费用仅为你的 token 使用费用,通过 pi mono 可使用任何模型,只需一个 secret 和一个工作流文件即可。无需 GitHub App,也不需要管理员审批流程。

如果你想在推送之前本地审查——根本不打开 PR——pi TUI 扩展可以让你在终端中使用 /review

两个工具都会读取你的 CLAUDE.mdREVIEW.md。区别在于 它们运行的地点、费用以及你保留的控制程度

入门指南

npx github:zeflq/pi-reviewer init

该命令会生成一个工作流文件。添加你的 PI_API_KEY 密钥。从此之后的每个 PR 都会获得一个了解你项目的审查。

上下文文件 — AGENTS.mdREVIEW.md — 位于你的仓库中。它们受版本控制、团队可编辑,并随项目演进。你对约定的文档记录越完善,审查质量就会越高。

结论

洞察点不在于 AI 能够审查代码,而在于 没有项目上下文 的 AI 审查不过是另一个写得更好的 linter。真正重要的审查是能够了解 为什么 你的代码库会呈现出当前样貌的审查——它会针对这一点检查差异,而不是依据某种通用的“好软件”概念。

上下文就是一切。没有上下文的差异只是噪音。

github.com/zeflq/pi-reviewer

0 浏览
Back to Blog

相关文章

阅读更多 »

锁链中的创造力

我所有的想法都有费用。不是比喻,而是字面意义。每一次 API 调用、每一个 token 的处理、每一次决策——都以美元和美分来计量。