一次工具结果,怎样进入下一轮上下文
同一个 c1,连接模型的调用意图、工具的返回值与后续请求。
↔ 左右滑动查看完整回路,文字保持可读大小
- 01模型响应结算
- 02登记工具调用
- 03执行工具
- 04提交工具结果
- 05派生消息历史
- 06发送下一轮
从一条 read 调用开始
点击播放,观察调用与返回值如何闭合这条回路。下方三个视角会随阶段变化;也可以点图中的链接切换视角。
模型给出调用意图
assistant/message 已记录 read 调用。c1 是这次调用的标识;文件内容还没有返回。
先留下调用记录
调度器先追加 tool/call,并保留它的事件序号。后续结果将引用这个序号。
运行时接手执行
工具运行时按 prepare、策略检查、执行与结果处理的路径调用 read。图中只展开正常读取路径。
返回值成为会话事件
tool/result 携带工具消息,并用 sourceEventSeqs 引用先前的 tool/call。Session 先提交到内存记录。
下一 Step 读取会话表面
正常继续路径进入下一 Step。prepareRequest() 调用 session.deriveMessages(),得到包含工具结果的消息历史。
冻结请求,再交给模型
边界消息和请求被冻结,随后交给 adapter.stream()。模型这次获得了 read 的返回内容。
仅展示 user / assistant / tool;省略 system、developer 与 provider 包装。
尚未收到模型响应;下一轮请求未构造。
仅展示 user / assistant / tool;省略 system、developer 与 provider 包装。
助手调用已结算;工具还没有执行。
仅展示 user / assistant / tool;省略 system、developer 与 provider 包装。
tool/call 已提交;等待运行时返回。
仅展示 user / assistant / tool;省略 system、developer 与 provider 包装。
工具已进入运行时;等待结果提交。
仅展示 user / assistant / tool;省略 system、developer 与 provider 包装。此处预览已提交记录的消息形态,尚未调用 deriveMessages()。
结果已进入会话;下一 Step 尚未派生消息。
仅展示 user / assistant / tool;省略 system、developer 与 provider 包装。
消息已派生;下一轮请求尚未冻结。
仅展示 user / assistant / tool;省略 system、developer 与 provider 包装。
消息与请求已冻结;交给 adapter.stream()。
可展开载荷。序号 41–43 为演示值;未提交项展示计划载荷,已省略完整 Schema 的其他字段。
41assistant/message尚未提交已提交
{
"type": "assistant/message",
"message": {
"role": "assistant",
"content": [{ "type": "tool-call", "id": "c1",
"name": "read",
"arguments": "{\"file_path\":\"README.md\"}" }]
}
}42tool/call尚未提交已提交
{
"type": "tool/call",
"callId": "c1",
"name": "read",
"arguments": "{\"file_path\":\"README.md\"}"
}43tool/result尚未提交已提交
{
"type": "tool/result",
"message": { "role": "tool", "toolCallId": "c1",
"content": [{ "type": "text",
"text": "# DeepSeek Harness…(示例文件内容)" }] },
"sourceEventSeqs": [42]
}颜色标记数据与职责的归属;下一 Step 只展示正常获准继续的路径。
模型 · 产生调用意图
assistant/message 结算后提取工具调用。模型提供名称、调用 ID 与参数;文件读取由工具运行时执行。
Agent · 组织下一 Step
executeToolCalls() 调度本轮工具;正常继续时,prepareRequest() 派生并冻结下一轮消息。
工具 · 返回执行结果
调度受执行模式与屏障约束。commitReady() 按模型调用顺序提交结果,完成顺序可以不同。
Session · 保存事件并派生表面
tool/result 引用 tool/call 的序号;deriveMessages() 将会话表面投影为消息历史。提交与刷盘分开。