我写了一个 AI 代码质量流水线,一行命令搞定 Review + 修复 + 测试 + 报告

3 阅读7分钟

我写了一个 AI 代码质量流水线,一行命令搞定 Review + 修复 + 测试 + 报告

零依赖、支持 6 大 AI 厂商、npx 即跑,让 Vibe Coding 不再裸奔。

背景:Vibe Coding 时代的质量焦虑

2025-2026 年,AI 辅助编码(Cursor、Copilot、Windsurf……)让开发效率翻了几倍,但也带来了一个新问题:

AI 写得快,但谁来保证质量?

你让 Cursor 帮你写了一个 Vue 组件,它跑起来了,但——

  • 有没有 XSS 风险?
  • 边界值处理了吗?空值呢?
  • 类型是不是全用的 any
  • 错误处理有没有吞掉异常?

人工 Review?一个人的项目、外包团队、或者 996 的你,根本没时间。

所以我做了这个工具:ai-review-pipeline —— 让 AI 审查 AI 写的代码。

npx ai-review-pipeline

一行命令,Review → 测试用例 → HTML 报告,全自动。


它能做什么

默认模式:Review + 测试 + 报告(只读)

npx ai-rp --file src/views/Home.vue --full

执行流程:

① AI Code Review(评分 + 问题列表 + 修复建议)
       ↓
② AI 测试用例生成(功能 / 对抗 / 边界三类)
       ↓
③ HTML 可视化报告
       ↓
④ 有 🔴 问题 → exit(1) 阻断 CI;全绿 → exit(0) 放行

不改你一行代码,只审查、只报告。

终端实际运行效果:

Attached_image.png

--fix 模式:自动修复循环

npx ai-rp --fix --file src/views/Home.vue --full

执行流程:

① Review → 发现 3 个 🔴 问题
       ↓
② AI 自动修复(只改质量问题,不碰业务逻辑)
       ↓
③ 再次 Review → 还剩 1 个 🔴
       ↓
④ 再修 → 再审 → 0 个 🔴 ✅
       ↓
⑤ 测试用例生成
       ↓
⑥ HTML 报告
       ↓
⑦ 自动 git commit

修到没问题为止,最多跑 N 轮(默认 5 轮)。如果 N 轮还没修完?也不会卡死——照样出测试和报告,然后 exit(1) 告诉 CI "还有问题"。

自动生成的 HTML 可视化报告:

Attached_image2.png


30 秒上手

# 1. 配 Key(任选一个 AI 服务)
echo 'DEEPSEEK_API_KEY=sk-xxx' >> .env.local

# 2. 跑
npx ai-review-pipeline --file src/ --full

没了。不需要 npm install,不需要配置文件,不需要注册账号。


核心设计决策

为什么是统一流水线而不是分散命令?

v2 的时候我拆了三个命令:reviewfixtest。用了一段时间发现一个问题:

90% 的场景是 "帮我看一遍 + 出测试 + 出报告",每次要敲三遍命令太蠢了。

v3 改成了统一流水线:

操作命令
默认(review + test + report)ai-rp
自动修复ai-rp --fix
独立测试生成ai-rp test --file xxx

一个命令解决 90% 的需求,--fix 是增强开关。reviewfix 保留为别名,向下兼容。

Exit Code 的设计

这个工具的核心场景是 Git Hook + CI 门禁,exit code 必须精确:

场景Exit Code含义
Review 通过0放行
有 🔴 问题1阻断提交/合并
--fix 修好了0放行 + auto commit
--fix 没修好1阻断,但报告照出

最后一个是关键:即使 --fix 失败,测试和报告也会生成。因为报告是给人看的,不是放行的理由。CI 里可以把报告作为 artifact 上传,方便排查。


6 大 AI 厂商,自动识别

# 设一个 Key 就行,工具自动识别你用的哪家
OPENAI_API_KEY=sk-xxx              # → OpenAI
DEEPSEEK_API_KEY=sk-xxx            # → DeepSeek(国内推荐)
ANTHROPIC_API_KEY=sk-ant-xxx       # → Claude
DASHSCOPE_API_KEY=sk-xxx           # → 通义千问
GEMINI_API_KEY=xxx                 # → Google Gemini
AI_REVIEW_PROVIDER=ollama          # → 本地 Ollama(免费)
Provider默认模型特点
OpenAIgpt-4o-mini稳定,生态好
DeepSeekdeepseek-chat便宜,国内快,推荐
Claudeclaude-sonnet-4代码理解力强
通义千问qwen-plus阿里云,国内合规
Geminigemini-2.0-flashGoogle,免费额度多
Ollamaqwen2.5-coder完全本地,零成本,隐私安全

不想把代码传到云端?用 Ollama:

ollama pull qwen2.5-coder
echo 'AI_REVIEW_PROVIDER=ollama' >> .env.local
npx ai-rp --file src/ --full

审查维度

不是随便跑一遍就完事。Review prompt 按严重程度分了三级:

🔴 必修(阻塞合并)

逻辑错误、安全漏洞(XSS / 注入 / 敏感信息泄露)、数据风险(并发 / 金额精度 / 状态流转错误)

🟡 建议(应该修复)

边界未处理(空值 / undefined / 超时 / 重复提交)、类型问题(any / as 断言)、错误处理缺失

🟢 优化(后续改进)

代码重复、命名不清、性能隐患

最终输出结构化 JSON + Markdown,机器和人都能消费。


