SuperAPI AI 工具集

ai-core/tool-calling

智能体与模型

查看项目

更新于 10-16 09:42

技能介绍

用途

本技能构建在 ai-core 之上,用于在 TanStack AI 中实现同构(isomorphic)工具调用系统。它让开发者用统一的 toolDefinition() 定义工具,并分别提供服务端与客户端实现,从而在服务端 chat() 与客户端 useChat() 之间共享同一份工具定义。

主要能力

  • 统一定义:使用 toolDefinition() 配合 Zod 的 inputSchema / outputSchema 定义工具,可附加 description 与 meta 描述。
  • 服务端实现:通过 .server() 提供执行函数,传入 chat({ tools }) 后由服务端自动执行。
  • 客户端实现:通过 .client() 提供执行函数,配合 clientTools() 传入 useChat,在浏览器端运行。
  • 仅服务端工具:定义后用 .server() 实现,客户端不运行任何代码。
  • 仅客户端工具:服务端只传裸定义(无 .server())让模型知晓,客户端传 .client() 实现。
  • 审批流程:在定义中设置 needsApproval: true,执行会暂停并产生 interrupt,客户端通过 resolveInterrupt / resolveInterrupts / cancel 处理,支持批量审批。
  • 懒加载工具发现:设置 lazy: true 的工具不会预先发送给模型,模型通过合成的 lazy__tool__discovery 工具按需发现其 schema,节省 token;可用 lazyToolsConfig 的 includeDescription('none' / 'first-sentence' / 'full')调整发现目录的详细程度。
  • 通用中间件中断:使用 defineInterrupt() 在聊天生命周期边界请求带类型的应用数据,需同时在 chat({ interrupts }) 与 useChat({ interrupts }) 注册,仅在 onInterruptBoundary 发出,在 onInterruptResolution 读取结果。
  • MCP 工具:@tanstack/ai-mcp 的 createMCPClient 可连接 Streamable HTTP、SSE 或 stdio 的 MCP 服务器,自动发现并调用其工具;优先尝试 spec 2026-07-28,不支持时回退到 2025 initialize 握手。MCP 工具结果若携带 ui:// 资源 URI,会以 UIResourcePart 呈现,且不会进入模型输入。

使用方式

  1. 在共享文件中用 toolDefinition() 定义工具及其 Zod schema。
  2. 服务端用 .server() 实现执行逻辑,并在路由中通过 chat({ tools }) 传入;客户端用 .client() 实现并通过 clientTools() 传入 useChat。
  3. 需要审批时设置 needsApproval: true,服务端路由需转发 resume / parentRunId,客户端渲染绑定的 interrupts 并调用 resolveInterrupt / resolveInterrupts / cancel。
  4. 需要懒加载时设置 lazy: true,并可配置 lazyToolsConfig。
  5. 连接 MCP 时用 createMCPClient 建立连接,调用 mcp.tools() 获取 ServerTool[] 后展开传入 chat();调用方负责客户端生命周期,chat() 不会关闭客户端。

适用场景

  • 需要在服务端与客户端共享同一套工具定义的聊天应用。
  • 需要人工审批才能执行敏感操作(如发送邮件)的场景。
  • 工具数量多、希望按需发现以节省 token 的场景。
  • 需要接入外部 MCP 服务器工具的场景。

限制

  • 本技能要求先阅读 ai-core 以了解关键规则。
  • 通用中断与工具审批共享同一 AG-UI 中断批次,只有客户端解决或取消所有绑定项后才会继续;stop 比 cancel 更严格,cancel 比 continue 更严格。
  • 不应从中间件直接发出原始 AG-UI 中断事件,应使用边界钩子。
  • maxIterations 限制的是模型轮次而非工具调用次数;工具预算需使用中间件 onBeforeToolCall + onShouldContinue。
  • addToolApprovalResponse 与 pendingInterrupts 为迁移期已弃用的兼容垫片,新代码应优先使用绑定方法。
  • 关于收费、价格、平台支持范围等具体信息,资料中暂未提供。