通义千问 API详情
重要
通义千问模型API调用需"申请体验"并通过后才可使用,否则API调用将返回错误状态码。
通义千问
通义千问是阿里巴巴达摩院自主研发的超大规模语言模型,能够在用户自然语言输入的基础上,通过自然语言理解和语义分析,理解用户意图,在不同领域、任务内为用户提供服务和帮助。您可以通过提供尽可能清晰详细的指令,来获取更符合您预期的结果。
模型具备的能力包括但不限于:
-
创作文字,如写故事、写公文、写邮件、写剧本、写诗歌等
-
编写代码
-
提供各类语言的翻译服务,如英语、日语、法语、西班牙语等
-
进行文本润色和文本摘要等工作
-
扮演角色进行对话
-
制作图表
通义千问以用户以文本形式输入的指令(prompt)以及不定轮次的对话历史(history)作为输入,返回模型生成的回复作为输出。在这一过程中,文本将被转换为语言模型可以处理的token序列。Token是模型用来表示自然语言文本的基本单位,可以直观的理解为“字”或“词”。对于中文文本来说,1个token通常对应一个汉字;对于英文文本来说,1个token通常对应3至4个字母或1个单词。例如,中文文本“你好,我是通义千问”会被转换成序列['你', '好', ',', '我', '是', '通', '义', '千', '问'],而英文文本"Nice to meet you."则会被转换成['Nice', ' to', ' meet', ' you', '.']。
由于模型调用的计算量与token序列长度相关,输入或输出token数量越多,模型的计算时间越长,我们将根据模型输入和输出的token数量计费。可以从API返回结果的 usage 字段中了解到您每次调用时使用的token数量。
模型概览
模型名 |
模型简介 |
qwen-v1 |
通义千问超大规模语言模型,支持中文英文等不同语言输入。 |
qwen-plus-v1 |
通义千问超大规模语言模型增强版,支持中文英文等不同语言输入。 |
SDK使用
前提条件
-
已开通服务并获得API-KEY:开通DashScope并创建API-KEY。
-
已安装SDK:安装DashScope SDK。
单轮问答
以下示例展示了调用通义千问模型对一个用户指令进行响应的代码。
需要使用您的API-KEY替换示例中的 your-dashscope-api-key ,代码才能正常运行。
Python 示例
# coding=utf-8
# For prerequisites running the following sample, visit https://help.aliyun.com/document_detail/611472.html
import dashscope
from dashscope import Generation
from http import HTTPStatus
import json
dashscope.api_key='your-dashscope-api-key'
response=Generation.call(
model='qwen-v1',
prompt='就当前的海洋污染的情况,写一份限塑的倡议书提纲,需要有理有据地号召大家克制地使用塑料制品'
)
if response.status_code==HTTPStatus.OK:
print(json.dumps(response.output, indent=4, ensure_ascii=False))
else:
print('Code: %d, status: %s, message: %s' % (response.status_code, response.code, response.message))
Java 示例
import com.alibaba.dashscope.aigc.conversation.Conversation;
import com.alibaba.dashscope.aigc.conversation.ConversationResult;
import com.alibaba.dashscope.aigc.conversation.qwen.QWenConversationParam;
public class Main {
public static void main(String[] args) {
Conversation conversation = new Conversation();
QWenConversationParam param =
QWenConversationParam.builder()
.model(QWenConversationParam.QWEN_V1)
.prompt("就当前的海洋污染的情况,写一份限塑的倡议书提纲,需要有理有据地号召大家克制地使用塑料制品")
.apiKey("<your-dashscope-api-key>")
.build();
// 如果正常返回即可以直接使用
// 否则会抛出ApiException异常,检查e.getStatus()即可拿到错误信息
ConversationResult result = conversation.call(param);
System.out.println(result.getMessage().getPayload());
System.exit(0);
}
}
多轮会话
您也可以通过history参数传入对话历史,已达到与模型进行多轮交互的目的。
对话历史是以列表的形式,按时间正序组织的。列表中的一个元素为字典形式记录的人机交互的一轮对话记录,用户的输入用“user”表示,模型生成的输出用“bot”。
Python 示例
# coding=utf-8
# For prerequisites running the following sample, visit https://help.aliyun.com/document_detail/611472.html
import dashscope
from dashscope import Generation
from http import HTTPStatus
import json
dashscope.api_key='your-dashscope-api-key'
response=Generation.call(
model='qwen-v1',
prompt='能否缩短一些,只讲三点',
history=[
{
"user": "就当前的海洋污染的情况,写一份限塑的倡议书提纲,需要有理有据地号召大家克制地使用塑料制品",
"bot": "好的,以下是一份限塑的倡议书提纲,以理有据地号召大家克制地使用塑料制品:\n\n一、限塑背景\n塑料污染已成为全球环境问题之一,海洋污染更是其中严重的一环。塑料制品 的过量使用已经对海洋生态环境造成了严重破坏,对海洋生物的生存和繁殖造成了严重影响,威胁到了人类的生存环境和健康。因此,我们需要采取行动来限制塑料的使用,保护我们的海洋家园。\n\n二、塑料污染的危害\n1. 对海洋生态环境的破坏:塑料垃圾污染海洋,导致海洋生物生存环境恶化,尤其是对海鸟等候鸟的危害极大。\n2. 对海洋资源的影响:塑料垃圾会阻碍海洋生态系统中的光合作用和营养物质的循环,对海洋生物的生长和繁殖产生负面影响。\n3. 对人体健康的威胁:塑料垃圾会对人类的健康产生长期影响,例如通过食物链传递给人类。\n\n三、限塑的建议\n1. 减少使用塑料制品:除了餐具和厨具等必须使用塑料制品外,其他塑料制品的使用量应该尽量减少。\n2. 减少一次性塑料制品的使用:一次性塑料制品对环境造成的危害很大,应该尽量减少使 用。\n3. 购买可重复使用的商品:购买可重复使用的商品,例如纸袋和水瓶,以减少对塑料的需求。\n\n四、限塑的实践方式\n1. 节约使用塑料制品:可以选择自备餐具、带布袋子购物等方式减少塑料制品的使用。\n2. 推广环保理念:可以通过社交媒体和宣传资料等途径,宣传环保理念,鼓励更多人加入到限塑行动中来。\n\n五、总结\n限塑行动是我们保护海洋生态环境和生物多样性 的重要举措。让我们一起行动起来,从自己做起,克制地使用塑料制品,共同保护我们的地球家园。"
}
]
)
if response.status_code==HTTPStatus.OK:
print(json.dumps(response.output, indent=4, ensure_ascii=False))
else:
print('Code: %d, status: %s, message: %s' % (response.status_code, response.code, response.message))
Java 示例
import com.alibaba.dashscope.aigc.conversation.Conversation;
import com.alibaba.dashscope.aigc.conversation.ConversationResult;
import com.alibaba.dashscope.aigc.conversation.qwen.QWenConversationParam;
public class Main {
public static void main(String[] args) {
Conversation conversation = new Conversation();
QWenConversationParam param =
QWenConversationParam.builder()
.model(QWenConversationParam.QWEN_V1)
.prompt("就当前的海洋污染的情况,写一份限塑的倡议书提纲,需要有理有据地号召大家克制地使用塑料制品")
.apiKey("<your-dashscope-api-key>")
.build();
ConversationResult result = conversation.call(param);
System.out.println(result.getMessage().getPayload());
param.setPrompt("能否缩短一些,只讲三点");
// 使用同一个Conversation对象无需手动传递history
// 也可以传递history参数,这样就不会使用内部记录的history
result = conversation.call(param);
System.out.println(result.getMessage().getPayload());
System.exit(0);
}
}
流式输出
Python 示例
# coding=utf-8
# For prerequisites running the following sample, visit https://help.aliyun.com/document_detail/611472.html
import dashscope
from dashscope import Generation
from http import HTTPStatus
import json
dashscope.api_key='your-dashscope-api-key'
responses=Generation.call(
model='qwen-v1',
prompt='就当前的海洋污染的情况,写一份限塑的倡议书提纲,需要有理有据地号召大家克制地使用塑料制品',
stream=True)
for response in responses:
if response.status_code==HTTPStatus.OK:
print(json.dumps(response.output, indent=4, ensure_ascii=False))
else:
print('Code: %d, status: %s, message: %s' % (response.status_code, response.code, response.message))
Java 示例
import com.alibaba.dashscope.aigc.conversation.Conversation;
import com.alibaba.dashscope.aigc.conversation.ConversationResult;
import com.alibaba.dashscope.aigc.conversation.qwen.QWenConversationParam;
import com.alibaba.dashscope.common.Protocol;
import com.alibaba.dashscope.common.StreamingMode;
import com.alibaba.dashscope.utils.JsonUtils;
import io.reactivex.Flowable;
public class Main {
public static void main(String[] args) {
Conversation conversation = new Conversation(Protocol.WEBSOCKET.getValue());
QWenConversationParam param =
QWenConversationParam.builder()
.model(QWenConversationParam.QWEN_V1)
.prompt("就当前的海洋污染的情况,写一份限塑的倡议书提纲,需要有理有据地号召大家克制地使用塑料制品")
.mode(StreamingMode.OUT)
.apiKey("<your-dashscope-api-key>")
.build();
Flowable<ConversationResult> flowable = conversation.streamCall(param);
// 如果正常返回即可以直接使用
// 否则blockingForEach会抛出ApiException异常,检查e.getStatus()即可拿到错误信息
flowable.blockingForEach(msg -> System.out.println(JsonUtils.toJson(msg.getMessage().getPayload())));
System.exit(0);
}
}
-
参数配置
参数 |
类型 |
默认值 |
说明 |
model |
string |
- |
指定用于对话的通义千问模型名,目前仅支持 qwen-v1 。 |
prompt |
string |
- |
用户当前输入的期望模型执行指令。 |
history (可选) |
list[dict] |
[] |
用户与模型的对话历史,list中的每个元素是形式为{"user":"用户输入","bot":"模型输出"}的一轮对话,多轮对话按时间正序排列。 |
top_p (可选) |
float |
0.8 |
生成过程中核采样方法概率阈值,例如,取值为0.8时,仅保留概率加起来大于等于0.8的最可能token的最小集合作为候选集。取值范围为(0,1.0),取值越大,生成的随机性越高;取值越低,生成的确定性越高。 |
stream (可选) |
bool |
False |
是否使用流式输出。当以stream模式输出结果时,接口返回结果为generator,需要通过迭代获取结果,每个输出为当前生成的整个序列,最后一次输出为最终全部生成结果。 |
top_k |
float |
100.0 |
生成时,采样候选集的大小。例如,取值为50时,仅将单次生成中得分最高的50个token组成随机采样的候选集。取值越大,生成的随机性越高;取值越小,生成的确定性越高。注意:如果top_k的值大于100,top_k将采用默认值100 |
enable_search |
bool |
False |
生成时,是否参考夸克搜索的结果。注意:打开搜索并不意味着一定会使用搜索结果;如果打开搜索,模型会将搜索结果作为prompt,进而“自行判断”是否生成结合搜索结果的文本,默认为false |
seed |
int |
1234 |
生成时,随机数的种子,用于控制模型生成的随机性。如果使用相同的种子,每次运行生成的结果都将相同;当需要复现模型的生成结果时,可以使用相同的种子。seed参数支持无符号64位整数类型。默认值 1234 |
返回结果
-
返回结果示例
{
"status_code": 200,
"request_id": "39a41abe-1bed-430a-b9b5-277130c7eb82",
"code": "",
"message": "",
"output": {
"text": "好的,以下是一份限塑的倡议书提纲:\n\nI. 引言\n\n- 阐明海洋污染的严重性,并介绍倡议书的目的和主要内容\n\nII. 海洋塑料污染的严重性\n\n- 详细描述海洋中塑料垃圾对海洋生态环境的危害,如何对海洋生态环境造成不可逆转的损害\n\n- 引用相关的研究和数据,让读者更加深入地了解海洋塑料污染的严重性\n\nIII. 推广限塑行动\n\n- 介绍限塑行动的必 要性和重要性,以及塑料制品的优点和缺点\n\n- 分析目前市场上可以使用的替代品,并向读者推荐可以减少使用塑料制品的替代品\n\n- 鼓励读者参与限塑行动,从小做起,做到减少塑料垃圾的贡献\n\nIV. 号召更多人加入限塑行动\n\n- 鼓励读者与身边的朋友和家人分享限塑行动的相关知识,让更多的人了解限塑行动的必要性\n\n- 号召更多企业加入限塑行动,为海洋环保做出贡献\n\n- 提供更多资源和渠道,让读者更加深入地了解限塑行动,并积极参与到这个行动中\n\nV. 结语\n\n- 总结限塑行动的必要性和重要性,并向读者表示感谢和祝福\n\n- 呼吁更多的人加入限塑 行动,为保护海洋环境做出自己的贡献\n\n希望这份限塑的倡议书提纲能够帮助您号召更多的人关注海洋环境保护,为建设美丽的海洋家园做出自己的贡献。",
"finish_reason": "stop"
},
"usage": {
"input_tokens": 633,
"output_tokens": 491
}
}
- 返回参数说明
返回参数 |
类型 |
说明 |
status_code |
int |
200(HTTPStatus.OK)表示请求成功,否则表示请求失败,可以通过code获取错误码,通过message字段获取错误详细信息。 |
request_Id |
string |
系统生成的标志本次调用的id。 |
code |
string |
表示请求失败,表示错误码,成功忽略。 |
message |
string |
失败,表示失败详细信息,成功忽略。 |
output |
dict |
调用结果信息,对于千问模型,包含输出text。 |
usage |
dict |
计量信息,表示本次请求计量数据。 |
text |
string |
模型生成回复。 |
finish_reason |
string |
有三种情况:正在生成时为null,生成结束时如果由于停止token导致则为stop,生成结束时如果因为生成长度过长导致则为length。 |
input_tokens |
int |
用户输入文本转换成Token后的长度。 |
output_tokens |
int |
模型生成回复转换为Token后的长度。 |
HTTP调用接口
功能描述
通义千问模型同时支持 HTTP 调用来完成客户的响应,目前提供普通 HTTP 和 HTTP SSE 两种协议,您可根据自己的需求自行选择。
前提条件
-
已开通服务并获得API-KEY:开通DashScope并创建API-KEY。
提交接口调用
POST https://dashscope.aliyuncs.com/api/v1/services/aigc/text-generation/generation
入参描述
传参方式 |
字段 |
类型 |
必选 |
描述 |
示例值 |
Url Path |
version-id |
String |
是 |
API 版本,固定取值v1 |
v1 |
task-group |
String |
是 |
任务组,固定取值aigc |
aigc |
|
task |
String |
是 |
推理任务名称,固定取值text-generation |
text-generation |
|
function-call |
String |
是 |
调用模型特定功能,固定取值generation |
generation |
|
Header |
Content-Type |
String |
是 |
请求类型:application/json 或者text/event-stream(开启 SSE 响应) |
application/json |
Authorization |
String |
是 |
API-Key,例如:Bearer d1**2a |
Bearer d1**2a |
|
X-DashScope-SSE |
String |
否 |
跟Accept: text/event-stream 二选一即可启用SSE响应 |
enable |
|
X-DashScope-DataInspection |
String |
否 |
接口输入和输出的信息是否通过绿网过滤,默认不调用绿网。 |
enable |
|
Body |
model |
String |
是 |
指明需要调用的模型,目前可选 qwen-v1 和 qwen-plus-v1 |
qwen-v1 |
input.prompt |
String |
是 |
用户当前输入的期望模型执行指令,支持中英文。 qwen-v1 prompt字段支持 1.5k Tokens 长度; qwen-plus-v1 prompt字段支持 6.5k Tokens 长度 |
哪个公园距离我更近 |
|
input.history |
List |
否 |
用户与模型的对话历史,list中的每个元素是形式为{"user":"用户输入","bot":"模型输出"}的一轮对话,多轮对话按时间正序排列。 |
"history": [ { "user":"今天天气好吗?", "bot":"今天天气不错,要出去玩玩嘛?" }, { "user":"那你有什么地方推荐?", "bot":"我建议你去公园,春天来了,花朵开了,很美丽。" } ] |
|
parameters.top_p |
Float |
否 |
生成时,核采样方法的概率阈值。例如,取值为0.8时,仅保留累计概率之和大于等于0.8的概率分布中的token,作为随机采样的候选集。取值范围为(0,1.0),取值越大,生成的随机性越高;取值越低,生成的随机性越低。默认值 0.8。注意,取值不要大于等于1 |
0.8 |
|
parameters.top_k |
Integer |
否 |
生成时,采样候选集的大小。例如,取值为50时,仅将单次生成中得分最高的50个token组成随机采样的候选集。取值越大,生成的随机性越高;取值越小,生成的确定性越高。注意:如果top_k的值大于100,top_k将采用默认值100 |
50 |
|
parameters.seed |
Integer |
否 |
生成时,随机数的种子,用于控制模型生成的随机性。如果使用相同的种子,每次运行生成的结果都将相同;当需要复现模型的生成结果时,可以使用相同的种子。seed参数支持无符号64位整数类型。默认值 1234 |
65535 |
|
parameters.enable_search |
Bool |
否 |
生成时,是否参考夸克搜索的结果。注意:打开搜索并不意味着一定会使用搜索结果;如果打开搜索,模型会将搜索结果作为prompt,进而“自行判断”是否生成结合搜索结果的文本,默认为false |
true 或者 false |
出参描述
字段 |
类型 |
描述 |
示例值 |
output.text |
String |
本次请求的算法输出内容。 |
我建议你去颐和园 |
output.finish_reason |
String |
有三种情况:正在生成时为null,生成结束时如果由于停止token导致则为stop,生成结束时如果因为生成长度过长导致则为length。 |
stop |
usage.output_tokens |
Integer |
本次请求算法输出内容的 token 数目。 |
380 |
usage.input_tokens |
Integer |
本次请求输入内容的 token 数目。在打开了搜索的情况下,输入的 token 数目因为还需要添加搜索相关内容支持,所以会超出客户在请求中的输入。 |
633 |
request_id |
String |
本次请求的系统唯一码 |
7574ee8f-38a3-4b1e-9280-11c33ab46e51 |
请求示例(SSE 关闭)
以下示例展示通过CURL命令来调用通义千问模型的脚本(SSE 关闭)。
需要使用您的API-KEY替换示例中的 your-dashscope-api-key ,代码才能正常运行。
curl --location 'https://dashscope.aliyuncs.com/api/v1/services/aigc/text-generation/generation' \
--header 'Authorization: Bearer <your-dashscope-api-key>' \
--header 'Content-Type: application/json' \
--data '{
"model": "qwen-v1",
"input":{
"prompt":"哪个公园距离我最近",
"history":[
{
"user":"今天天气好吗?",
"bot":"今天天气不错,要出去玩玩嘛?"
},
{
"user":"那你有什么地方推荐?",
"bot":"我建议你去公园,春天来了,花朵开了,很美丽。"
}
]
},
"parameters": {
}
}'
响应示例(SSE关闭)
{
"output":{
"text":"如果你在中国,我推荐你去北京的颐和园 ... ... 适合散步和欣赏景色。",
"finish_reason":"stop"
},
"usage":{
"output_tokens":380,
"input_tokens":633
},
"request_id":"d89c06fb-46a1-47b6-acb9-bfb17f814969"
}
请求示例(SSE开启)
以下示例展示通过CURL命令来调用通义千问模型的脚本(SSE 开启)。
说明
需要使用您的API-KEY替换示例中的 your-dashscope-api-key ,代码才能正常运行。
curl --location 'https://dashscope.aliyuncs.com/api/v1/services/aigc/text-generation/generation' \
--header 'Authorization: Bearer <your-dashscope-api-key>' \
--header 'Content-Type: application/json' \
--header 'X-DashScope-SSE: enable' \
--data '{
"model": "qwen-v1",
"input":{
"prompt":"哪个公园距离我最近",
"history":[
{
"user":"今天天气好吗?",
"bot":"今天天气不错,要出去玩玩嘛?"
},
{
"user":"那你有什么地方推荐?",
"bot":"我建议你去公园,春天来了,花朵开了,很美丽。"
}
]
},
"parameters": {
}
}'
响应示例(SSE开启)
id:1
event:result
data:{"output":{"finish_reason":"null","text":"最近"},"usage":{"output_tokens":3,"input_tokens":85},"request_id":"1117fb64-5dd9-9df0-a5ca-d7ee0e97032d"}
id:2
event:result
data:{"output":{"finish_reason":"null","text":"最近的公园是公园,它"},"usage":{"output_tokens":11,"input_tokens":85},"request_id":"1117fb64-5dd9-9df0-a5ca-d7ee0e97032d"}
... ... ... ...
... ... ... ...
id:8
event:result
data:{"output":{"finish_reason":"stop","text":"最近的公园是公园,它距离你的家大约1.5公里。你可以使用Google地图或者百度地图来查看具体的路线和距离。"},"usage":{"output_tokens":51,"input_tokens":85},"request_id":"1117fb64-5dd9-9df0-a5ca-d7ee0e97032d"}
异常响应示例
在访问请求出错的情况下,输出的结果中会通过 code 和 message 指明出错原因。
{
"code":"InvalidApiKey",
"message":"Invalid API-key provided.",
"request_id":"fb53c4ec-1c12-4fc4-a580-cdb7c3261fc1"
}
状态码说明
DashScope灵积模型服务通用状态码请查阅:返回状态码说明