Skip to content

ToolCall 系列 ​

工具调用可视化组件,展示 AI 调用工具的过程和结果。包含 6 个子组件:

  • ToolCall — 可折叠容器(<details>/<summary>)
  • ToolCallHeader — 六态状态徽章 + 工具名 + 耗时
  • ToolCallContent — 展开内容
  • ToolCallInput — 格式化参数 JSON
  • ToolCallOutput — 结果或错误
  • ToolConfirmation — 人工审批卡片(见 ToolConfirmation 文档)

代码演示 ​

六态切换 ​

点击按钮切换状态,展开卡片查看参数与结果随状态的变化:

✓search_docs已完成1.2s
参数
{
  "query": "流式渲染",
  "topK": 5
}
结果
{
  "hits": 3,
  "sources": [
    "17-03 记忆系统",
    "10-02 core 层"
  ]
}

pending ​

排队或参数流式组装中,无耗时信息——适合让用户知道「请求已受理」:

⏳search_docs准备中
参数
{
  "query": "流式渲染",
  "topK": 5
}

calling ​

执行中,warning 色 + 脉冲动画给「正在跑」的感知,duration 实时跳动:

⚡get_weather运行中800ms
参数
{
  "city": "Beijing",
  "unit": "celsius"
}

awaiting-approval ​

等待人工审批,配合 ToolConfirmation 放进 default 插槽提供允许/拒绝按钮:

⛨delete_file等待确认
参数
{
  "path": "/tmp/lock.db",
  "force": true
}

completed ​

正常完成,参数与结果并排可审计——最常见形态:

✓search_docs已完成1.2s
参数
{
  "query": "流式渲染",
  "topK": 5
}
结果
{
  "hits": 3,
  "sources": [
    "17-03 记忆系统",
    "10-02 core 层"
  ]
}

denied ​

用户拒绝后的只读回溯,工具名与参数保留可查:

⊘send_email已拒绝2.1s
参数
{
  "to": "team@example.com",
  "subject": "周报"
}

error ​

失败态,error 字段的错误信息帮助排查:

✗search_docs失败5.0s
参数
{
  "query": "流式渲染",
  "topK": 5
}
错误
上游文档服务超时(504)

状态样式(六态徽章) ​

对齐 AI SDK 工具生命周期的六态状态机;旧三值(calling/completed/error)语义不变:

状态图标颜色i18n key说明
pending⏳mutedtoolCall.statusPending排队/参数流式组装中
calling⚡(脉冲动画)warningtoolCall.statusCalling执行中
awaiting-approval⛨warningtoolCall.statusAwaitingApproval等待人工审批(标签走 warning 描边)
completed✓successtoolCall.statusCompleted完成
denied⊘warning 系toolCall.statusDenied用户拒绝
error✗errortoolCall.statusError失败

状态标签随 aiChatI18n 语言切换;calling 的脉冲动画在 prefers-reduced-motion: reduce 下关闭。

ToolCallInfo 类型 ​

typescript
interface ToolCallInfo {
  id: string
  name: string
  arguments: Record<string, unknown>
  result?: unknown
  error?: string
  status: ToolCallStatus // 六态枚举,见上表
  duration?: number
}

API ​

ToolCall ​

属性名类型默认值说明
dataToolCallInfo—工具调用数据(必填)
插槽名作用域说明
header{ data, open }自定义头部
default{ data }自定义内容

其他子组件(Header/Content/Input/Output)通过 inject 从 ToolCall 获取数据。