← 返回资讯
林远舟
技术编辑
已审核

基于大模型 + 知识库的 Code Review 实践

那天我正盯着两段代码发愁——A写法三行搞定但读起来像天书,B写法啰里八嗦但一眼就懂人话。顺手把两段都丢给Claude,随口问了一句:“哪个更好?”

基于大模型 + 知识库的 Code Review 实践

基于大模型 + 知识库的 Code Review 实践


听我说完这个故事。

那天我正盯着两段代码发愁——A写法三行搞定但读起来像天书,B写法啰里八嗦但一眼就懂人话。顺手把两段都丢给Claude,随口问了一句:“哪个更好?”

你猜怎么着?它不光分析了我脑袋里纠结的点,还揪出一个我完全没看到的边界情况。那一瞬间我冒出一个念头:这家伙,也许能帮我扛活儿?

下班路上越想越兴奋,到家就打开电脑开始干了。

你绝对想不到,第一个坑差点把我劝退

公司代码直接扔给ChatGPT?你当我是三星啊?他们引入ChatGPT后,不到20天就出了好几起机密泄露的情况。这种锅,谁背得起?

要想安全就得先脱敏——把具体业务逻辑抽象成天书一样的描述。我试了一次,写描述花了我半个多小时,回头一看:还不如我自己Review来得快。

但真正让我铁了心要搞点事的,是另一幕。

我们团队每天要审10到20个MR。单元测试和Lint已经干掉了明显低级的错(缩进不对、变量没用到),但剩下的那些——代码写得合不合理、业务逻辑对不对、这个MR动到的东西会不会牵连其他地方——全都得人肉扛。忙起来你懂的,眼睛扫一眼就点了Approve,上线出事了才拍大腿。

更气的是,团队不是没写规范。飞书文档几十页,写得清清楚楚。可谁审的时候真去翻那玩意儿?今天张三review说这么写,明天李四review说那么写,全凭心情和习惯。

说白了,得有人兜底,而且是每次都能按规矩兜底的家伙。

头版代码?别想太多,跑起来再说

我没一上来就申请GPU搞私有化大模型。一来流程太长,二来鬼知道这玩意儿值不值得。所以先走API试水——DeepSeek,便宜到你不敢相信。我往里充了十块钱,用到现在两个多月还没花完。

写了个脚本,20行不到,大概是这样的:

PYTHON
import openai

openai.api_key = "你的key"
openai.api_base = "https://api.deepseek.com"

code_diff = "从这里读取 MR 的 diff"

review_prompt = f"请 review 以下代码变更,重点关注逻辑缺陷、安全风险和性能问题:{code_diff}"

response = openai.ChatCompletion.create(
 model="deepseek-chat",
 messages=[{"role": "user", "content": review_prompt}]
)

print(response.choices[0].message.content)

好了!我的第一个AI Reviewer诞生了!——然后它傻得出奇。

它揪出来的全是缩进、空格、换行这种鸡毛蒜皮,真正的逻辑漏洞?一个没找到。AI跟人一样:你不告诉它重点看什么,它就会瞎看。所以我加了个规则文件 .ai-review.json

JSON
{
 "priority": ["null_pointer", "sql_injection", "transaction", "sensitive_data"],
 "ignore": ["format", "naming_convention"]
}

静态格式问题?那是ESLint/Pylint的事。AI只管动态逻辑和安全。这下输出才算勉强能看。

真正的核心:知识库,才不是模型

API调用模式跑了一段时间,两个问题始终缠着我不放:

这时候我才想到:知识库。

把飞书的规范文档抽出来,用embedding模型转成向量扔进数据库。每次review,先搜出跟当前改动相关的规范片段,和diff一起塞给大模型。

我用的是LangChain那一套。embedding模型选了BGE-small-zh(中文好还快),向量数据库用了Milvus的轻量版。流程简简单单:

1. MR触发 → 拉diff

2. 从知识库里找出跟这些代码相关的文档片段(比如“用户信息接口必须加权限校验”)

3. 把搜索结果 + diff + review指令丢给大模型

4. 拿回评论,通过GitLab API写到对应代码行

这一步太关键了。没有知识库,AI只能泛泛而谈;有了知识库,它才清楚你们团队踩过哪些坑

效果你看:之前AI给一条建议叫“建议使用分布式锁”,加了知识库之后变成——“建议使用公司封装的 RedisLock 工具类,详见内网文档链接”。团队自定义的那套东西,终于活过来了。

让AI当“第一道防线”,别直接放行

集成到CI是必须的。我在 .gitlab-ci.yml 里加了几行配置:

YAML
code_review:
 stage: test
 script:
 - python ai_review.py --mr-id $CI_MERGE_REQUEST_IID
 only:
 - merge_requests

简单是简单,但有个天大的坑:千万别让AI自动放行

我见过有人把AI review结果设成门禁——必须通过才能合并。结果AI误报一堆,开发们一个个炸毛,天天在群里骂。

所以我的做法是:AI给出建议并标记风险等级。LOW的自动忽略,MEDIUM的提醒人工确认,HIGH的必须有人手动确认才能合并。

还有个细节:规则扫描不能丢

空指针、SQL注入、敏感字段暴露、事务边界缺失——这些问题确定性极强,就应该用静态规则引擎兜底。我做了两层:

