这是 Zero2Agent 系列的第三课。
上一课我们实现了 grep_search,解决了「内容搜索」的问题。这一课要补齐另一个维度:文件搜索。不过 find_files 本身比较简单,所以拓展讨论下两个 AI Coding 时代的工程实践:Benchmark 驱动的技术选型,以及 Agent Debug 方法论。
这篇文章内容来自我在做的 Zero2Agent 系列(一个从 0 到 1 带你深入 Coding Agent 的教学项目)。
搜索维度的补齐
Agent 需要的搜索能力至少有两个层次:
- 内容维度:哪一行包含某个关键词?(已有
grep_search) - 文件维度:哪些文件匹配某个路径模式?(缺失)
用户问「帮我找一下项目里所有的测试文件」时,他关心的是文件名匹配 *.test.ts,而不是文件内容里出现了什么字符串。这个维度的缺失,会让 Agent 在回答文件定位类问题时束手无策。
于是 find_files 成了本课必须补齐的工具。在完成了上一课的 grep_search 后,这个工具的实现并不困难,可以复用 rg。但我们可以借着本节课程,一起看看关于技术选型和 Agent Debug 的实践技巧。
让 AI 帮我们做性能 Benckmark
同样是文件搜索,主流 Agent 工具的选择各不相同:
- OpenCode/Codex 用
rg - Pi 用
fd - Gemini CLI 用
npm glob - Node 22 新增了
fs.glob
谁更好?靠拍脑袋很难有说服力。在 AI Coding 时代,技术选型的工作流正在发生变化。
以前做 Benchmark 是个重活:设计方案、写脚本、跑数据、解读结论,往往需要大半天。现在可以和 AI Agent 协同完成——重点是和它讨论清楚测试方案,剩下的执行工作可以大幅加速。
整个过程一般分为「1/设计方案」->「2/实现脚本」->「3/运行收集」->「4/解读结论」。AI 基本可以接管2和3,1和4也可以大大辅助提效。整个 benchmark 的设计和实现,都是和 AI Agent 协同完成的。重点是和它讨论清楚测试方案,这样可以让它自主进行 benchmark。30 分钟讨论,能省下未来几个小时的弯路。
在设计 Benchmark 方案时候,需要注意公平性。测试条件一旦不一致,数据就很难置信。CLI 工具直接调用;Node API 用最小化的脚本包一层;所有工具统一 --no-ignore --hidden,遍历同一棵文件树。胶水代码越少,越接近真实的表现。对于语料选择,选择了 小/中/大三个量级的文件集。分别使用了本项目、Vite、Next.js 从小到大三个项目。clone + install 后锁定 commit,避免隔几天再跑面对不同的文件树。
rg 和 fd 性能接近,但 rg 已在 S002 接入,继续用它零增量成本。综合考虑 rg 目前是我们稳妥的选择。
此外,AI 在做 Benchmark 过程中还发现了一些细节:比如 fs.glob 的 globstar 行为异常、npm glob 在错误场景的一些表现。Benchmark 本身,也是在做一场适应性接入的 Demo 测试。
如何用 Agent 进行 Debug
基于日常的实践,我把 Agent 的调试能力抽象成五个层级:
L1:纯静态分析:Agent 通过看代码、看报错,在「脑内」Debug。门槛最低,天花板也最低。
L2:预埋日志:在开发阶段就在关键链路写日志,运行时出问题让 Agent Grep 日志分析。需要前期规划,但收益稳定。
L3:动态日志:出现问题后,让 Agent 分析代码、生成假设,然后在关键路径插入日志埋点。复现后读取日志验证假设,基于确认的假设进行修复。这是当前实践的「性价比」选择——不需要前期规划,又能获得运行时信息。
L4:CDP 简单调试:打断点、暂停、读变量、拉调用栈,像人一样进行简单的 Debugger 操作。具备实时性,但需要本地环境。
L5:CDP 高级能力:条件断点、Heap 分析、性能 Profile,理论上可以达到高级工程师的调试水平。
1/2层几乎每个项目都可以做,养成让 Agent 加日志、出问题让 Agent 看日志的习惯,对于调用链路较长的问题,Debug 效果有明显提升。假设验证 + 动态日志,是非常有效的 Agent Debug 方案,工作原理如下:
我自己用 Agent 修 bug 时,遇到困难问题,会让 Agent「先看日志、再修代码」。除了确实能修一些疑难杂症外,这种方式修的问题一般会更精准。相信大家都遇到过 Agent 用临时方案修,把代码搞得很难维护。分层上,我的习惯是先看预埋日志能不能兜住;兜不住再通过动态埋点,然后复现去修。一般动态埋点的实现流程如下:
那种本地特别特别妖的,也可以考虑开 CDP,不过一般动态日志成功率就很高了。把这些方法练熟,自己用 Agent 写代码会省很多时间。未来 Agent 自己的调试能力也会越来越重要。毕竟都接不住 bug 的 Agent,实在是“管杀不管埋”。
这篇文章来自我在做的 Zero2Agent 系列。一门带你零基础搞定 AI Agent 技术细节的实践课程。
目前市面上的学习资源大致分两类:
一类是入门课程——讲概念、跑 demo、搭个最简原型。能帮你建立初步认知,但很难回答"真实产品里为什么这样设计"。
另一类是开源代码——你可以从 Claude Code、Codex CLI、Gemini CLI 等项目学习。但直接读源码的问题是:你能看到"怎么做",却很难看到"为什么这样做"。
这些学完很可能连面试都不够。Zero2Agent 想填的是中间这层:从零开始,边构建边拆解一个产品级 Coding Agent 的设计决策。 即使你之前不了解这个领域,跟着这条线也能看到整件事的全貌和演进脉络。
👉 github.com/alienzhou/z… 还在持续更新中,如果感兴趣可以去看看。