大模型的函数调用(function call)能力,也称工具调用能力(tool use),是指大模型能够调用外部工具以扩展其应用范围的能力。函数调用功能允许模型直接调用外部函数或API,从而获得执行特定任务、获取实时数据或增强决策的能力。这一特性不仅扩展了模型的应用范围,使其能处理更复杂、更具体的问题,还提升了模型的实用性和交互性,实现了大模型与外部世界的高效连接,为用户提供更丰富、更个性化的服务。
以下统一使用“工具调用”(tool use)来介绍function call特性。
图 1 大模型工具调用的流程图[object Object][object Object]
- 上层应用将系统prompt和用户输入内容给到大模型,同时由上层应用负责给出大模型本次执行可用的工具集合。
- 大模型根据系统prompt和用户输入内容,决定是直接返回答案还是从应用给出的工具集合中选取一个或多个函数。如果选择使用工具,则将本次选择的工具名称和工具参数取值信息返回给上层应用。
- 上层应用解析来自推理引擎的响应,提取模型选择的工具信息,执行模型选择出的函数,得到本次工具调用的结果。
- 上层应用使用工具调用的结果,构造生成答案的prompt,再次发送给大模型,请求生成最终答案。
- 大模型根据工具调用的结果,总结信息,生成答案并返回。
- Atlas 800I A2 推理服务器、Atlas 800I A3 超节点服务器和Atlas 300I Duo 推理卡支持此特性。
- 当前ChatGLM3-6B、Qwen3-32B、Qwen3-235B-A22B、Qwen3-30B-A3B、DeepSeek-R1-0528、Qwen2.5-Instruct和DeepSeek-V3.1系列模型支持此特性。
- 使用Function Call特性,DeepSeek-V3.1系列模型必须配置中参数,其余模型可以不配置。
- 当前仅支持OpenAI chat接口。
- Function Call特性支持与量化、长序列、多机推理、PD分离、MoE、Multi-LoRA、SplitFuse、并行解码、专家并行、MTP、Prefix Cache、思考解析(DeepSeek-V3.1模型除外,DeepSeek-V3.1模型能力不支持一条请求同时使能Function Call和思考解析)、张量并行、MLA特性进行叠加,其中SplitFuse、并行解码、MTP特性暂不支持在流式推理下叠加Function call特性。
- Function Call特性当前暂不支持include_stop_str_in_output、stop、best_of、n、use_beam_search和logprobs后处理参数;当temperature设置较高(导致采样随机性较高),可能会影响触发Function Call的稳定性。
- Function Call特性支持非流式推理,仅Qwen3-32B、Qwen3-235B-A22B、Qwen3-30B-A3B和DeepSeek-R1-0528模型的Function Call特性支持流式推理。
- 当请求报文中包含Function Call功能时,当前版本请求报文最大支持的JSON嵌套层次为10层。
表 1 Function Call特性补充参数:ModelConfig中的models参数 [object Object][object Object]
表 2 已注册ToolsCallProcessor [object Object][object Object]
以使用DeepSeek-V3.1为例,介绍Function Call如何使用。
打开Server的config.json文件。
whl包安装方式:
[object Object]run包安装方式:
[object Object]
配置服务化参数。
按照在Server的config.json文件中添加“tool_call_parser”和“chat_template”字段,服务化参数说明请参见章节,参数配置示例如下。
[object Object][object Object]
启动服务。
whl包安装方式:
[object Object]run包安装方式:
[object Object]
[object Object][object Object]向服务发送请求,参数说明见《MindIE Motor开发指南》中的“服务化接口 > EndPoint业务面RESTful接口 > 兼容OpenAI接口 > 推理接口”章节。
请求样例:
[object Object]响应样例:
[object Object]根据模型返回的tool_calls调用相关的本地工具,使用assistant角色关联中接口返回的tool_calls和id,并使用tool角色关联工具执行的结果和中接口返回的id,向大模型发送请求。
[object Object]