工具调用
工具调用,也叫函数调用,是一项功能,让语言模型请求你的程序运行某个函数,并在回答里使用运行的结果。模型自己从不运行任何东西:它返回工具的名称和参数,真正的工作由你的代码来做。
更新于 2026年11月8日
只在你的设备上可读。
对话只在你的设备上可读;开启同步后,其他设备上也可读。别处一概读不到。
我们读不了。
消息只是经过,不会留下记录;你的对话始终只以加密形式保存。
模型不知道你是谁。
它只收到问题,绝不会收到你的邮箱、账户或 IP 地址。
途中什么也不留下。
回复传回后加密保存在这里;即使开启同步,你的密钥也从不以明文到达我们这里。
工作原理
首先,你要描述自己提供的工具。每个工具有名称、一段简短的说明,以及列出其参数的 JSON Schema,比如一个接收城市的函数 get_weather。你把这份清单连同对话一起发送。如果模型判断某个工具会有帮助,它的回复里就不是最终文字,而是一次工具调用:工具的名称和以 JSON 写成的参数。你的程序运行这个函数,加上一条带有结果和调用标识符的消息,再把一切发回去。模型随后根据这个结果写出最终的回答。可以把它看作一位把你的点单写在小纸条上、却从不走进厨房的服务员。典型的例子有查询订单状态、换算货币、搜索知识库,或者创建一条日历日程。
大多数 API 允许你控制行为。你可以让模型自己选择,禁止使用工具,要求必须调用某个工具,或者指定确切的那一个。同一个回复里可以出现多次调用,如果它们互不依赖,就能省下往返的次数;在流式回复里,参数会在同一个序号下分片到达。同样的机制也支撑着智能体,它们会重复“调用、结果、决定”的循环,它也是从文字中提取结构化数据的可靠办法。有些服务商提供严格模式,强制输出与 Schema 完全匹配,能消除许多格式错误的调用。
需要小心。模型可能选错工具,编造参数,或者用有效但有害的值调用函数,所以要在你这一端校验参数,并且绝不要运行比任务所需更强大的东西。并不是每个模型都支持这项功能,支持的模型在遵循 Schema 的可靠程度上也各不相同。用真实的案例来测试,让工具说明保持简短精确,并给工具起一个能说明其用途的名字。工具清单要保持简短,因为一份很长的菜单会让模型困惑,还会挤占上下文窗口。典型的失败有:拼错的城市名、缺少必填字段、以文本形式发送的数字、格式不对的日期,或者一个并不存在的工具。
在 NeverNo 中
NeverNo 的 API 在聊天补全上支持它。传入 tools,也就是带有 JSON Schema 的函数列表,还可以选择传入 tool_choice(auto、none、required 或指定的某个函数)和 parallel_tool_calls。当模型调用工具时,回复里会有 tool_calls,finish_reason 为 tool_calls;你运行函数,再发回一条 tool 消息,带上结果和它的 tool_call_id。在流式输出里,每次调用都以 OpenAI 的写法到达。
只有在 /models 列表里 capabilities.tools 为 true 的模型才接受工具;其他任何模型都会返回一个明确的、名为 tools_not_supported 的 400 错误。GLM 5.2 是 Z.ai 的私密模型,包含在付费套餐里,上下文窗口为 200,000 个 token,并有可选的推理模式。在基于某个模型构建之前,请先查看列表。关于 ChatGPT 替代方案的页面,解释了人们为什么因为模型的多样性而选择 NeverNo。
值得记住
模型按名称和参数请求一个工具;你的程序运行它并返回结果。
每个工具都用名称、简短说明和参数的 JSON Schema 来描述。
tool_choice 设置可以把决定权交给模型、禁止使用工具,或者强制使用某一个。
每个参数都要自己校验:格式正确的调用,不一定是安全的调用。
只有声明了这项能力的模型才接受工具,其他的会返回错误。
常见问题
是模型来执行函数吗?
不是。它只会生成一个结构化的请求,写明函数及其参数。运行函数的是你的代码,所以实际会发生什么由你控制。这种分离,也让你可以在任何东西运行之前,加上日志、速率限制或确认步骤。
工具调用和函数调用是一回事吗?
实际上是的。函数调用是 OpenAI 最先使用的名称;工具调用是更宽泛的说法,因为工具可以是函数,也可以是搜索或另一项服务。
我怎么知道某个模型是否支持?
查看模型列表里的 capabilities。在 NeverNo 上,GET /models 会为每个模型显示 capabilities.tools,没有这项能力的模型会返回 400 错误,而不是悄悄忽略工具。用一个很简单的工具发一个小请求,是确认某个模型表现正常的最快办法。
问出你的第一个问题
无需账户,无需银行卡。NeverNo 会 10 种语言,用哪种写都行。
打开聊天