跳到正文

快速理解上下文

看一个新版Agent做真实任务,你会发现它每次都做同样的事情。请阅读package.json。请阅读tsconfig.json。阅读入门点。src/里每个文件都要仔细看。二十步之后,它才开始思考实际的工作。

这就是“先读完再行动”的策略。感觉很全面。它污染了背景,消耗了预算,还没让Agent做任何有用的事情就被忽视了。

解决办法很简单:先搜索,后阅读,第三行动。整个变化都存在于系统提示词中,Agent从中养成了习惯。

学习成果

系统提示词的机构部分引导该Agent在未命名相关文件时read``grep。多文件任务只需几步就能解决,而不是几十步。

快速路径

  1. 在机构部分加两行:先搜索再阅读,“以防万一”不要先看文件
  2. 用真实任务验证:Agent应该grep模式,然后只read匹配的
  3. 确认直接提交的问题仍然直接问read

动手练习 9.2

引导Agent在提示词中以grep为先探索。

要求:

  1. buildSystemPrompt更新# Agency部分,新增两个项目符号:
    • 阅读前先搜索。先用grep,然后只read你要改的部分
    • 不要“以防万一”去看文件。你需要什么就读什么
  2. 运行一个任务,提示词中没有提及相关文件。先确认Agent使用grep
  3. 运行一个命名特定文件的任务。确认Agent直接通向read

实现提示:

  • 变化在于src/system.ts,而非任何工具。工具没有改变
  • Agent区是行动策略的所在。这就是行动策略
  • 不要把这个加到grep工具描述里。它应该属于Agent的策略层面,而不是工具本身

提示词的增建

ts
sections.push(`
# Agency
- USE your tools. Read files, search code, run commands, then answer.
- Do NOT explain what you WOULD do. Actually do it.
- Available tools: ${ctx.toolNames.join(", ")}
- Search before reading. Use grep first, then read only what you'll change.
- Don't read files "just in case." Read what you need when you need it.`);

两颗子弹。这就是策略的全部变化。

实际模式

关于“在授权路由中添加速率限制”的简单(缓慢)流程:

read package.json
read tsconfig.json
read src/index.ts
read src/routes/index.ts
read src/routes/auth.ts
read src/routes/users.ts
read src/middleware/index.ts
... 20 more files
start implementing

同一提示词上的grep优先(快速)流:

grep pattern: "router\.post.*auth|router\.get.*auth"
  -> matches src/routes/auth.ts
read src/routes/auth.ts
grep pattern: "rateLimit|rate-limit|middleware"
  -> matches src/middleware/rate-limit.ts
read src/middleware/rate-limit.ts
start implementing

五步而不是三十步。Agent现在拥有了行动所需的恰当背景,几乎没有其他东西。

并行阅读,适用时

一旦grep缩小了文件列表,读段就可以向外扩展。当工具调用不相互依赖时,AI SDK并行运行:

Step 1: grep for the pattern (1 call)
Step 2: read auth.ts AND read rate-limit.ts (2 parallel calls)
Step 3: start implementing

别强求。如果Agent能单独并行读取文件,那就太好了。如果没有,那先搜索的习惯本身就是胜利。

**注意:快速模式需要grep才能锋利**

这个策略的效果取决于grep工具的效果。如果grep因为模式模糊而返回数百个匹配,Agent最终还是会读取一半的代码库。第五模块的50场比赛上限在这里确实起到了作用。模型在看到上限生效时写出更窄的模式的习惯也同样重要。

动手试试

运行一个多文件任务,没有特定文件命名:

bash
bun run index.ts . "Find every place this project parses JSON and tell me which ones might fail on malformed input"

你应该在任何read之前看到grep 调用,reads应该会出现在grep找到的文件上。

运行一个命名特定文件的任务:

bash
bun run index.ts . "What's in src/sandbox-local.ts?"

Agent应该直接送给read。不需要多说grep。该模式会根据文件是否已知而调整。

bash
npx tsc --noEmit

提交

bash
git add src/system.ts
git commit -m "feat(prompt): steer agent toward grep-first exploration"

完成标准

  • [ ] Agent区新增两颗子弹
  • [ ] 多文件任务在read之前使用grep
  • [ ] 特定文件任务跳过grep直接进入read
  • [ ] 探索任务的总步数明显下降
  • [ ] npx tsc --noEmit

**注意:当grep不够时**

有些模式很难被grep。架构问题(“如何在应用中处理认证”)并不映射到单一的正则表达式。画一个survey工具,能接收一个高级问题并返回文件列表,并为每个问题设定一个一行角色。这应该是第6模块的那种探索器子 Agent,但提示词更紧凑吗?或者换个新工具?工具和子 Agent之间的界限在哪里?

非官方简体中文翻译 · 原课程来自 Vercel Academy