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嵌入, 自动化攻击, 逆向工具, 错误基检测, 静态代码分析