Function Call
大模型的函数调用(function call)能力,也称工具调用能力(tool use),是指大模型能够调用外部工具以扩展其应用范围的能力。函数调用功能允许模型直接调用外部函数或API,从而获得执行特定任务、获取实时数据或增强决策的能力。这一特性不仅扩展了模型的应用范围,使其能处理更复杂、更具体的问题,还提升了模型的实用性和交互性,实现了大模型与外部世界的高效连接,为用户提供更丰富、更个性化的服务。
以下统一使用“工具调用”(tool use)来介绍function call特性。

流程步骤
- 上层应用将系统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模型除外)、张量并行、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特性支持流式推理。
参数说明
配置项 |
取值类型 |
取值范围 |
配置说明 |
|---|---|---|---|
chat_template |
string |
|
传入自定义的对话模板,替换模型默认的对话模板。
|
tool_call_options |
|||
tool_call_parser |
string |
|
使能Function Call时,选择工具的解析方式。
|
工具解析模块 |
可选注册名称 |
说明 |
|---|---|---|
ToolsCallProcessorChatglmV2 |
chatglm2_6b,chatglm_v2_6b,chatglm_v2,chatglm2 |
不进行工具解析,直接返回content。 |
ToolsCallProcessorChatglmV3 |
chatglm3_6b,chatglm_v3_6b,chatglm_v3,chatglm3 |
适用于ChatGLM3-6B的工具解析模块。 |
ToolsCallProcessorChatglmV4 |
chatglm4_9b,chatglm_v4_9b,glm_4,glm_4_9b |
适用于GLM4-9B的工具解析模块。 |
ToolsCallProcessorDeepseekv3 |
deepseek_v2,deepseek_v3,deepseekv2,deepseekv3 |
适用于DeepSeek-R1-0528与DeepSeek-V3-0324的工具解析模块。 |
ToolsCallProcessorDeepseekv31 |
deepseek_v31,deepseekv31 |
适用于DeepSeek-V3.1的工具解析模块。 |
ToolsCallProcessorLlama |
llama,llama3,llama3_1 |
适用于LlaMA3的工具解析模块。 |
ToolsCallProcessorQwen1_5_or_2 |
qwen1_5,qwen_1_5,qwen2,qwen_2,qwen1_5_or_2, qwen_1_5_or_2 |
适用于Qwen1.5与Qwen2的工具解析模块。 |
ToolsCallProcessorQwen2_5 |
qwen2_5,qwen_2_5 |
适用于Qwen2.5的工具解析模块。 |
ToolsCallProcessorQwen3 |
qwen3,qwen3_moe,hermes |
Hermes工具解析方式,适用于Qwen3与Qwen3-moe系列。 |
执行推理
以使用DeepSeek-V3.1为例,介绍Function Call如何使用。
- 打开Server的config.json文件。
cd {MindIE安装目录}/latest/mindie-service/ vi conf/config.json - 配置服务化参数。
按照表1在Server的config.json文件中添加“tool_call_parser”和“chat_template”字段,服务化参数说明请参见配置参数说明(服务化)章节,参数配置示例如下。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
"ModelDeployConfig" : { "maxSeqLen" : 2560, "maxInputTokenLen" : 2048, "truncation" : false, "ModelConfig" : [ { "modelInstanceType" : "Standard", "modelName" : "dsv31", "modelWeightPath" : "/data/weight/DeepSeek-V3.1", "worldSize" : 16, "cpuMemSize" : 0, "npuMemSize" : -1, "backendType" : "atb", "trustRemoteCode" : false, "async_scheduler_wait_time": 120, "kv_trans_timeout": 10, "kv_link_timeout": 1080, "models": { "deepseekv2": { "tool_call_options": { "tool_call_parser": "deepseek_v31" }, "chat_template": "/path/to/tool_chat_template_deepseekv31.jinja" } } } ] },
- DeepSeek-V3.1模型:“tool_call_parser”必须配置为“deepseek_v31”,否则将默认使用deepseek_v3的工具解析模块,与DeepSeek-V3.1模型格式不匹配,无法正确解析。
- 其余模型:步骤1和2非必要,会自动匹配对应模型的工具解析方式。若配置,需要将“deepseekv2”字段修改为对应模型的“model_type”。
- chat_template:传入后会覆盖模型tokenizer_config.json中默认的chat_template。对于DeepSeek V3.1,DeepSeek R1 0528与DeepSeek V3 0324模型,权重tokenizer_config.json中默认的chat_template不支持Function Call,需要传入支持Function Call的chat_template。
- chat_template的格式(空格与换行符等)可能会影响数据集与Funciton Call评分。
- 启动服务。
./bin/mindieservice_daemon
- 向服务发送请求,参数说明见《MindIE Motor开发指南》中的“服务化接口 > EndPoint业务面RESTful接口 > 兼容OpenAI接口 > 推理接口”章节。请求样例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
curl -H "Accept: application/json" -H "Content-type: application/json" --cacert ca.pem --cert client.pem --key client.key.pem -X POST -d '{ "model": "dsv31", "messages": [ { "role": "system", "content": "You are a helpful customer support assistant. Use the supplied tools to assist the user." }, { "role": "user", "content": "Hi, can you tell me the delivery date for my order? my order number is 999888" } ], "tools": [ { "type": "function", "function": { "name": "get_delivery_date", "description": "Get the delivery date for a customer\u0027s order. Call this whenever you need to know the delivery date, for example when a customer asks \u0027Where is my package\u0027", "parameters": { "type": "object", "properties": { "order_id": { "type": "string", "description": "The customer\u0027s order ID." } }, "required": [ "order_id" ], "additionalProperties": false } } } ], "tool_choice": "auto", "stream": false }' https://127.0.0.1:1025/v1/chat/completions
响应样例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
{ "id": "chatcmpl-123", "object": "chat.completion", "created": 1677652288, "model": "dsv31", "choices": [ { "index": 0, "message": { "role": "assistant", "content": "", "tool_calls": [ { "function": { "arguments": "{\"order_id\": \"999888\"}", "name": "get_delivery_date" }, "id": "call_JwmTNF3O", "type": "function" } ] }, "finish_reason": "tool_calls" } ], "usage": { "prompt_tokens": 226, "completion_tokens": 122, "total_tokens": 348 }, "prefill_time": 200, "decode_time_arr": [56, 28, 28, 28, 28, ..., 28, 32, 28, 28, 41, 28, 25, 28] }
- 根据模型返回的tool_calls调用相关的本地工具,使用assistant角色关联2中接口返回的tool_calls和id,并使用tool角色关联工具执行的结果和2中接口返回的id,向大模型发送请求。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
curl -H "Accept: application/json" -H "Content-type: application/json" --cacert ca.pem --cert client.pem --key client.key.pem -X POST -d '{ "model": "dsv31", "messages": [ { "role": "user", "content": "Hi, can you tell me the delivery date for my order? my order number is 999888" }, { "role": "assistant", "content": "", "tool_calls": [ { "function": { "arguments": "{\"order_id\": \"999888\"}", "name": "get_delivery_date" }, "id": "call_JwmTNF3O", "type": "function" } ] }, { "role": "tool", "content": "the delivery date is 2024.09.10.", "tool_call_id": "call_JwmTNF3O" } ], "stream": false, "max_tokens": 4096 }' https://127.0.0.1:1025/v1/chat/completions