千问函数调用怎么实现?开发教程

星萱小哥_8710

星萱小哥_8710

2026-05-15

537人浏览

原创

需选用支持function calling的千问模型(如qwen-max-20240919),严格按openai-style定义tools,调用时传入tools和tool_choice参数,解析response中的tool_calls并执行对应函数,再将结果以tool角色注入上下文发起第二轮调用生成最终回复。

☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 多模态理解力帮你轻松跨越从0到1的创作门槛☜☜☜

千问函数调用怎么实现?开发教程

如果您正在开发需要调用外部工具的通义千问智能体应用,但模型无法识别用户意图并生成结构化函数调用指令,则可能是由于工具定义格式错误、模型未启用Function Calling模式、或响应解析逻辑缺失所致。以下是实现千问函数调用的具体操作路径:

一、确认模型支持Function Calling并选择合适版本

并非所有千问模型均原生支持函数调用能力,需选用明确标注该能力的模型版本,以确保推理过程中可输出符合OpenAI-style规范的function_call字段。此为后续工具调度与执行的基础前提。

1、访问DashScope模型列表页,筛选支持Function Calling的模型,如qwen-max-20240919、qwen-plus-20240919或qwen3-14b(本地部署场景)。

2、在API调用中显式指定model参数值,例如:model="qwen-max-20240919",不可使用qwen-turbo等不支持该能力的轻量模型。

3、验证模型是否返回function_call字段:向模型发送含明确工具调用意图的prompt,如“查杭州天气”,检查response.output.choices[0].message.content中是否包含JSON格式的function_call对象。

二、定义工具函数并构造tools参数列表

工具定义必须严格遵循OpenAI-style JSON Schema格式,包含name、description、parameters三要素,且parameters须为合法JSON Schema object类型。此结构用于引导模型理解可用能力边界及参数约束。

1、编写Python函数,例如获取天气信息:def get_weather(city: str) -> dict:,内部实现HTTP请求调用第三方天气API。

