从零开始,学习实现产品级 Agent Harness 系列(3)

这是 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... 还在持续更新中,如果感兴趣可以去看看。

相关推荐
有点小帅得平哥哥2 小时前
WINDOWS11快速WSL2环境本使用本地模型启用claude code
ai编程
冬奇Lab3 小时前
Claude Code 实战经验分享(上篇):从启动到并发协同
人工智能·ai编程·claude
花椒技术5 小时前
一个歌词逐字补帧需求,让我们看清 AI 协同开发到底能不能落地
openai·ai编程·cursor
bug制造者阿杜7 小时前
Claude Code 安装配置使用指南
claude
Bug终结者_7 小时前
别只会写 Java 了!LangChain4J 带你弯道超车 AI 赛道
后端·langchain·ai编程
爱吃的小肥羊7 小时前
Codex 今天开始重大更新,全面解读,确实有点东西!
aigc·openai
bug制造者阿杜7 小时前
OpenCode 安装使用指南
ai编程
幺风7 小时前
Claude Code 源码分析 — 核心对话循环
typescript·ai编程
小虎AI生活7 小时前
刘润说软件要变成「廉价耗材」,普通人该怎么接住 AI 编程红利
ai编程