使用指南
工具调用
让模型调用你定义的函数:各协议的写法、一次完整的调用流程,以及跨协议转换时的行为。
「工具调用」(也叫函数调用、Function Calling)是指:你先告诉模型有哪些函数可以用,模型在需要时会回复「请调用某个函数、参数是这些」;你的程序执行这个函数,再把结果交还给模型,模型据此给出最终回答。
NoviaHub 会把工具相关的字段交给模型;需要跨协议转换时,也会转换成目标协议的写法。模型能不能用好工具、支持哪些工具类型,取决于模型本身,请参考模型厂商的文档。
各协议的字段
Section titled “各协议的字段”| 协议 | 定义工具 | 控制是否调用 |
|---|---|---|
| OpenAI Chat Completions | tools |
tool_choice、parallel_tool_calls |
| OpenAI Responses | tools |
tool_choice、parallel_tool_calls、max_tool_calls |
| Anthropic Messages | tools |
tool_choice |
| Gemini | tools(其中的 functionDeclarations) |
toolConfig |
以上字段都会按原协议的格式转交给模型。
一次完整的调用(以 Chat Completions 为例)
Section titled “一次完整的调用(以 Chat Completions 为例)”第 1 步:带上工具定义发请求。
curl https://noviahub.com/v1/chat/completions \ -H "Authorization: Bearer $NOVIAHUB_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "model": "deepseek-v4-flash", "messages": [{"role": "user", "content": "巴黎现在天气怎么样?"}], "tools": [{ "type": "function", "function": { "name": "get_weather", "description": "查询某个城市的当前天气", "parameters": { "type": "object", "properties": {"city": {"type": "string", "description": "城市名"}}, "required": ["city"] } } }], "tool_choice": "auto" }'第 2 步:看模型是否要求调用工具。 如果模型决定调用,返回的 choices[0].message 里会有 tool_calls:每一项给出函数名 function.name、参数 function.arguments(一段 JSON 字符串)和一个 id。
第 3 步:执行函数,把结果交回模型。 在原来的 messages 后面依次追加两条消息:
- 模型返回的那条 assistant 消息(原样放回,包含
tool_calls)。 - 一条
role为tool的消息:tool_call_id填上一步的id,content填函数的执行结果。
然后再发一次请求,模型会根据工具结果给出回答。如果模型又要求调用工具,就重复第 2、3 步。
跨协议调用时
Section titled “跨协议调用时”用一种协议调用只支持另一种协议的模型时,NoviaHub 会自动转换工具的写法。在测试中确认过以下几种情况:
| 你的请求 | 模型实际使用的协议 | NoviaHub 的转换 |
|---|---|---|
Chat Completions 的 tools、tool_choice: "auto" |
Anthropic(如 Claude 模型) | function.parameters 变成 input_schema,tool_choice 变成 {"type": "auto"} |
Anthropic 的 tools |
OpenAI Chat(如 DeepSeek 模型) | input_schema 变成 function.parameters |
Gemini 的 functionDeclarations |
OpenAI Chat | 变成 tools 里的 function |
返回方向同样会转换。例如用 Chat Completions 调用 Claude 模型时,Claude 返回的 tool_use 会转换成 Chat 格式的 tool_calls,流式和非流式都会转换。
更多转换细节和限制,见协议转换兼容性。
- 工具的
description和参数说明写得越清楚,模型越容易正确调用。 function.arguments是模型生成的文本,使用前要按 JSON 解析并校验,不要直接执行。- 需要稳定使用工具时,优先选模型厂商官方说明支持工具调用的模型。