2、将该函数封装为tools列表中的一个字典项,其结构如下:{"type": "function", "function": {"name": "get_weather", "description": "查询指定城市的实时天气", "parameters": {"type": "object", "properties": {"city": {"type": "string", "description": "城市名称,如杭州、北京"}, "unit": {"type": "string", "enum": ["celsius", "fahrenheit"], "default": "celsius"}}, "required": ["city"]}}。

3、确保tools列表中每个工具的name字段为纯ASCII字符串,不含空格或特殊符号,且与后续实际调用的函数名完全一致。

三、调用Generation接口并传入tools与tool_choice参数

启用函数调用需在SDK调用中显式注入tools参数,并设置tool_choice策略,否则模型默认忽略工具定义,仅返回自然语言响应。此步骤决定模型是否进入工具决策流程。

1、导入dashscope模块并初始化:from dashscope import Generation。

Aliyun Qwen Tts Voice Clone
Aliyun Qwen Tts Voice Clone

用于在使用阿里云 Model Studio Qwen TTS VC 模型进行声音克隆,根据样例音频创建克隆声音并合成文本。

下载

2、构造调用语句,必须同时包含tools和tool_choice参数:response = Generation.call(model="qwen-max-20240919", prompt="杭州现在温度多少度?", tools=tools, tool_choice="auto")。

3、tool_choice可选值为"auto"(由模型自主判断)、"none"(禁用工具)或指定工具名字符串(强制调用某工具),生产环境推荐使用"auto"。

四、解析模型响应并执行对应工具函数

模型返回内容可能为纯文本响应,也可能为包含function_call字段的结构化指令。需先判断响应类型,再决定是否触发本地工具调用,避免误执行或跳过关键动作。

1、检查response.output.choices[0].message.tool_calls是否存在且非空,若存在则进入工具调用分支。

2、遍历tool_calls列表,提取每个元素的function.name与function.arguments字段。

3、根据name字段映射到预定义的Python函数,使用json.loads解析arguments字符串后传入调用,例如:result = get_weather(**json.loads(tool_call.function.arguments))。

五、将工具执行结果注入上下文并发起第二轮调用

工具返回原始数据后不能直接呈现给用户,需将其作为新的消息角色“tool”插入历史对话,再发起一次模型调用,由模型融合工具结果生成自然语言回复。此为完成闭环的关键步骤。

1、构造新消息列表,包含原始user消息、模型返回的tool_calls消息、以及新增的tool消息:{"role": "tool", "content": json.dumps(result), "tool_call_id": tool_call.id}。

2、将该完整消息列表传入Generation.call的input.messages参数,再次调用同一模型。

3、第二轮响应的output.text即为最终面向用户的自然语言答案,例如:“杭州当前气温为26摄氏度,晴朗无云。”

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

千问 qwen 通义千问

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
Kratos框架Protobuf接口定义与代码生成合集
Kratos框架Protobuf接口定义与代码生成合集

本专题讲解Kratos框架接口定义体系,涵盖proto编写规范、proto add/client/server生成命令、http注解路由、validate校验、OpenAPI文档生成、跨服务proto复用与兼容性设计。

2026.10.10

0

15

C++虚函数怎么定义和调用
C++虚函数怎么定义和调用

C++虚函数是实现运行时多态的重要机制。本专题从virtual关键字的基本用法入手,介绍基类与派生类之间的函数重写、基类指针调用派生类方法,以及动态绑定的执行过程,帮助初学者掌握虚函数的核心语法。

2026.10.10

0

26

C++类与对象的封装方法教程
C++类与对象的封装方法教程

C++封装是面向对象编程的核心特性之一,通过类将数据与操作数据的函数组织在一起,并利用访问权限控制外部访问。本专题介绍类的定义、成员变量、成员函数以及public、private和protected的使用方法,帮助初学者掌握封装的基本原理。

2026.10.10

0

32

C++构造函数定义与调用方法
C++构造函数定义与调用方法

C++构造函数用于初始化类对象,是面向对象编程的重要基础。本专题从构造函数的定义、声明和调用入手,介绍默认构造函数、带参数构造函数、拷贝构造函数及成员初始化列表,帮助初学者掌握对象创建与初始化的基本方法。

2026.10.10

0

16

Kratos框架零基础入门教程
Kratos框架零基础入门教程

本专题整理Kratos框架入门内容,涵盖Go环境准备、kratos CLI安装升级、new命令创建项目、目录结构分层说明、服务启动与双协议端口、依赖下载报错排查,帮助开发者快速跑通第一个Kratos框架微服务应用。

2026.10.10

0

15

C++条件判断语句怎么写
C++条件判断语句怎么写

C++条件判断是控制程序执行流程的重要基础。本专题介绍if、if-else、else if和switch等常见分支语句,结合条件表达式、比较运算符与代码示例,帮助初学者掌握不同场景下的判断逻辑。

2026.10.10

0

13

C++变量怎么声明和赋值
C++变量怎么声明和赋值

C++变量是编写程序和存储数据的基础。本专题围绕变量声明、定义、初始化、赋值和类型选择等内容展开,帮助初学者理解不同变量的用法,并掌握在实际代码中定义和使用变量的方法。

2026.10.10

0

20

C++运算符基础入门
C++运算符基础入门

本专题详细讲解了C++运算符的类型、语法与使用方法,涵盖算术运算符、关系运算符、逻辑运算符、位运算符、赋值运算符、条件运算符及其他特殊运算符,并通过代码示例解析优先级与结合性。

2026.10.09

0

11

PixPix官网入口合集
PixPix官网入口合集

本专题汇总了PixPix官网在线使用入口及平台功能详解,涵盖文生图、图生图、AI图片编辑、AI视频创作等核心能力,并整理了AI爆款图片复刻、商品套图、详情页生成、视频变清晰与去水印等电商专项工具的使用教程。同时收录了PixPix MCP接入Codex、Claude Code等主流Agent的操作指南,助您一站式完成AI图片与视频创作。

2026.10.09

0

11

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
通义千问基本用法
通义千问基本用法

共1课时 | 231人学习

通义千问的提示词工程
通义千问的提示词工程

共1课时 | 267人学习