LVT382009/mizumi
GitHub: LVT382009/mizumi
一款自学习 AI 代码审查 GitHub Action,通过 BYOK 多模型支持、确定性规则引擎与 prompt injection 防御框架,为团队提供低成本、可记忆且防幻觉的自动化 PR 审查。
Stars: 0 | Forks: 0
# Mizumi — 自学习 PR 审查 Agent
Mizumi 是一个 GitHub Action,它使用 AI 审查 pull request,从过去的审查中学习,并发布可操作的发现 —— 伴随永远不会产生幻觉的确定性规则。
**数据证明:** AI 采用率高的团队合并的 PR 多了 98% —— 但审查时间增加了 91%,且零审查合并的 PR 增加了 31% ([Faros AI](https://www.getfaros.com),[AI 工程报告 2026](https://dev.to/code-board/the-review-bottleneck-why-faster-code-generation-isnt-faster-delivery-4273))。AI 审查的采用率在 2025 年从 14.8% 增长到了 51.4% ([Jellyfish](https://jellyfish.co)),目前有 130 万个仓库在使用 AI 辅助审查([GitHub Octoverse 2025](https://octoverse.github.com))。然而,40% 的组织报告称代码审查存在能力缺口。Mizumi 填补了这一缺口:为每个 PR 提供即时、一致的 AI 审查。
**为什么不用 Copilot Review?** 67% 的工程师已经在使用 Copilot Review([Jellyfish](https://jellyfish.co),2025 年 12 月)。它无处不在 —— 但它只停留在表面:通用的风格评论,没有自学习,没有确定性规则,且存在供应商锁定。Mizumi 是专家级的:支持 BYOK 并兼容 7 家提供商(Anthropic、OpenAI、Google、NVIDIA NIM、OpenRouter、本地模型、任何兼容 OpenAI 的 endpoint),自学习记忆能适应你的仓库,确定性的 secret/auth/SQL 规则永远不会产生幻觉,以及 Mermaid 图表可可视化你的更改架构。价格为 $0.001–$0.08/次审查(使用你自己的 API key),比 Anthropic 的代码审查($15–$25/次审查,约 20 分钟/PR)便宜 100 到 10,000 倍。
## 功能
- **从第一天起支持 BYOK** —— 自带 Anthropic、OpenAI、Google、NVIDIA NIM、OpenRouter 或任何兼容 OpenAI 的 endpoint(Together AI、Groq、DeepSeek、Fireworks、Ollama、llama.cpp、LM Studio)的 key
- **自学习** —— 通过 `.github/mizumi-memory.md` 记住每个仓库过去的审查模式
- **确定性规则** —— 在不调用任何 LLM 的情况下捕获硬编码的 secret、缺失的 auth middleware 和 SQL 注入
- **持久化规则引擎** —— 在 `.github/mizumi-rules.yml` 中自定义 regex/glob 规则,从 PR 审查历史中自动发现规则,以及让过时模式失效的规则衰退机制
- **两轮审查** —— LLM 审查 + 在更便宜的模型上进行自我批评,以减少误报
- **噪音控制** —— `chill` 配置(默认)仅标记 bug 和安全问题。`assertive` 会增加风格/文档建议
- **输入清理** —— 防御来自恶意 PR 内容的 prompt injection
- **输出筛查** —— 从审查输出中编辑 secret、外部 URL 和 shell 命令
- **Prompt injection 防御框架** —— 具有内容来源标记和行为异常检测的多层深度防御(首个具有明确防御架构的 AI 代码审查工具)
- **消费追踪** —— 带有每次审查 token 使用情况的 JSONL 仅追加日志
- **Webhook 幂等性 + SHA 去重** —— 防止 webhook 重试导致重复审查
- **Slop 检测** —— 跳过对低质量 AI 生成 PR 的深度审查
- **VS Code 深度链接** —— 每条审查评论都包含一个 `vscode://file/` 链接
- **分级路由** —— 将小 diff 路由到更便宜的模型以降低成本
- **置信度校准** —— 对边界发现进行双模型投票(高/中/低徽章)
- **Ticket 合规性** —— 检查 PR 更改是否与引用的 GitHub Issues 匹配(3 级:完全/部分/不匹配)
- **Change Stack** —— 将大型 PR 输出重组为依赖顺序(数据模型 → 契约 → 逻辑 → 消费者 → 测试)
- **通过 👍 自动修复** —— 在任何 Mizumi 建议上回复大拇指以自动应用修复
- **CI 验证的修复循环** —— 应用建议、轮询 CI 检查、失败时回退并重试(只有 Macroscope 具有类似功能)
- **AST 跨文件契约** —— 检测跨文件边界的缺失 exports、未处理的 throws 和签名更改
- **模糊去重** —— 抑制几乎重复的发现,并使用 rapid-fuzzy 匹配清理过时的评论
- **SQLite 学习** —— 追踪建议接受率,根据过去的反馈提升/降级类别
- **Mermaid 图表** —— 在审查输出中自动生成架构和严重性分布图表(GitHub 原生渲染)
- **学习持久化** —— 将记忆、反馈和技能提交回仓库,使它们在 Action 运行之间得以留存
## 快速开始
```
# .github/workflows/review.yml
name: Mizumi Review
on:
pull_request:
types: [opened, synchronize, ready_for_review]
issue_comment:
types: [created]
jobs:
review:
if: >
github.event_name == 'pull_request' ||
(github.event_name == 'issue_comment' &&
startsWith(github.event.comment.body, '/mizumi'))
runs-on: ubuntu-latest
permissions:
pull-requests: write
contents: write
issues: write
steps:
- uses: actions/checkout@v4
with:
persist-credentials: false
- uses: LVT382009/mizumi@v0.1
with:
anthropic_api_key: ${{ secrets.ANTHROPIC_API_KEY }}
# openai_api_key: ${{ secrets.OPENAI_API_KEY }}
# google_api_key: ${{ secrets.GOOGLE_API_KEY }}
# nvidia_api_key: ${{ secrets.NVIDIA_NIM_API_KEY }}
model: claude-sonnet-4-6
provider: anthropic
profile: chill
```
## 配置
### Action 输入
| 输入 | 默认值 | 描述 |
|---|---|---|
| `anthropic_api_key` | — | Anthropic API key |
| `openai_api_key` | — | OpenAI API key |
| `google_api_key` | — | Google AI API key |
| `openrouter_api_key` | — | OpenRouter API key |
| `nvidia_api_key` | — | NVIDIA NIM API key (`nvapi-*`) |
| `local_api_key` | `"dummy"` | 用于本地/自托管模型的 API key(Ollama/llama.cpp/LM Studio 通常不需要) |
| `custom_api_key` | — | 用于自定义兼容 OpenAI endpoint 的 API key(Together AI、Groq、DeepSeek 等) |
| `base_url` | — | 兼容 OpenAI endpoint 的自定义 base URL |
| `model` | `claude-sonnet-4-6` | 要使用的模型(你的提供商支持的任何模型 ID) |
| `provider` | `anthropic` | `anthropic` \| `openai` \| `google` \| `openrouter` \| `nvidia` \| `local` \| `custom` |
| `profile` | `chill` | `chill` (bug/安全) \| `assertive` (+ 风格) \| `followup` (+ 检查之前的评论) |
| `max_comments` | `15` | 每次审查的最大内联评论数 |
| `self_critique` | `true` | 启用两轮自我批评 |
| `confidence_threshold` | `80` | 过滤置信度 < N (0-100) 的发现 |
| `auto_review` | `true` | 在 PR 事件上自动审查 |
| `auto_pause_after` | `5` | 每个 PR 自动审查 N 次后停止 |
| `language` | `en-US` | 审查评论语言 |
| `tier_routing` | `true` | 将小 diff 路由到更便宜的模型 |
| `small_diff_threshold` | `50` | 分级路由的行数阈值 |
| `compliance_check` | `true` | 检查 Ticket 到代码的合规性 |
| `auto_fix` | `false` | 在 👍 反应时自动应用建议 |
| `confidence_calibration` | `true` | 对边界发现进行双模型投票 |
| `change_stack` | `true` | 将输出重组为依赖顺序 |
| `improve_enabled` | `false` | 启用 /mizumi improve(需要 contents: write 权限) |
| `rule_engine` | `true` | 启用带有自动发现的持久化规则引擎 |
| `ci_validated_fix` | `false` | CI 验证的修复循环:应用建议、轮询 CI、失败时回退(需要 `improve_enabled`) |
| `ci_fix_timeout` | `600` | 等待修复提交的 CI 检查的最大秒数 |
| `ci_fix_max_retries` | `3` | 放弃前的最大修复尝试次数 |
| `ci_fix_revert_on_failure` | `true` | 如果 CI 失败则回退修复提交 |
| `ast_contract_analysis` | `true` | AST 跨文件契约分析(缺失的 exports、未处理的 throws、签名更改) |
### 单个仓库配置 (`.github/mizumi.yml`)
```
llm:
model: claude-sonnet-4-6
# base_url: https://api.together.xyz/v1 # For custom provider
review:
profile: chill
max_comments: 15
confidence_threshold: 80
exclude:
- "*.lock"
- "dist/**"
- "vendor/**"
- "generated/**"
```
### 项目规则
在你的仓库根目录或 `.github/` 目录下创建 `REVIEW.md` 或 `CLAUDE.md`。Mizumi 会读取这些文件,并将它们作为审查上下文包含进去:
```
# Review Rules
- Always use parameterized queries (no string concatenation)
- All API routes must call authentication middleware
- Never commit secrets — use environment variables
```
### 自学习记忆
Mizumi 在每次审查后写入 `.github/mizumi-memory.md`,从严重/高发现中捕获模式。这种记忆会被注入到未来的审查中,帮助 Mizumi 学习特定于仓库的模式。你可以随时编辑或删除此文件。
### 自定义规则 (`.github/mizumi-rules.yml`)
定义特定于项目的 regex 或 glob 规则,这些规则将在 LLM 审查之前确定性地运行:
```
rules:
- name: no-console-log
pattern: "console\\.log"
file_glob: "src/**/*.ts"
severity: low
category: style
message: "Avoid console.log in production code"
- name: no-eval
pattern: "\\beval\\s*\\("
severity: critical
category: security
message: "eval() is a security risk"
- name: check-auth-files
type: glob
file_glob: "src/auth/**"
severity: medium
category: security
pattern: ""
message: "Auth file modified — verify authorization logic"
```
### 自动发现的规则
Mizumi 从存储在 SQLite 中的审查历史中挖掘模式。当同一个文件+类别模式出现 3 次以上且接受率达到 40% 以上时,Mizumi 会自动发现一条规则,在未来的审查中标记类似的文件。当发现的规则的类别接受率较低时,它们会随着时间的推移而衰退 —— 置信度低于 30 的规则会被自动停用。
### CI 验证的修复循环
当 `ci_validated_fix` 和 `improve_enabled` 都为 `true` 时,Mizumi 在应用修复建议后进入自我修复循环:
1. **应用** —— 将建议块提交到 PR 分支(通过 Git Data API)
2. **轮询** —— 等待修复提交的 CI 检查(`repos.getCombinedStatusForRef` + `checks.listForRef`)
3. **验证** —— 如果 CI 通过:完成。如果 CI 失败:回退修复提交并重试(最多重试 `ci_fix_max_retries` 次)
4. **回退** —— 使用 `git.updateRef`(强制)将分支重置为修复前的父 SHA
这可以防止破损的代码被合并:每个自动修复在被接受之前都会针对你的 CI 进行验证。没有其他 AI 审查工具(除了 Macroscope)提供此功能。
```
- uses: LVT382009/mizumi@v0.1
with:
improve_enabled: true
ci_validated_fix: true
ci_fix_timeout: 600 # 10 min max CI wait
ci_fix_max_retries: 3 # up to 3 fix attempts
ci_fix_revert_on_failure: true # revert broken fixes
```
### 手动触发
在任何 PR 上评论 `/mizumi` 以按需触发审查。这会绕过 `auto_pause_after` 限制。
### 子命令
| 命令 | 描述 |
|---|---|
| `/mizumi describe` | 通过 diff 分析生成结构化的 PR 描述 |
| `/mizumi improve` | 通过 Git Data API 应用来自审查评论的 ```suggestion 块(一键修复) |
| `/mizumi spend` | 显示跨审查的 token 使用摘要 |
| `/mizumi test` | 为严重/高发现生成 vitest 测试骨架 |
### 自动技能生成
当 Mizumi 检测到重复的审查模式时,它会将可重用的技能文件写入 `.github/mizumi-skills/`。这些技能会被注入到未来的审查中,让 Mizumi 能够确定性地应用学习到的模式,而无需重新发现它们。你可以随时编辑或删除技能文件。
## NVIDIA NIM 设置
```
- uses: mizumi-dev/mizumi@v0.1
with:
nvidia_api_key: ${{ secrets.NVIDIA_NIM_API_KEY }}
provider: nvidia
model: meta/llama-3.3-70b-instruct
```
## 本地模型设置 (Ollama, llama.cpp, LM Studio)
```
- uses: mizumi-dev/mizumi@v0.1
with:
provider: local
base_url: http://localhost:11434/v1 # Ollama default
# base_url: http://localhost:8081/v1 # llama.cpp server
# base_url: http://localhost:1234/v1 # LM Studio
model: llama3
```
## 自定义提供商 (Together AI, Groq, DeepSeek 等)
```
- uses: mizumi-dev/mizumi@v0.1
with:
provider: custom
custom_api_key: ${{ secrets.CUSTOM_API_KEY }}
base_url: https://api.together.xyz/v1
model: meta-llama/llama-3.3-70b-instruct
```
## 输出
| 输出 | 描述 |
|---|---|
| `review_id` | 发布的 PR 审查的 ID |
| `finding_count` | 发布的发现数量 |
| `risk_score` | 风险评分 1-5 |
| `compliance` | Ticket 到代码的合规级别(完全/部分/不/无) |
| `auto_fixed` | 通过 👍 反应批准自动应用的建议数量 |
## 对比
| | Mizumi | Copilot Review | CodeRabbit | Anthropic Code Review | Macroscope |
|---|---|---|---|---|---|
| **成本/审查** | $0.001–$0.08 (BYOK) | $19–$39/用户/月 | 免费 / $24+/用户/月 | $15–$25 | ~$0.95 平均 |
| **提供商** | 7 + 任何兼容 OpenAI | 多模型 | OpenAI/Anthropic | 仅限 Anthropic | 自有模型 + AST |
| **自学习** | 记忆 + SQLite + 技能 + 自动发现 | 否 | 可学习的偏好 | 否 | 否 |
| **确定性规则** | 12 个内置 + 自定义 YAML + 自动发现 | 仅 ESLint/CodeQL | 40+ 个内置 linter | 否 | AST 图分析 |
| **Mermaid 图表** | 架构 + 严重性 | 否 | | 否 | 否 |
| **速度** | 秒级 | 秒级 | ~30s | ~20 分钟 | 快速 |
| **审查深度** | 两轮 + 校准 | 表面(36.7% 召回率) | 标准(46% 检测率) | 深度(多 Agent) | 深度(48% 检测率) |
| **自定义规则** | mizumi-rules.yml + REVIEW.md + CLAUDE.md | copilot-instructions.md | .coderabbit.yaml | 自定义指令 | 配置文件 |
| **自动发现的规则** | 是(SQLite 挖掘 + 衰退) | 建议规则 (beta) | 否 | 否 | 否 |
| **自动修复** | 👍 反应 → 提交 | 否 | 是 | 否 | CI 验证的修复循环 |
| **平台** | GitHub (v0.1) | 仅限 GitHub | GitHub + GitLab + Azure + Bitbucket | 仅限 GitHub | 仅限 GitHub |
| **CI 验证的修复** | 是(轮询+回退+重试) | 否 | 否 | 否 | 是 |
| **AST 跨文件分析** | 是(regex AST 模式) | 否 | 否 | 否 | 是(AST 图) |
## 许可证
MIT — 详情见 [LICENSE](LICENSE)。
## 免责声明
**此审查由 Mizumi 的 AI 生成。在采取行动之前,请务必验证发现。它不能替代人工安全审查。**
用户有责任确保他们有权将代码发送给他们选择的 LLM 提供商。Mizumi 不验证数据权利。审查输出可能包含不准确之处 —— 应将所有发现视为需要人工验证的建议。
标签:AI代码审查, AI风险缓解, DevOps工具, DLL 劫持, GitHub Action, Petitpotam, 大语言模型, 自动化payload嵌入, 自动化攻击, 逆向工具, 错误基检测, 静态代码分析