快速理解上下文
看一个新版Agent做真实任务,你会发现它每次都做同样的事情。请阅读package.json。请阅读tsconfig.json。阅读入门点。src/里每个文件都要仔细看。二十步之后,它才开始思考实际的工作。
这就是“先读完再行动”的策略。感觉很全面。它污染了背景,消耗了预算,还没让Agent做任何有用的事情就被忽视了。
解决办法很简单:先搜索,后阅读,第三行动。整个变化都存在于系统提示词中,Agent从中养成了习惯。
学习成果
系统提示词的机构部分引导该Agent在未命名相关文件时read``grep。多文件任务只需几步就能解决,而不是几十步。
快速路径
- 在机构部分加两行:先搜索再阅读,“以防万一”不要先看文件
- 用真实任务验证:Agent应该
grep模式,然后只read匹配的 - 确认直接提交的问题仍然直接问
read
动手练习 9.2
引导Agent在提示词中以grep为先探索。
要求:
buildSystemPrompt更新# Agency部分,新增两个项目符号:- 阅读前先搜索。先用
grep,然后只read你要改的部分 - 不要“以防万一”去看文件。你需要什么就读什么
- 阅读前先搜索。先用
- 运行一个任务,提示词中没有提及相关文件。先确认Agent使用
grep - 运行一个命名特定文件的任务。确认Agent直接通向
read
实现提示:
- 变化在于
src/system.ts,而非任何工具。工具没有改变 - Agent区是行动策略的所在。这就是行动策略
- 不要把这个加到
grep工具描述里。它应该属于Agent的策略层面,而不是工具本身
提示词的增建
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场比赛上限在这里确实起到了作用。模型在看到上限生效时写出更窄的模式的习惯也同样重要。
动手试试
运行一个多文件任务,没有特定文件命名:
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找到的文件上。
运行一个命名特定文件的任务:
bun run index.ts . "What's in src/sandbox-local.ts?"Agent应该直接送给read。不需要多说grep。该模式会根据文件是否已知而调整。
npx tsc --noEmit提交
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之间的界限在哪里?