# Google工程师用AI审查Linux内核代码,53%的Bug人眼没看出来 上周刷Hacker News的时候,一个项目直接把我看愣了——Google的Linux内核工程师Roman Gushchin搞了个叫Sashiko的工具,专门用AI给Linux内核做code review。 53.6%的bug检出率。 这个数字乍一看好像也就那样?但你想想,这1000个测试样本全是从上游最近的提交里拿的,每个都带了`Fixes:`标签,说明它们**已经通过了人类reviewer的审查,合进去了,然后被后来的修复补丁打回原形**。换句话说,这1000个bug人眼全漏了,Sashiko捞回来一半多。 而且这工具已经在Google内部跑了一段时间了,据说发现了一堆真实问题。 ## Sashiko是干嘛的? 先说名字——Sashiko(刺し子),日本传统刺绣工艺,专门用来缝补磨损的地方。拿这个做工具名挺绝的:代码有洞,AI来缝。 它做的事情不复杂:**吃进内核patch,吐出review意见**。 ``` patch(邮件列表/git仓库)→ Sashiko → LLM分析 → bug报告 ``` 跟那些"AI帮你写代码"的工具完全反着来——它不写代码,只审代码。这在开源圈争议小很多,毕竟没人喜欢被AI写的垃圾patch轰炸(Godot维护者前段时间就被AI生成的bug report搞得生无可恋了)。 ## 装一下试试 我花了一个下午把它跑起来了,中间踩了几个坑,写出来给大家省点时间。 ### 前置条件 你需要三样东西: 1. **Rust工具链**(Sashiko用Rust写的) 2. **一个LLM的API Key**(官方测试最多的是Gemini 3.1 Pro,但也支持Claude和Bedrock) 3. **足够大的磁盘空间**(它会拉Linux内核源码做submodule) ```bash # 装Rust(如果没有的话) curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh source $HOME/.cargo/env # 克隆仓库——注意必须加 --recursive git clone --recursive https://github.com/sashiko-dev/sashiko.git cd sashiko ``` 第一个坑来了。 ### 坑1:忘了加 --recursive 这个项目把Linux内核源码作为git submodule嵌进去了。如果你克隆的时候没加`--recursive`,编译直接报错,说找不到`linux/`目录。 ```bash # 如果已经clone了但忘了recursive,补救方法: git submodule update --init --recursive ``` 但这个命令会拉整个Linux内核仓库,体积非常大。我这边网络一般,下了快二十分钟。 ### 配置 ```bash # 复制配置模板 cp Settings.toml.example Settings.toml ``` 编辑`Settings.toml`,最关键的是两块: ```toml [ai] provider = "gemini" # 或 "claude"、"bedrock" model = "gemini-3.1-pro" [git] repository_path = "/path/to/sashiko/linux" # 指向submodule里的内核源码 ``` 然后设置环境变量: ```bash export LLM_API_KEY="your-api-key-here" ``` ### 坑2:LLM_API_KEY到底填什么 这里有点绕。文档里说"Set LLM_API_KEY environment variable",但如果你用Claude作为provider,它实际上需要的是Anthropic的API key;用Gemini就填Google AI的key;用Bedrock需要AWS凭证。 Settings.toml里也可以通过环境变量来配,格式是`SASHIKO_`前缀加双下划线嵌套: ```bash # 等价于在Settings.toml里写 ai.provider = "claude" export SASHIKO_AI__PROVIDER="claude" ``` 我当时用Gemini试的,直接: ```bash export LLM_API_KEY="AIzaSy..." ``` ### 编译和启动 ```bash cargo build --release ``` 编译Rust项目嘛,第一次会慢一点,我这边大概两三分钟。 启动daemon: ```bash cargo run --release ``` 正常的话你会看到它打印出一个本地URL(Web UI地址),然后就开始监听内核邮件列表了。 ### 用CLI提交本地patch做review 这是我觉得最实用的功能——拿自己项目(不一定是内核)的patch去审: ```bash # 审查最近3个commit cargo run --release --bin sashiko-cli -- submit HEAD~3..HEAD # 审查单个文件 cargo run --release --bin sashiko-cli -- submit path/to/patch.diff # 查看状态 cargo run --release --bin sashiko-cli -- status # 查看review结果 cargo run --release --bin sashiko-cli -- show latest ``` 我拿我们组最近的一个PR试了一下,它确实找出了两个我review的时候没注意到的问题——一个是潜在的空指针解引用,另一个是锁的获取顺序不一致。虽然不一定是真bug(它自己说"概率性的,可能报也可能不报"),但提示得挺到位的。 ## 它是怎么工作的? Sashiko的核心设计挺有意思。它不是简单地"把代码丢给LLM问有没有bug"——那样效果很差。 它用了一套**多阶段review协议**,模拟专业reviewer的思维方式: 1. 先理解patch改了什么(上下文分析) 2. 检查逻辑正确性(语义审查) 3. 看有没有并发/锁/内存安全问题(专项检查) 4. 最后综合判断,输出review意见 而且它针对不同内核子系统(mm、net、fs等)有专门的prompt模板,这些模板最早是Chris Mason写的。这就好比你的reviewer不是泛泛的"会写代码的人",而是懂内存管理的内存管理专家,懂网络的网络专家。 ## 说说数据隐私 官方文档很坦诚地写了:**Sashiko会把patch数据和可能的git历史发给配置的LLM provider**。 这意味着: - 用Gemini → 代码发给Google - 用Claude → 代码发给Anthropic - 用Bedrock → 代码发给AWS 如果你review的是开源项目代码,无所谓。但如果你拿它审公司内部代码,这个得注意合规。 ## 跑benchmark Sashiko自带benchmark工具,可以验证它的检出率: ```bash # 先备份现有数据库 mv sashiko.db sashiko.db.bak # 跑benchmark cargo run --release --bin benchmark -- benchmark_small.json ``` 结果会输出到`benchmark_results.json`。官方报告用Gemini 3.1 Pro能到53.6%的检出率,误报率在20%以内(大部分落在"灰色地带")。 我自己没跑完完整的benchmark(API费用不便宜……),但小样本测试确实能感受到它的分析质量。 ## 常见问题FAQ **Q: 不搞Linux内核开发,这个工具对我有用吗?** 老实说,目前它的prompt模板全部针对内核代码设计。如果你想拿它审Web应用的代码,效果会很一般。但它的架构设计是通用的,如果社区后续开发了其他语言的review模板,那就另说了。 **Q: API费用大概多少?** 取决于你选的provider和review频率。Gemini相对便宜一些,Claude贵一些。Benchmark跑完整的一轮,官方测试数据没有公开具体费用,但从它"can be computationally expensive"的措辞来看,不会太便宜。日常少量review应该还好。 **Q: 能接GitHub PR吗?** 目前不能直接接。它主要从`lore.kernel.org`邮件列表拉patch,或者审本地git仓库的提交。如果你想在CI里用,需要自己写个wrapper脚本,把PR diff导出来喂给Sashiko CLI。 **Q: 为什么不用现成的AI编程工具(比如Cursor、Claude Code)做review?** 好问题。区别在于prompt的专业深度——Sashiko针对内核子系统做了高度定制化的review prompt,这是通用AI编程工具做不到的。你可以理解为"内核专家review"和"全栈工程师review"的差别。内核代码有大量特殊的约定(比如RCU锁、内存屏障、slab分配器),通用工具不太懂这些。 ## 我的看法 说实话,53.6%这个数字本身不是重点。重点是——这1000个bug全部通过了人类reviewer的审查。Linux内核的review流程已经算开源项目里最严格的了,尚且有这么多漏网之鱼。 AI做code review这事,在"AI写代码被开源社区抵制"的大背景下,反而是一条阻力最小的路。没人反对多一双眼睛帮看代码。Sashiko给了一个很好的示范:**别让AI写代码,让AI审代码**。 思路很清晰,执行也到位。Rust写的,性能不用担心;支持多LLM后端,不绑死一家;开源,Apache 2.0协议,Linux Foundation持有。 如果你对内核开发感兴趣,或者想研究AI code review的工程实践,这个项目值得好好看看。 --- 项目地址:https://github.com/sashiko-dev/sashiko 如果觉得有帮助,欢迎点赞收藏 ❤️ 更多AI工具实战教程,关注我第一时间获取~
Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