测试用例生成

不只是 review,还会自动生成三类测试用例:

类型覆盖什么
✅ 功能用例CRUD、状态流转、组件渲染、API 调用
⚔️ 对抗用例XSS 注入、SQL 注入、超长字符串、越权
🔲 边界用例空值、0、负数、MAX_SAFE_INTEGER、超时

输出包含用例描述 + 可运行的测试代码(自动检测技术栈:Vitest / Jest / pytest / Go testing)。


项目配置文件

npx ai-rp init

生成 .ai-pipeline.json,提交到 git,团队共享:

{
  "review": {
    "threshold": 95,
    "maxRounds": 5,
    "customRules": [
      "禁止使用 any 类型",
      "API Key / Secret 不得硬编码",
      "所有 API 请求必须有错误处理"
    ]
  },
  "test": {
    "stack": "auto",
    "maxCases": 8
  },
  "report": {
    "outputDir": ".ai-reports",
    "open": true
  }
}

customRules 是亮点——你可以写团队自己的规范,AI 会在每次 review 时强制检查。


CI/CD 集成

GitHub Actions

- name: AI Code Review
  run: npx ai-review-pipeline --json
  env:
    OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }}

Git Hook(lefthook)

# lefthook.yml
pre-push:
  commands:
    ai-review:
      run: npx ai-rp --fix --max-rounds 3

push 之前自动审查 + 修复,没过就阻断。


和同类工具的对比

维度ai-review-pipelineCodeRabbitSonarQube
部署npx 即跑,零配置SaaS,需注册需部署服务器
依赖零 dependenciesJava 运行时
自动修复✅ 多轮迭代
测试生成✅ 三类用例
AI 模型6 家可选 + 本地固定规则引擎(非 AI)
数据隐私Ollama 完全本地代码上传云端自建可控
价格按 token 付费(DeepSeek 几毛钱)$15/月起社区版免费

核心差异:这不是一个 SaaS 产品,是一个 CLI 工具。你的代码不经过任何中间服务器,直接调 AI API。


技术实现

架构

bin/cli.mjs              # CLI 入口,命令路由
src/commands/
  pipeline.mjs           # 统一流水线(review + fix + test + report)
  review.mjs             # review prompt 构建 + 结果解析
  test.mjs               # 独立测试生成
  init.mjs               # 配置初始化
src/core/
  ai-client.mjs          # 多 Provider 统一调用层
  config.mjs             # 配置加载与合并
  diff.mjs               # git diff / 文件读取
  env.mjs                # .env.local 加载
  report.mjs             # HTML 报告生成
  logger.mjs             # 日志 + i18n
src/i18n/
  zh.mjs / en.mjs        # 中英文消息

几个实现细节

1. 多 Provider 统一调用

除了 Claude(Anthropic 用自己的 Messages API),其他厂商都兼容 OpenAI 格式。所以只需两个调用函数:

// OpenAI / DeepSeek / Qwen / Gemini / Ollama → 统一格式
callOpenAICompatible({ baseUrl, apiKey, model, prompt })

// Claude → 独立处理(不同的 header 和 response 格式)
callClaude({ baseUrl, apiKey, model, prompt })

Provider 自动识别基于 Key 前缀(sk-ant- → Claude)和 Base URL 模式匹配。

2. 安全修复机制

自动修复有一个安全阀:修复后的文件不能低于原文件的 50%。防止 AI "修"出一个删了大半代码的结果。

if (fixed.trim().length < source.trim().length * safetyMinRatio) {
  // 跳过这次修复
}

3. 零依赖

整个工具 0 个 required dependency。Node.js 18+ 的 fetch 直接调 API,child_process 跑 git 命令,fs 读写文件。唯一的 optional peer dependency 是 https-proxy-agent(代理场景)。


真实使用场景

场景一:个人项目的质量兜底

你用 Cursor 一口气写了 2000 行代码,跑一遍:

npx ai-rp --file src/ --full

3 分钟后得到 HTML 报告,告诉你哪里有隐患。

场景二:团队 Git Hook 门禁

lefthook.yml 里配一行,每次 push 前自动审查:

pre-push:
  commands:
    ai-review:
      run: npx ai-rp

有 🔴 问题就阻断,团队代码质量有底线。

场景三:CI/CD 里的质量卡点

GitHub Actions 里加一个 step:

- run: npx ai-review-pipeline --json
  env:
    DEEPSEEK_API_KEY: ${{ secrets.DEEPSEEK_API_KEY }}

PR 不过 review 就不能合并。

场景四:接手遗留代码

接了一个没文档的老项目,先扫一遍:

npx ai-rp --file src/ --full --no-test

快速了解有哪些坑。


常用命令速查

# 默认模式:审查 + 测试 + 报告(不改代码)
ai-rp
ai-rp --file src/views/Home.vue --full
ai-rp --file src/ --full

# 修复模式:审查 + 自动修复 + 测试 + 报告
ai-rp --fix
ai-rp --fix --file src/a.vue --full --max-rounds 3

# 独立测试
ai-rp test --file src/utils.ts

# 初始化配置
ai-rp init

开源地址

npx ai-review-pipeline --file src/ --full

试试看,3 分钟给你的代码做一次体检。


如果对你有帮助,给个 ⭐ 或者掘金点个赞,是我继续迭代的动力。

有问题或建议欢迎提 issue 或评论区交流。