工具中间态(tool intermediate state) 前端与交互
别名:
工具中间态
工具调用从「发起」到「出结果」之间的可见状态:`tool_call_start` 插入 `running` 块,`tool_result` 把它解析为 `done`/`failed`。没有中间态,用户看到的 Agent 就是黑盒——工具出错时错误本身也是 UI 数据(error-as-data 一路延续到浏览器)。
它是什么
工具中间态(tool intermediate state)是工具调用从「发起」到「出结果」之间的可见状态。协议上两个事件把它演完整:tool_call_start 在消息尾部插入一个 running 工具块(UI 立刻显示「正在调用 get_weather,参数是…」),tool_result 把匹配的块解析为 done/failed(ok 为真置结果,为假置错误——错误也是 UI 数据,ch08 的 error-as-data 一路延续到浏览器)。
为什么没有它 Agent 就是黑盒
不显示中间态,用户看到的 Agent 就是一片空白——它在调工具、在等审批、还是死循环,用户无从分辨。ch14 给 CLI 加 trace 日志让「模型在想什么」可见;Web 前端不显示工具中间态,等于把 trace 又关掉了。一个不能让你看到「它在做什么」的 Agent,和卡死没有区别。
与厂商实践对应
OpenAI Responses API 流式里,response.function_call_arguments.delta 携带工具参数增量、response.output_item.done 收尾(官方流式指南);OpenAI Agents SDK 把事件分成「原始 token 级」与「条目级生命周期事件」(tool_called/tool_output),后者专门驱动 UI 展示「正在调用工具」(Agents SDK · Streaming)。我们 ch15 的协议走的是同一条路:事件是唯一真相,UI 是事件的函数。
在本教程的位置
第 17 章「文本累积与工具中间态」一节:onToolCallStart 建 running 块、onToolResult 只解析第一个匹配且仍为 running 的块(重复事件幂等)。相关词条:视图模型、状态守卫。