KEEL · 龙骨 · A CURRICULUM FOR THE AI ERA
05. 工具结果为什么要回到下一轮? — keel 龙骨
工具返回事实,不会自动生成用户能读懂的诊断。模型必须在下一轮看到工具结果,才能继续决定或组织最终回答。
工具返回事实,不会自动生成用户能读懂的诊断。模型必须在下一轮看到工具结果,才能继续决定或组织最终回答。
role 是协议语义
| role | 谁产生 | 含义 |
|---|---|---|
| user | 用户 | 目标和补充信息 |
| assistant | 模型 | 文本、thinking 或工具请求 |
| tool | Harness/执行器 | 对某个工具请求的结果 |
工具结果不能伪装成 user 消息,否则模型会把执行数据理解成用户新指令。
多轮循环
flowchart TD
A[messages] --> B[模型]
B --> C[保存完整 assistant 消息]
C --> D{有 tool_calls?}
D -->|否| E[最终回答]
D -->|是| F[转换内部 ToolCall]
F --> G[Registry + Executor]
G --> H[追加 tool result]
H --> I{预算允许继续?}
I -->|是| A
I -->|否| J[limit_reached]
运行:
python courses/foundation/tool-calling/course/project/examples/03_tool_loop.py
请沿着 runner.py 找五个位置:工具描述传入模型、assistant 请求保存、供应商对象转内部 ToolCall、tool 结果回传、停止条件。
错误是否回传模型
事件不存在可以作为结构化 tool result 回传,让模型解释或请求补充信息;权限拒绝、输出契约破坏和安全策略拒绝可能直接终止。是否继续由 Harness 错误策略决定,不由模型自由选择。
本章自测
如果模型连续请求同一个工具,为什么不能只依赖 prompt 让它自己停止?因为停止条件是运行时安全边界,必须由 max_steps、deadline、取消和成本预算控制。