为什么要写这篇文章

HN Build in Public AI 2026-10-13T23:52:07.849958

大语言模型(LLM)改变了很多软件的编写方式,ZAP 也不例外。

ZAP 核心团队的很多人现在每天都在用 LLM 助手,我们也越来越多地看到社区贡献中出现了它们的身影。

这本身没什么问题,但意味着我们得把 ZAP 开发方式的调整讲清楚,让大家知道该抱什么预期。

ZAPbot 和它的笔记本电脑

有些项目正在关上大门

你可能看到过报道:一些知名开源项目开始限制甚至禁止新贡献者提交代码。主要原因是维护者被 AI 生成的 pull request 淹没了——审核这些改动的精力,往往比当初亲手写一遍还多。

我们不想这么做。

ZAP 一直是一个社区项目,以后也会一直是。任何人都可以贡献——不管这是你人生中第一个 pull request,还是第 500 个;不管每一行代码都是手写的,还是在 LLM 的帮助下完成的。我们不会因为你是谁、经验多少、用了什么工具,就给贡献设门槛。

但平衡已经变了

真正改变的是精力天平的两端。

现在任何人写代码都容易了很多,但审核代码一点都没变容易。审核才是当前真正的成本所在:先要弄明白一个改动想干什么,再判断它到底做到没有,然后确认它和代码库其余部分是否合得来,最后还得有把握没有哪里藏着不易察觉的问题。

这种判断,审核者没法外包给别人。如果收到一个让人看不懂的 pull request,里面有提交者自己都讲不清的代码,又或者压根没有测试,那审起来很可能比从头写一遍还费时间——而大家的审核时间就那么多。

说清楚一点:这条规则对所有人都适用,包括 ZAP 核心团队。我们要求别人做到的,自己也一样做到。我们当中已经有好几个人(包括我)的 PR 被打回——或者提交前自己重做——原因就是改动太大、测试太少,或者太难读懂。

PR 提交者要对自己的代码负责

最重要的一条规则是:pull request 的提交者要对自己提出的代码负责。

也就是说,你必须做到:

用 LLM 帮忙完全没问题,但躲在它后面不行。PR 上写谁的名字,谁就是负责人。

让 PR 尽量容易审

PR 越好审,我们处理得越快。这不是什么奖励,只是算术——评审时间是稀缺资源,每个改动少花一点,就能多看几个。具体来说:

一份简短清晰的 PR 描述同样有帮助:问题是什么、你的思路是什么、你是怎么测的,以及哪些地方你知道还不完整,或者有意留在本次范围之外。

在人工审查之前,LLM 会先看你的 PR

先把我们流程中的一步说清楚:任何稍微像样的改动,我们做的第一件事都是把它交给 LLM 审查。

这不会取代人工审查——审查者仍然要理解这个改动,判断它该不该合进来,并确认它是对的。LLM 这一轮的作用是尽早发现明显问题:漏掉的边界情况、马虎的错误处理、根本没测到东西的测试。这样等真人来看 PR 时,精力就能花在真正需要判断的地方。

由此引出一个建议,我们鼓励所有贡献者都这么做:提交之前,再找一个 LLM 来审查你的改动——注意别用写代码时用的那个。一个全新的模型第一次看到你的代码,往往能发现当初帮你写代码的那个模型漏掉的东西,就像换一双人的眼睛来看一样。如果第二位审查者发现了问题,在开 PR 之前先修掉——先修掉,就能少几轮「请把这个基础问题改一下」的评论。

让集成测试更容易写

为了让上面说的端到端测试更好写,我们正在做的一件事是改造集成测试的构建方式。

我们本来每晚都会跑一批 Integration Tests。其中很多依赖 Dev add-on,它会在 ZAP 内部启动一个简单的测试用 Web 服务,带一个非常基础的模板引擎,我们可以按需扩展出任何功能。因为该 add-on 跑在 ZAP 里面,不需要额外安装软件,我们也能伪造任何需要的接口——这在测试单点登录(Single Sign On)这类功能时非常有用。

到目前为止,这些测试页面都是手写的。但事实证明,LLM 非常擅长生成这类简单的测试页面——这正是 LLM 辅助能发挥价值的场景。

我们正在重构测试服务,让它更可插拔:预计测试用例的数量会快速增长,而测试页面更适合归属到实现对应功能的插件里。改好之后,如果你给某个插件加功能,就能把测试页面和代码放在一起,这样在 PR 里附上端到端测试也会简单很多。

这对未来意味着什么

ZAP 的运作方式没有变——我们仍然是社区项目,仍然欢迎大家的贡献,包括第一次参与的人。变化的是精力投入的方向。写代码的时间少了,理解、测试和审查代码的时间多了。

查看原文