OneProvider

工具调用

为应用加入函数调用:定义工具、读取 tool_use 块、控制 tool_choice 并执行并行调用。Anthropic 和 OpenAI 两种风格都适用。

Anthropic 原生端点上的函数调用。API 会规范化 tool_choice,因此发送 {type:any} 或 {type:tool} 的旧版 SDK 仍可继续使用。

全部模型、功能与价格 面向 AI 智能体的文档索引: https://oneprovider.dev/docs/llms.txt

请求结构

以数组形式声明工具。每个工具都有 name、description 和 JSON Schema 格式的 input_schema。模型决定调用工具时,会输出一个 tool_use 内容块。

json
{
"model": "claude-sonnet-5-5",
"max_tokens": 1024,
"tools": [
{
"name": "get_weather",
"description": "Return current weather for a city.",
"input_schema": {
"type": "object",
"properties": {
"city": { "type": "string" },
"units": { "type": "string", "enum": ["c", "f"] }
},
"required": ["city"]
}
}
],
"messages": [
{ "role": "user", "content": "What's the weather in Berlin in celsius?" }
]
}

包含工具调用的响应

json
{
"id": "msg_01...",
"stop_reason": "tool_use",
"content": [
{ "type": "text", "text": "Let me check that for you." },
{
"type": "tool_use",
"id": "toolu_bdrk_01...",
"name": "get_weather",
"input": { "city": "Berlin", "units": "c" }
}
]
}

继续循环

您的代码执行完工具后,把结果放在包含 tool_result 块的 user 消息中发回。随后模型会再发起一次工具调用,或给出最终的文本答案。

json
{
"role": "user",
"content": [
{
"type": "tool_result",
"tool_use_id": "toolu_bdrk_01...",
"content": "{\"city\":\"Berlin\",\"temp_c\":18,\"sky\":\"clear\"}"
}
]
}

tool_choice:我们如何规范化

Anthropic 支持四种 tool_choice 写法。OneProvider API 接受客户端发送的全部四种写法,但其中两种会以不同的形式传给模型:

参考数据
客户端发送模型收到原因
{"type":"auto"}(或不填)不变由模型自行决定,最常见的情况。
{"type":"none"}不变强制只返回文本响应。
{"type":"any"}{"type":"auto"} + 系统提示并非每个模型都支持强制调用工具;系统提示会告诉模型 "you MUST call a tool"。
{"type":"tool","name":"X"}{"type":"auto"} + 系统提示同上;系统提示中会指明具体的工具。
为什么要这样做 没有这一改写,tool_choice:any 和 tool_choice:tool 在某些模型上会失败。使用 auto 加上强约束的系统提示后,我们的测试中这类请求约有 95% 能成功。如果您期望的工具调用被文字回复取代了,说明系统提示没能引导住模型:请收紧您的用户提示词,或换用能力更强的模型。

并行工具调用

一个响应中可以包含多个 tool_use 块,由模型决定是否并行展开。请全部执行,然后在一条 user 消息中发回多个 tool_result 块(每个 tool_use_id 对应一个)。顺序无关紧要。

工具命名

  • 名称区分大小写并原样透传:模型会原样返回您注册的名称。
  • snake_case 和 PascalCase 都可以。Claude Code CLI 使用 PascalCase(Read、Bash、Edit);通用 SDK 通常使用 snake_case。
  • 名称请保持在 64 个字符以内,且只使用 ASCII 字符 [a-zA-Z0-9_]。

OpenAI 风格的工具调用

在 /v1/chat/completions 端点上,请使用标准的 OpenAI tools / tool_calls 结构,我们会在内部将其转换为 Anthropic 的 tool_use 块。

快速解答

该使用哪个 base URL?

Claude Code 和 Anthropic SDK 使用 https://api.oneprovider.dev。OpenAI SDK 和兼容 OpenAI 的客户端使用 https://api.oneprovider.dev/v1。同一个密钥可用于这两个地址;模型列表见模型页面 ,费率见价格页面 。

如何进行身份验证?

将完整的 sk-… 密钥放在 x-api-key 或 Authorization: Bearer 中,二选一,不要同时使用。请把密钥存放在环境变量中,不要写进会被提交的文件。了解更多身份验证说明 。

在哪里获取密钥?

在 Telegram 机器人 @oneprovider_robot 或 app.oneprovider.dev 打开您的个人中心,为余额充值,然后点击“签发密钥”。每个密钥都可以设置各自的消费限额。个人中心与 API 密钥 。

401、404 和 429 是什么意思?

401:密钥缺失、拼写有误或放错了请求头;请粘贴完整的密钥,不要带引号或空格。404:通常是 base URL 不对,例如缺少或重复了 /v1。429 且提示“Insufficient balance”:个人中心余额或密钥的消费限额已用完,请充值,不要反复重试;其他 429 属于速率限制,请等待 Retry-After 指定的时间。详情见:错误码 和故障排查 。

流式输出为什么会中断或被重置?

VPN 和 VLESS 代理常常会缓冲 SSE,或破坏 HTTP/2 协商。OneProvider 没有地区限制,也不会缓冲流式输出,请关闭代理后重试。

以上都没解决,该去哪里咨询?

请在 Telegram 联系 @Oneproviderhelpbot ,或在网页个人中心打开“客服”,并附上 HTTP 状态码和完整的错误信息。客服如何运作 。

最后更新: 2026-11-08 发现问题? @Oneproviderhelpbot