千问模型实现函数调用需五步:一、定义符合OpenAI格式的JSON Schema函数描述并置入tools;二、API请求中传入tools及支持Function Calling的模型;三、解析响应中的tool_calls字段;四、执行本地函数并构造含tool_call_id的tool_message;五、携带tool_message发起第二轮请求获取最终回复。
☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 多模态理解力帮你轻松跨越从0到1的创作门槛☜☜☜

如果您希望千问模型在对话中调用外部函数或工具以获取实时信息、执行操作或处理结构化任务,则需通过标准的 Function Calling 机制进行配置与触发。以下是实现函数调用接入的完整操作步骤:
一、定义函数描述(Function Schema)
千问通过 JSON Schema 格式理解可调用函数的名称、参数、用途等元信息。该描述用于引导模型识别何时及如何调用函数,必须严格遵循 OpenAI 兼容格式,并传入模型请求的 tools 字段中。
1、编写符合 JSON Schema 规范的函数描述对象,包含 name、description 和 parameters 三个必需字段。
2、parameters 字段需为 type: "object",并明确声明 properties、required 及各参数类型(如 string、number、boolean)。
3、将函数描述放入 tools 数组中,例如:[{ "type": "function", "function": { "name": "get_weather", "description": "获取指定城市的当前天气", "parameters": { "type": "object", "properties": { "city": { "type": "string", "description": "城市名称,如北京" } }, "required": ["city"] } } }]
二、构造带工具请求的 API 调用
向千问服务发起请求时,需在消息体中显式传递 tools 列表,并确保 model 参数指向支持 Function Calling 的版本(如 qwen-plus 或 qwen-max)。
1、设置请求方法为 POST,Content-Type 为 application/json。
2、在请求 body 中包含 messages(至少含用户输入)、tools、tool_choice(可选,设为 "auto" 或指定函数名)。
3、发送请求至千问开放平台对应的 Function Calling 接口地址,例如 https://dashscope.aliyuncs.com/api/v1/services/aigc/text-generation/generation。
三、解析模型返回的 tool_calls 内容
当模型判断需调用函数时,响应中 message.content 为空或含自然语言说明,同时出现 tool_calls 字段,内含一个或多个调用条目,每个条目含 function.name 和 function.arguments(JSON字符串)。
1、检查响应中的 message.role 是否为 "assistant" 且存在 tool_calls 数组。
Qwen 视频智能分析基础客户端(免费版),基于 Qwen 3.5 Plus 多模态模型对本地视频进行内容分析,支持场景描述与基础内容理解,采用默认抽帧频率和提示词,适合快速概览视频,API Key 读取自 ~/.skill-platform/skill-platform.json 的 skills 配置。
2、遍历 tool_calls,提取每个条目的 function.name,匹配本地已注册的函数实现。
3、使用 json.loads() 解析 function.arguments 字符串,获得 Python 字典形式的实际参数值。
四、执行本地函数并构造 tool_message
根据解析出的函数名和参数,在服务端同步执行对应逻辑,将结果格式化为符合协议的 tool_message,作为下一轮请求的上下文输入,使模型能基于结果继续推理或生成最终回复。
1、调用对应函数,例如调用 get_weather(city="上海") 返回 {"temperature": 26, "condition": "多云"}。
2、将结果序列化为字符串,例如 json.dumps({"temperature": 26, "condition": "多云"}, ensure_ascii=False)。
3、构造 tool_message 对象:{ "role": "tool", "content": "{"temperature": 26, "condition": "多云"}", "tool_call_id": "call_abc123" },其中 tool_call_id 必须与原始 tool_calls 中对应条目的 id 完全一致。
五、发起第二轮请求并获取最终响应
将原始用户消息、首轮模型响应(含 tool_calls)、以及新构造的 tool_message 按顺序组成新的 messages 数组,再次提交给模型,模型将据此生成自然语言形式的最终回答。
1、构建新 messages:[{"role": "user", "content": "上海现在天气怎么样?"}, {"role": "assistant", "tool_calls": [...]}, {"role": "tool", "content": "{"temperature": 26, "condition": "多云"}", "tool_call_id": "call_abc123"}]。
2、重复调用 API,不再传入 tools 字段(因工具调用已完成)。
3、读取第二轮响应中 message.role 为 "assistant" 且 message.content 非空的文本内容,即为面向用户的最终输出。

















