使用 OpenAI SDK 调用通义千问(Qwen)模型:从简单对话到结构化生成
使用 OpenAI SDK 调用通义千问(Qwen)模型:从简单对话到结构化生成的完整实践
一、前言
随着大模型生态的开放,越来越多的模型开始兼容 OpenAI API 格式,这意味着你可以直接使用相同的 SDK 与调用方式,在不同的服务商之间快速切换。
通义千问(Qwen)系列模型 就是其中的典型代表,阿里云的 DashScope 平台 提供了与 OpenAI 完全兼容的接口。
本文将通过三段完整示例代码,带你从最基础的“问答调用”,逐步深入到“参数调优”与“结构化 JSON 输出”的进阶使用。
二、基础对话调用示例
✅ 代码示例一
import os
from openai import OpenAIclient = OpenAI(# 新加坡和北京地域的 API Key 不同。详见:https://help.aliyun.com/zh/model-studio/get-api-keyapi_key="sk-***",# base_url 对应北京地域;若使用新加坡地域请改为 dashscope-intl.aliyuncs.combase_url="https://dashscope.aliyuncs.com/compatible-mode/v1",
)completion = client.chat.completions.create(model="qwen-plus",messages=[{'role': 'system', 'content': 'You are a helpful assistant.'},{'role': 'user', 'content': '你是谁?'}]
)print(completion.choices[0].message.content)
🧠 代码解析
-
初始化客户端
使用OpenAI类直接连接通义千问的兼容模式接口。
参数:-
api_key:你的阿里云 DashScope 平台密钥。 -
base_url:指定 API 的地域节点。
-
-
创建对话请求
-
model="qwen-plus":调用通义千问的 Plus 模型。 -
messages:设置对话上下文,包括系统角色和用户输入。
-
-
输出结果
最后一行打印模型返回的回答。
📤 运行效果
输出类似:
我是通义千问,一款由阿里云开发的大语言模型,可以帮助你完成多种任务。
这说明模型调用成功,并以自然语言进行了回应。
三、参数调优与生成控制
✅ 代码示例二
from openai import OpenAIclient = OpenAI(api_key="sk-***",base_url="https://dashscope.aliyuncs.com/compatible-mode/v1"
)# 第一次请求:生成详细的清单
response = client.chat.completions.create(model="qwen-plus",messages=[{ "role": "user", "content": "生成一个文具清单,至少包含20种文具,每两个文具之间用逗号隔开" }],max_tokens=300,frequency_penalty=-1.9,temperature=0.1
)
print(response.choices[0].message.content)# 第二次请求:生成更简短、更随机的清单
response = client.chat.completions.create(model="qwen-plus",messages=[{ "role": "user", "content": "生成一个文具清单,至少包含20种文具,每两个文具之间用逗号隔开" }],max_tokens=30,frequency_penalty=1.9,temperature=1.9
)
print(response.choices[0].message.content)
🧩 参数说明
| 参数 | 含义 | 调整效果 |
|---|---|---|
max_tokens | 控制输出字数上限 | 越大输出越长 |
temperature | 控制随机性 | 越高越有创意,越低越稳定 |
frequency_penalty | 控制重复性 | 负值增加重复,正值减少重复 |
⚙️ 实验结果对比
| 调用场景 | 参数设置 | 输出效果 |
|---|---|---|
| 第一次调用 | temperature=0.1、frequency_penalty=-1.9 | 输出长而完整的文具清单(内容稳定) |
| 第二次调用 | temperature=1.9、frequency_penalty=1.9 | 输出短小且更具随机性 |
这种参数调节方式非常适合在生成内容任务中平衡“创造性”与“稳定性”。
四、生成结构化 JSON 数据
✅ 代码示例三
from openai import OpenAI
import jsonclient = OpenAI(api_key="sk-***",base_url="https://dashscope.aliyuncs.com/compatible-mode/v1"
)prompt = """
生成一个由三个学生考试分数信息所组成的列表,以JSON格式进行返回。
JSON列表里的每个元素包含以下信息:
student_number、student_name、student_marks、phone。
所有信息都是字符串。
除了JSON之外,不要输出任何额外的文本。
"""response = client.chat.completions.create(model="qwen-plus",messages=[ { "role": "user", "content": prompt } ]
)content = response.choices[0].message.content
print(content)# 转换为 Python 数据结构
result = json.loads(content)
print(result)
🧠 核心思路
在 prompt 中明确要求输出 JSON 格式,并限制“只输出 JSON,不要额外文字”,
这样可以直接解析模型的返回值,实现与程序逻辑的无缝衔接。
📊 示例输出
[{"student_number": "202501","student_name": "李明","student_marks": "89","phone": "13800000001"},{"student_number": "202502","student_name": "王芳","student_marks": "92","phone": "13800000002"},{"student_number": "202503","student_name": "张伟","student_marks": "85","phone": "13800000003"}
]
经过 json.loads() 解析后,你可以直接使用这些数据进行统计、存储或可视化分析。
五、综合实践与应用场景
通过以上三段代码,我们掌握了:
| 类型 | 示例 | 实际应用 |
|---|---|---|
| 基础对话 | 示例一 | 智能客服、问答系统 |
| 参数调优 | 示例二 | 文案生成、创意内容生产 |
| 结构化输出 | 示例三 | 数据接口、表格生成、知识抽取 |
通义千问兼容 OpenAI SDK 的优势:
-
无需更换调用方式,兼容性极强;
-
支持流式输出与多模型切换;
-
适合从 OpenAI API 平滑迁移。
六、总结
这三段代码展示了如何使用 同一套 OpenAI SDK 调用通义千问 Qwen 模型,从简单问答到结构化数据输出的完整流程。
其核心要点包括:
-
API 初始化:
api_key+base_url即可对接; -
messages 构造:控制对话角色和上下文;
-
参数调节:通过
temperature、frequency_penalty等实现风格差异; -
结构化生成:利用
json.loads()实现可编程式结果解析。
这套模式不仅能应用于通义千问,也可拓展到 OpenAI、智谱 AI、Moonshot 等其他兼容 API 的模型中,实现跨平台统一开发。
