今年以来,我已经用AI Agent开发了大约10个产品,包括LaunchPad、交易机器人、预测市场、录单工具、GEO、英语启蒙和班级宠物等。
AI确实提高了开发速度,但代码质量仍然不能完全交给它。过去我试过直接让AI做code review,可这类泛化指令很难覆盖边界条件。很多问题在代码表面上看不出来,只有真正运行,或者遇到特殊输入时才会暴露。
所以,我一直在尝试改进测试和审查流程,尽量把问题留在上线之前。
这两天,我实际跑了一遍阿里开源的质检工具OpenCodeReview(简称OCR),它专门检查代码变更,尤其擅长发现那些“看起来能运行,实际上经不起推敲”的问题。下面记录一下我的使用过程,也分享给你。
OCR主要由两部分组成:
ocr:代码审查CLI
open-code-review:供AI Agent调用的Skill,文档见Agent Skill
先安装固定版本的CLI:
npm install -g @alibaba-group/open-code-review@1.12.12
验证安装:
ocr --version
为了让本地多个AI Agent共用同一份Skill,我把仓库放到了统一目录中:
cd ~/.agents
mkdir vendor
git clone --depth 1 --branch main \
https://github.com/alibaba/open-code-review.git \
~/.agents/vendor/open-code-review
ln -s ~/.agents/vendor/open-code-review/skills/open-code-review \
~/.agents/skills/open-code-review
这样只需要维护一份源码和一份Skill,Codex、OpenCode以及其他支持通用Agent Skill的工具都可以复用,避免重复安装。
OCR需要调用一个LLM来执行代码评审。为了方便使用国外模型套餐,我这次通过Agent.Space的OpenAI Responses接口进行配置:
ocr config set provider agent-space
ocr config set model gpt-6.1-sol
ocr config set custom_providers.agent-space.url https://api.agent.space/v1
ocr config set custom_providers.agent-space.protocol openai-responses
ocr config set custom_providers.agent-space.api_key '<YOUR_API_KEY>'
配置完成后,测试连接:
ocr llm test
如果看到下面的结果,说明模型连接和工具调用都正常:
Connection test successful
Tool-call round trip verified
顺便分享一下我目前使用的 Agent.Space:GPT Plus、Pro 5X 等方案目前有五折优惠,折算下来每月约 10 美元,也支持订阅 20 倍官方会员。它还提供云端电脑,可以让 Codex 等 Agent 持续运行,即使关闭本地电脑,任务也不会中断。 如果你有需要,可以通过这个链接了解:https://agent.space/app?ref=3GTP-2CDK
接下来,我用一个最简单的Go项目进行测试。
cd ~/workspace/go-project/src/demo
git init
git add go.mod main.go
git commit -m "hello world demo"
然后在 main.go 中加入一个故意留下边界问题的函数:
package main
import "fmt"
func average(values []int) int {
total := 0
for _, value := range values {
total += value
}
return total / len(values)
}
func main() {
fmt.Println("Hello, World!")
fmt.Println("Average:", average([]int{})) // 故意传入空切片
}
运行程序:
go run .
程序会因为空切片导致除数为0:
panic: runtime error: integer divide by zero
正式评审之前,可以先用预览模式查看OCR会检查哪些文件:
ocr review --preview \
--audience agent \
--background "这是一个Go Hello World演示项目,新增average函数用于测试空切片边界条件。"
输出结果:
Preview: 1 file(s) changed | +9 -0
Will review (1):
[M] main.go +9 -0
确认范围后,执行正式评审,并将结果保存为JSON:
ocr review \
--audience agent \
--format json \
--output ocr-result.json \
--background "这是一个Go Hello World演示项目,重点检查运行时错误、边界条件、错误处理和测试覆盖。"
OCR最终发现了一个High级别的问题:
main 调用了 average([]int{}),导致 len(values) 为 0,
程序每次运行都会发生 integer divide by zero。
应该在除法前处理空切片,并为 nil 和空切片增加测试。
完整结果保存在:
ocr-result.json
JSON中包含以下信息:
评审状态
使用的模型
评审文件数量
问题数量
文件路径和行号
问题类别和严重程度
评审耗时和 Token 用量
文件覆盖率
OCR 会话 ID
如果不指定输出文件,也可以直接在终端查看结果:
ocr review --audience agent
OCR能发现的问题不止除零错误,常见类型包括:
空值、空切片、数组越界和类型转换问题
未处理的错误返回值、异常路径和资源泄漏
注入、权限绕过和敏感信息泄露
并发竞态、死锁和数据竞争
重复计算、无界循环和不必要的I/O
数据一致性、事务和状态更新错误
API行为变化和兼容性问题
测试缺失以及关键路径覆盖不足
复杂逻辑、重复代码和不合理抽象
注释、文档与实际实现不一致
可以把OCR理解为一条标准化的自动质检线,而 Code Review and Quality Skill更像一个通用的高级评审者(见https://github.com/addyosmani/agent-skills/tree/main/skills/code-review-and-quality)。
| 对比项 | OCR | Code Review and Quality Skill |
|---|---|---|
| 主要定位 | 专用代码审查工具 | 通用代码评审方法 |
| 文件范围 | 自动筛选、分组和覆盖 | 由Agent自己判断查看范围 |
| 评审流程 | 固定模板、规则匹配、行级定位 | 依赖Agent的分析和检查清单 |
| 稳定性 | 结果更统一、可重复 | 更灵活,但更依赖上下文 |
| 擅长方向 | 变更代码中的明确缺陷 | 架构、需求、测试策略和整体质量 |
| 模型使用 | 统一调用OCR配置的模型 | 使用当前Agent的模型 |
如果只想检查新增代码中有没有明确 Bug,OCR通常更稳定。如果还要讨论架构设计、业务约束和长期维护成本,Code Review and Quality Skill更有优势。
我更推荐把两者结合起来:先让OCR扫描代码变更,再让通用Review Skill结合业务背景和系统架构做二次判断。
OpenCodeReview可以把AI生成的代码送上一条标准化质检线,帮助我在上线前发现那些隐藏在边界条件里的问题。 它不能替代完整的架构评审和测试设计,但作为AI编程流程中的一道自动检查,已经足够实用。
