Agents 原理 ¶
ToolUse 工具使用 ¶
工具结果就是 LLM 的下一轮输入
关键点:工具执行的返回值,会作为下一轮对话的 message 传回给 LLM。
举个具体例子,假设 LLM 想读一个 15000 行的文件:
第 1 轮:LLM 发起 tool_use
{
"type": "tool_use",
"name": "read",
"input": { "path": "src/big-file.ts" }
}
工具执行
read 工具开始读文件,发现有 15000 行,超过 2000 行限制。它不会报错,而是:
正常返回前 2000 行的内容
在内容末尾拼上一段提示文字
返回给 LLM 的 tool_result
(前 2000 行的实际文件内容…)
[Showing lines 1-2000 of 15000. Use offset=2001 to continue.]
这整段东西作为 tool_result 消息传回 LLM。LLM 看到最后那句提示,就自己决定要不要继续读。
第 2 轮(如果 LLM 决定继续)
{
"type": "tool_use",
"name": "read",
"input": { "path": "src/big-file.ts", "offset": 2001 }
}
然后又拿到 2001-4000 行,末尾又带提示 Use offset=4001 to continue.,如此循环。
如果 LLM 觉得够了
它就不再调用 read,直接生成回答。是 LLM 自己判断够不够,不是代码强制的。
另一个极端情况
如果某一行就超过 50KB(比如压缩过的 JSON),工具直接返回:
[Line 1 is 120.5KB, exceeds 50.0KB limit. Use bash: sed -n '1p' src/big.json | head -c 51200]
文件内容一个字都不返回,只给 LLM 一个”换个方式读”的建议。LLM 看到后可能会改用 bash 工具去处理。
评论
请登录后发表评论。
暂无评论。成为第一个评论者!