两者一配合,完美。千万千万别把规则交给AI,又贵又慢还不一定准

事实不会骗人:实测数据出来了

我们拿一个真实的Java 8老系统测了一轮。对比50个PR:

翻了一倍多!

不过放心,没有天上掉馅饼的事。AI的误报率大概30%。误报主要出现在:

这时候知识库又派上大用场了——我们把历史误报案例也塞进去,当作反例。后续AI看到类似的场景就会想:“哦,上次这个被骂了,这次别傻了。”

从单Agent到编排器,就像从一个人干到拉一支队伍

最开始一个Prompt走天下,所有维度都在一个Agent里。用着用着就发现问题大了:

后来咬咬牙,拆了!变成“编排器 + 多个专项Agent”:

CODE
编排器(调度+合并+过滤)
 ├── 安全 Agent
 ├── 性能 Agent
 ├── 逻辑 Agent
 ├── 可维护性 Agent
 ├── 业务规范 Agent(依赖知识库)
 └── 架构一致性 Agent

编排器自己不干活,只管派活儿、收成果、去重。每个Agent的Prompt独立维护,同时跑完再合并。延迟从串行的O(6t)降到了接近O(t)——现在实测平均22秒搞定六个维度的审查。

而且,不同的Agent还能用不同模型! 安全那个可以用更谨慎的模型(比如qwen),逻辑那个用便宜又快的(deepseek-chat),灵活得很。

踩过的坑,我说几个让你也能避开

第一,别只扫新增行。

不少AI review工具只看diff里“+”开头的代码。但你想,如果你删掉了一个null判断,只看“+”根本发现不了。我后来改了全量diff(连带上下文一起扔给AI),并在提示里说清楚——“请同时关注新增行和删除行之间的语义变化”。

第二,review结果必须结构清晰。

最开始我直接把一大段文字贴在GitLab上,乱成一锅粥。后来统一成结构化输出:文件、行号、风险等级、风险类型、原因、建议。这样才好自动贴评论,也好后续统计——哪个模块问题多、哪类风险最常出现,一目了然。

第三,绝别让AI自动改代码。

有人出馊主意:“AI发现bug直接提交修复patch。” 你疯了吗?AI改的代码你敢不review就直接上线?review结论永远只是建议,执行的必须是。它给建议,你确认后自己改。可以帮你提patch,但必须人工审核。

第四,集成到CI,但别用它阻塞CI跑。

之前我把AI review放在test阶段,一旦有风险就让流水线变红。后来改成review阶段,只输出结果,不改变CI状态。合并前人工看看HIGH风险项,手动确认一下就行。

效果到底怎么样?说几句实在的

用了段时间,三个变化肉眼可见:

当然也有翻车的时候。有次AI把正常的业务判断标成“空指针风险”,开发兄弟气得不行,直接给我提了个issue。我查了查,发现是因为那个接口的入参在代码上层的过滤器里已经判空了,但AI看不到全貌。解决办法:把这类误报也塞进知识库当反例,后面再遇到类似场景它就不会再犯了

未来:模型再牛,知识库才是护城河

这事儿还早着呢。

几个明显的方向:

模型能力还会涨,但知识库才是自己的。 大模型越来越聪明,可团队自己的业务规范、踩坑历史、技术栈限制,大模型不知道也不应该知道。谁的知识库更全、更新更快,谁的AI review就更落地、更靠谱。

微调还是Prompt工程?我现在选后者。 Code review场景变得太快,微调一次成本高、周期长,还不如Prompt加知识库来得灵活。将来如果能搞个轻量持续微调方案,比如每周拿最近的误报数据微调一次,可能会更好。

Code Review不会消失,但人的角色会变。 将来你很可能不再逐行检查代码有没有错,而是看AI的建议有没有遗漏,重点放在架构和业务决策上。Reviewer更像是“审核AI审核结果”的人。

多模态还没到上场的时候。 现在的AI review只能分析代码文本。架构图、时序图、数据库设计文档还得人来读。等哪天模型能直接看懂那些图,那才叫真起飞。

最后说句真话:别想一步登天。

第一次跑通,就算只是把一段diff扔给AI让它回一句话,也比什么都不做强。然后加规则、加知识库、调Prompt、接IM通知……一步步迭代。

我踩过的坑你十有八九也会踩。但照着上面我说的那些,至少能省你两三次从头再来的时间。

——对了,记住一句话:

最怕的不是开始得太糙,而是你一直不敢开始。

453
9065 阅读
3 评论
分享
链接已复制
编辑说明

本文由 MakeSense 编辑团队撰写并审核。文中引用的数据和观点均经过交叉验证,如有疏漏欢迎在评论区指正。最后更新:2026年06月21日 14:42

林远舟

技术编辑

全栈工程师出身,做过 5 年技术社区运营。对 AI 编程工具、开发者生态有深入研究,喜欢用实测数据说话。

读者评论 3

M
创业者Mark 2周前
正在做相关方向,这篇文章给了我不少启发。
回复 点赞 (7)
老李 3天前
有个小问题想请教,文中提到的那个方案在大规模场景下性能怎么样?
回复 点赞 (5)
运营小陈 6天前
转发到团队群了,大家都觉得有参考价值。
回复 点赞 (4)