👨 作者简介:大家好,我是唐璜Taro,全栈 领域创作者
✒️ 个人主页 :唐璜Taro
🚀 支持我:点赞👍+📝 评论 + ⭐️收藏
同一个问题,三种回答
上一篇讲了公式:Agent = Model + Harness。这一篇只做一件事------用同一个问题,看壳加上去之后,回答怎么变。
问题固定为:
看看 workspace 里有什么,并总结 README。
目录里真实只有两份文件:README.md 和 notes.txt。README 开头写着 "Workspace Sample"。
第一种:只有模型
脚本只发一轮聊天,不给任何工具。系统提示甚至写明:你看不到本地文件。
这时模型往往会「自信地」列出一串文件名。那些名字和真实目录对不上。它不是在撒谎,它是在用语言能力补全一个它根本没有观测到的世界。
这就是基线。后面每加一层壳,都要能打赢这个基线,否则壳是装饰。
第二种:模型 + 一次工具往返
给它三个工具:列目录、读文件、写文件。流程只有两拍:
用户问题
→ 模型决定调用 list_dir / read_file
→ 程序在本地执行,把结果以 role=tool 塞回去
→ 模型根据真实结果作答
终端里应该能看到类似:
tool_call: list_dir
file README.md
file notes.txt
tool_call: read_file README.md
# Workspace Sample
...
最终总结会提到 Workspace Sample,而不是凭空文件名。
这里有一个容易忽略的工程细节:工具失败要变成一段文字还给模型 ,不要让异常把整个循环打死。模型下一轮需要读到 error: path not found,而不是进程已经退出。
工具说明书(schema)也要写给人看、更要写给模型看:路径是相对目录,不要传绝对路径。description 写清楚,比事后在提示词里吼「不许乱调」更有效。
第三种:规则 + 多步循环
一次往返够用来讲清消息形状,不够用来干活。真实任务常常是:先列目录,再读两份文件,再写一份摘要。
多步循环长这样:
while 步数 < 上限:
问模型
如果没有工具调用 → 这就是最终回答,结束
否则执行工具,把结果追加进上下文,继续
规则不再写死在代码字符串里,而是放进按文件名排序的 Markdown:身份、安全、何时用哪个工具、输出格式。启动时合并成系统提示。关掉规则开关,就退回一句最短提示------方便做对照,而不是改代码。
对照时看什么
| 版本 | 你应该在终端里看到 |
|---|---|
| 只有模型 | 文件名对不上真目录 |
| 一次工具往返 | tool_call 和真实文件内容 |
| 多步 + 规则 | 多步工具后给出总结;越权请求被拒绝或工具报错 |
三档用的可以是同一个模型。差别不在「更聪明」,在于有没有手、有没有循环、有没有规矩。
下一篇
下一篇把「规矩」和「循环」拆开讲:为什么系统提示要拆成规则文件,以及步数上限为什么是第一道保险丝。