用于解析非本地支持的模型中的工具调用 AI SDK 中间软件 tools。 。 。 .
这一一揽子措施仅限无害环境管理。 使用 import 或动态 import()页:1
require() 不被支持.
安装
# Current stable line (v5.x) — built for AI SDK v7
pnpm add @ai-sdk-tool/parser
如果您还需要 AI SDK v6 线, 请将上一条主线 :
pnpm add @ai-sdk-tool/parser@4
AI SDK 兼容性
从这回扣中查清了事实 CHANGELOG.md npm发布元数据(截至2026-06-25).
@ai-sdk-tool/parser 主要 | AI SDK 专业 | 维持现状 |
|---|---|---|
v1.x | v4.x | 遗产(未积极保留) |
v2.x | v5.x | 遗产(未积极保留) |
v3.x | v6.x | 遗产(未积极保留) |
v4.x | v6.x | 上一条稳定线 |
v5.x | v7.x | 活动( 当前) latest 线条) |
注:在发布/更改日志中,没有单独正式的EOL公告 v1- 说吧v3;"legacy"此处指非流出行.
升级到 v7
这个 5.0.0 目标 大赦国际SDK v7 (提供方规格v4). 是现在 latest 线 v4.x 线条仍然可供AI SDK v6使用.
pnpm add @ai-sdk-tool/parser
打破更改与 v4.x 线条:
- 要求数
ai@^7编号 :@ai-sdk/provider@^4。 。 。 . 此行为 没有 兼容 AI SDK v6 线. 中间软件声明specificationVersion: "v4"并使用LanguageModelV4*提供者类型. @ai-sdk/provider财务报告和审定财务报表@ai-sdk/provider-utils现在属于同伴依赖关系. 他们通常通过ai@7,因此大多数应用程序不需要额外安装. 如果您的软件包管理器没有自动安装对等器,请明确添加:pnpm add @ai-sdk/provider@^4 @ai-sdk/provider-utils@^5- 节点.js
>=22需要时间 (节点18为去生. - 工具结果文件部分现在使用被标记为 v4 文件形状(
{ type: "data", data }而不是赤裸裸的data绳子。 这只影响直接构建工具结果文件部件的代码.
工具结果介质(图像/文件)
当一个工具返回多模式时 output: { type: "content", value: [...] },中间的软件项目, 变成下一个模型:
mediaStrategy.mode | 行为 |
|---|---|
model (单位:千美元)默认(中文(简体) ) | 前进峡谷 { type: "file", data } 内容为模型文件部分。 协议包装器为相邻 text。 。 。 . |
placeholder | 仅文本后退( E)[Image: image/png], (中文(简体) ), [File URL: ...],.)用于非视觉模型. |
auto | 当 capabilities 启用该介质类型; 否则将占位符 . |
import {
createHermesToolResponseFormatter,
createToolMiddleware,
hermesProtocol,
hermesSystemPromptTemplate,
} from "@ai-sdk-tool/parser";
// Default preconfigured middleware already uses model media mode.
// For text-only models, opt into placeholders:
const textOnlyMiddleware = createToolMiddleware({
protocol: hermesProtocol(),
toolSystemPromptTemplate: hermesSystemPromptTemplate,
toolResponsePromptTemplate: createHermesToolResponseFormatter({
mediaStrategy: { mode: "placeholder" },
}),
});
// YAML XML tool *responses* reuse Morph's response formatter — use the Morph
// factory when you need mediaStrategy options with yamlXmlProtocol.
仅 http: 编号 : https: 文件 URL 作为模型文件部分转发;其他方案成为占位符。 将 JSON 数据化工具结果的字符串 URL 重排为 URL 故意的物体.
用户信息图像没有变化——它们通过现在.
状态 : 5.0.0 是稳定释放线。 如果您需要再生产安装, 请按精确的版本 .
软件包映射
| 导入 | 目的 |
|---|---|
@ai-sdk-tool/parser | 主要中间软件厂,预配置的中间软件,协议出口 |
@ai-sdk-tool/parser/community | 社区中间软件(Sijawara,UI-TARS) |
快开始
import { createOpenAICompatible } from "@ai-sdk/openai-compatible";
import { morphXmlToolMiddleware } from "@ai-sdk-tool/parser";
import { stepCountIs, streamText, wrapLanguageModel } from "ai";
import { z } from "zod";
const model = createOpenAICompatible({
name: "openrouter",
apiKey: process.env.OPENROUTER_API_KEY,
baseURL: "https://openrouter.ai/api/v1",
})("arcee-ai/trinity-large-preview:free");
const result = streamText({
model: wrapLanguageModel({
model,
middleware: morphXmlToolMiddleware,
}),
stopWhen: stepCountIs(4),
prompt: "What is the weather in Seoul?",
tools: {
get_weather: {
description: "Get weather by city name",
inputSchema: z.object({ city: z.string() }),
execute: async ({ city }) => ({ city, condition: "sunny", celsius: 23 }),
},
},
});
for await (const part of result.fullStream) {
// text-delta / tool-input-start / tool-input-delta / tool-input-end / tool-call / tool-result
}
选择中间软件
使用预配置的中间软件导出 src/preconfigured-middleware.ts数字 :
| 中间软件 | 最好还是 |
|---|---|
hermesToolMiddleware | JSON型工具有效载荷 |
morphXmlToolMiddleware | 具有有计划意识的XML型有效载荷 |
yamlXmlToolMiddleware | XML 工具标记 + YAML 机构 |
qwen3CoderToolMiddleware | Quen/UI-TARS 风格 <tool_call> 标记 |
构建自定义中间软件
import { createToolMiddleware, qwen3CoderProtocol } from "@ai-sdk-tool/parser";
export const myToolMiddleware = createToolMiddleware({
protocol: qwen3CoderProtocol,
toolSystemPromptTemplate: (tools) =>
`Use these tools and emit <tool_call> blocks only: ${JSON.stringify(tools)}`,
});
工具选择
toolChoice: "auto"(默认)解析工具调出模型文本 .toolChoice: "required"财务报告和审定财务报表toolChoice: { type: "tool", toolName }通过 JSON 复制responseFormat限制.toolChoice: "none"跳过工具即时插入和工具调用解析;对话中的工具调用历史仍然被序列化为文本.
流出语义
- 流出解析器
tool-input-start, (中文(简体) ),tool-input-delta,以及tool-input-end当工具输入可以被渐进重建时. tool-input-start.id, (中文(简体) ),tool-input-end.id,以及最终tool-call.toolCallId调和到同一个身份.emitRawToolCallTextOnError默认为false; 错误的工具调用标记被压制text-delta除非明确启用.- 由赤色组成的文本块
{"name": ..., "arguments": ...}已知工具的有效载荷(或有栅栏的qqjson块)在生成道和流道中被回收为工具调用finishReason改为tool-calls当工具呼叫被解析时.
通过配置解析错误行为 providerOptions.toolCallMiddleware数字 :
const result = streamText({
// ...
providerOptions: {
toolCallMiddleware: {
onError: (message, metadata) => {
console.warn(message, metadata);
},
emitRawToolCallTextOnError: false,
},
},
});
地方发展
pnpm build
pnpm test
pnpm check:biome
pnpm check:types
pnpm check
此回购中的例子
- 解析中间软件示例 :
examples/parser-core/README.md - RXML 示例 :
examples/rxml-core/README.md
从 repo 根中运行一个示例 :
pnpm dlx tsx examples/parser-core/src/01-stream-tool-call.ts