调用阿里云通义千问API,只需在阿里云DashScope控制台开通服务并获取API Key,然后向https://dashscope.aliyuncs.com/compatible-mode/v1/chat/completions发送一个包含模型名称和messages数组的HTTP POST请求即可。
开通服务与获取API Key
使用通义千问API之前,需要先在阿里云平台完成开通与密钥获取,具体步骤如下:

注册并登录阿里云账号,完成实名认证。
进入阿里云DashScope控制台,网址为
https://dashscope.console.aliyun.com/。在控制台中开通通义千问模型服务,开通时通常需要同意相关服务协议。
进入“API-KEY管理”页面,点击“创建API Key”。
为密钥设置名称,创建后系统会生成一串以
sk-开头的密钥。立即复制并妥善保存API Key,该密钥只显示一次,后续无法在控制台再次查看。
API Key是调用接口的唯一身份凭证,不能泄露,建议将密钥保存在环境变量或安全的配置文件中,不要硬编码在客户端代码或公开仓库中。
接口地址与认证方式
阿里云通义千问目前提供两套HTTP接口风格,一套是DashScope原生接口,另一套是兼容OpenAI的接口,推荐使用兼容OpenAI的接口,原因在于它可以复用大量已有的OpenAI生态工具和SDK。
兼容OpenAI的对话接口地址为:
https://dashscope.aliyuncs.com/compatible-mode/v1/chat/completions
原生DashScope对话接口地址为:
https://dashscope.aliyuncs.com/api/v1/services/aigc/text-generation/generation
无论使用哪套接口,都需要在HTTP请求头中携带认证信息,兼容OpenAI接口的认证方式如下:
Authorization:Bearer你的APIKey Content-Type:application/json
请求必须使用HTTPS协议,不能使用HTTP明文传输。
请求参数说明
以兼容OpenAI接口为例,请求体是一个JSON对象,核心字段如下。
model
指定要调用的通义千问模型,常用模型包括:
qwen-turbo:速度快、成本低,适合简单任务。qwen-plus:效果、速度与成本均衡,适合大多数日常任务。qwen-max:能力最强,适合复杂推理和高要求任务。qwen-long:支持超长上下文,适合长文档处理。
模型名称需要与实际开通的模型一致,否则会返回模型不存在错误。
messages
messages是一个数组,表示对话上下文,每个元素是一个对象,包含两个字段:
role:角色,可选值为system、user、assistant。content,为字符串。
system角色用于设定助手的行为和身份,你是一个专业的法律助手”。user表示用户输入,assistant表示模型的历史回复,多轮对话时,需要将前几轮的user和assistant消息按顺序放入数组中。
temperature
控制生成结果的随机性,取值范围通常为0到2,值越低,输出越确定;值越高,输出越发散,默认值一般为0.7到1.0,需要稳定、可复现的结果时,可将该值设为0。
top_p
核采样参数,取值范围为0到1,模型会从累计概率达到top_p的候选词中采样,该参数与temperature建议不要同时大幅调整。
max_tokens
限制模型生成的最大token数量,token可以粗略理解为文字片段,一个汉字通常对应1到2个token,设置过小会导致回复被截断,设置过大可能增加调用成本。
stream
是否使用流式输出,设为true时,模型会以SSE(Server-Sent Events)方式逐段返回内容,适合需要实时显示回复的场景,设为false时,接口会等待完整结果生成后一次性返回。
使用curl调用
以下是一个使用curl调用通义千问的完整示例:
curl-XPOSThttps://dashscope.aliyuncs.com/compatible-mode/v1/chat/completions\
-H"Authorization:Bearer你的APIKey"\
-H"Content-Type:application/json"\
-d'{
"model":"qwen-plus",
"messages":[
{"role":"system","content":"你是一个简洁的助手"},
{"role":"user","content":"请用一句话介绍杭州"}
],
"temperature":0.7,
"max_tokens":200
}'响应是一个JSON对象,其中choices数组包含模型输出,第一个元素的message.content字段就是模型回复的文本。
使用Python SDK调用
阿里云官方提供了DashScope Python SDK,安装命令为:
pipinstalldashscope
使用SDK调用的示例代码如下:
importdashscope
fromdashscopeimportGeneration
dashscope.api_key="你的APIKey"
response=Generation.call(
model="qwen-plus",
messages=[
{"role":"system","content":"你是一个简洁的助手"},
{"role":"user","content":"请用一句话介绍杭州"}
],
temperature=0.7,
max_tokens=200
)
ifresponse.status_code==200:
print(response.output.text)
else:
print(response.code,response.message)response.output.text是模型生成的完整文本,如果请求失败,response.status_code不为200,可以从response.code和response.message查看错误信息。
使用OpenAI SDK调用
由于兼容OpenAI接口,可以直接使用OpenAI官方SDK调用通义千问,安装命令为:
pipinstallopenai
示例代码如下:
fromopenaiimportOpenAI
client=OpenAI(
api_key="你的APIKey",
base_url="https://dashscope.aliyuncs.com/compatible-mode/v1"
)
completion=client.chat.completions.create(
model="qwen-plus",
messages=[
{"role":"system","content":"你是一个简洁的助手"},
{"role":"user","content":"请用一句话介绍杭州"}
],
temperature=0.7,
max_tokens=200
)
print(completion.choices[0].message.content)这种方式适合已经使用OpenAI SDK的项目快速迁移到通义千问。
流式输出调用
在需要实时显示回复、提升用户体验的场景中,可以使用流式输出,Python示例代码如下:
fromopenaiimportOpenAI
client=OpenAI(
api_key="你的APIKey",
base_url="https://dashscope.aliyuncs.com/compatible-mode/v1"
)
stream=client.chat.completions.create(
model="qwen-plus",
messages=[
{"role":"user","content":"写一首关于春天的短诗"}
],
stream=True
)
forchunkinstream:
ifchunk.choices[0].delta.content:
print(chunk.choices[0].delta.content,end="")流式输出时,每个chunk的delta.content是增量文本,需要自行拼接,当流结束时,会收到一个finish_reason为stop的片段。
多轮对话
多轮对话的关键在于维护messages数组,每一轮请求都要把之前的用户输入和模型回复一并发送,示例:
messages=[
{"role":"system","content":"你是一个客服助手"}
]
whileTrue:
user_input=input("用户:")
messages.append({"role":"user","content":user_input})
completion=client.chat.completions.create(
model="qwen-plus",
messages=messages
)
answer=completion.choices[0].message.content
print("助手:",answer)
messages.append({"role":"assistant","content":answer})这样模型就能记住上下文,做出连贯回复。
工具调用与函数调用
通义千问支持函数调用,允许模型根据用户输入返回结构化的工具调用请求,请求中需要传入tools字段,定义可用函数,模型返回的tool_calls中包含函数名和参数,开发者执行函数后再将结果作为tool角色消息追加到messages中继续对话。
这一功能适合构建Agent、查询外部数据、调用业务接口等复杂应用。
错误处理与常见问题
调用过程中可能遇到以下常见错误:
401认证失败:API Key错误、已删除或未正确放入请求头。
400参数错误:请求体格式不正确,或
model、messages等参数不符合要求。429限流:请求频率超过套餐或免费额度限制,需要降低频率或升级套餐。
500服务错误:服务端暂时异常,可以重试。
建议在代码中对非200状态码进行统一捕获,记录错误码和错误信息,并根据错误类型决定是否重试,重试时可以采用指数退避策略,避免短时间内大量请求。
十一、计费与并发限制
通义千问API按token使用量计费,输入和输出分别计算,不同模型单价不同,qwen-turbo价格最低,qwen-max价格最高,超出免费额度后,需要购买资源包或按量付费。
每个模型还有并发数限制,例如同一时刻最多允许一定数量的请求,高并发场景需要提前评估并申请提高配额,调用前可以在控制台查看当前模型的免费额度、计费规则和并发限制。
通过合理选择模型、设置max_tokens和缓存常见回复,可以有效控制API调用成本。