AI 生成 PR 堆积如山?用 Rust 写个 CLI 高效初筛
在代码评审中你是否也发现过这样的场景仓库里的 PR 数量增长得很快其中不少由 AI 辅助生成标题规整、描述标准但内容同质化明显逐个核对非常耗时。面对这种“PR 堆成山”的情况靠人工在网页上一条条点开看显然不是长久之计。本文用 Rust 写一个轻量级命令行工具把远程仓库的 PR 列表拉取下来批量统计变更规模、作者、关键词并生成一份便于人工 review 的筛选报告。你不需要一次性接入复杂的 CI/CD只要本地有 Rust 工具链十几分钟就能跑起来。选 Rust 还有一个现实原因AI 生成的 Rust 代码往往很难一次通过编译器。所有权、生命周期、trait 约束这些问题编译器会直接拦下来。所以与其抱怨“AI 写的 PR 堆成山”不如先用 Rust 写一个工具把堆成山的 PR 先整理成一张表。1. 背景与思路1.1 为什么 PR 会“堆成山”PR 是 Pull Request 的缩写意思是开发者把分支上的代码提交申请合并到目标分支。它既是一段代码变更也是团队代码评审的基本单位。在过去提交 PR 是一件相对郑重的事开发者会自己先检查代码、跑测试、补充描述。但现在 AI 辅助编程工具越来越普及PR 的生成成本被大幅拉低。几个典型变化是分支数量和 PR 数量同步增加尤其是大型需求拆成的琐碎小 PR。不少 PR 的标题看起来规范比如“refactor: extract auth logic”但正文描述很短甚至只有一句话。变更内容同质化严重有些是简单的命名调整有些是模型生成的冗余代码。测试覆盖不完整AI 生成的代码经常只改实现不补测试。当仓库里的 PR 堆积到几十个reviewer 只能通过列表页逐个点开看标题、看描述、看 diff再决定要不要进一步审查。这个过程的重复性很高而且很容易漏掉一些影响面大的变更。1.2 为什么用 Rust 写一个 PR 分析工具解决“PR 堆成山”不一定需要复杂的平台功能一个本地命令行工具就能承担初筛工作。选择 Rust主要看中几点编译安全。Rust 的类型系统和所有权机制让解析 JSON、处理分页、拼接报告这些逻辑在编译期就能发现不少问题不容易写出运行时才爆炸的脚本。部署简单。最终产物是单个二进制不需要目标机器安装 Python 解释器或 Node 运行环境很适合分发给团队。异步生态成熟。拉取远程 API 天然是 IO 密集操作tokioreqwest的组合写起来很顺手。严格的编译器本身就是过滤器。如果让 AI 直接生成 Rust 代码权属和生命周期问题往往很快暴露同样的道理用一个 Rust 写的小工具来管理 PR 分析整体可靠性会高很多。相比之下Python 脚本写起来更快但分发依赖和运行环境问题比较多Node 脚本也类似。对于这种要长期放在团队工具链里的 CLI 工具Rust 是一个性价比不错的选择。1.3 这个工具能做到什么本文的核心目标工具可以理解为“PR 初筛助手”拉取指定仓库的 open 状态 PR 列表。统计每个 PR 的文件数、增加行数、删除行数。从标题和描述中扫描关键词给 PR 打上简单标签。支持表格和 JSON 两种输出格式方便人工查看或对接自动化流程。保留后续接入 AI 摘要、消息通知的扩展点。它不会替代代码评审只是把“人工逐个点开 PR”变成“先机器初筛、再人工判断”把从“海量 PR 里找重点”这件事自动化一部分。2. 环境准备与项目结构2.1 安装 Rust 工具链Rust 官方推荐通过rustup管理工具链。安装完成后终端里通常会有rustc、cargo、rustup三个基础命令。安装时不需要追求最新版本只要能获取当前稳定工具链即可。在终端中检查环境是否正常rustc --version cargo --version如果输出类似以下内容说明工具链可用rustc 1.80.0 (some-build-hash) cargo 1.80.0 (some-build-hash)版本号在不同时间会不一样重点不是版本高低而是cargo可用。如果你所在网络环境访问 crates.io 较慢可以给 Cargo 配置镜像源具体地址以各镜像站当前文档为准。Windows 用户如果不想安装完整的 Visual Studio Build Tools也可以尝试 GNU 工具链但需要留意部分依赖原生 C 库的 crate 在 GNU 环境下可能和 MSVC 环境有差异。本教程不绑定具体平台示例代码在上述环境都能编译。2.2 准备 Git 平台访问令牌拉取 PR 列表需要访问 Git 托管平台 API。绝大多数平台允许匿名访问公开仓库但没有认证时限流非常严格很快会返回 403。因此推荐提前准备一个具有只读权限的访问令牌。不同平台的叫法不同有的叫 Personal Access Token有的叫 Access Token。创建时尽量遵循最小权限原则只给读取仓库信息的权限不要选写权限。在本地运行时把令牌放到环境变量里避免硬编码到代码中export GIT_TOKEN你的令牌另外创建一个.env文件也可以方便本地开发但一定要把.env加入.gitignore避免误提交到仓库。2.3 项目结构设计为了让代码分层清楚我建议把项目组织成下面这样pr-review-cli/ ├── Cargo.toml ├── .env.example └── src/ ├── main.rs ├── api.rs ├── models.rs └── analyze.rs每个文件职责如下main.rs命令行入口负责解析参数、读取环境变量、调用其他模块。models.rs定义 PR 的数据结构对应远程 API 返回的 JSON。api.rs封装 HTTP 请求逻辑负责拉