通义千问VL
支持的领域 / 任务:aigc
通义千问开源视觉理解大模型Qwen-VL于2023年12月1日发布重大更新,不仅大幅提升通用OCR、视觉推理、中文文本理解基础能力,还能处理各种分辨率和规格的图像,甚至能“看图做题”。
升级的Qwen-VL(qwen-vl-plus/qwen-vl-max)模型现有几大特点:
‒ 大幅增强了图片中文字处理能力,能够成为生产力小帮手,提取、整理、总结文字信息不在话下。
‒ 增加可处理分辨率范围,各分辨率和长宽比的图都能处理,大图和长图能看清。
‒ 增强视觉推理和决策能力,适于搭建视觉Agent,让大模型Agent的想象力进一步扩展。
‒ 升级看图做题能力,拍一拍习题图发给Qwen-VL,大模型能帮用户一步步解题。
用户以文本和URL形式的图片形式输入包含多轮对话历史和当前指令的信息序列(messages),到返回模型生成的回复作为输出。在这一过程中,文本将被转换为语言模型可以处理的token序列。Token是模型用来表示自然语言文本的基本单位,可以直观地理解为“字”或“词”。对于中文,一个token对应1.8到2个汉字,例如“通义千问大语言模型”,转换为token后为: ["通", "义", "千", "问", "大", "语言", "模型"], 对于英文,通常一个token对应3到4个字母或者一个单词,例如:Artificial intelligence has made great progress at present. 转换为token后为: ["Art", "ificial", " intelligence", " has", " made", " great", " progress", " at", " present", "."]。图片将被按照图片像素转换为token序列,28*28的像素对应一个token,如果长宽不是28的整数倍向上取到28的整数倍计算,一张图最少4个token,最多1280个token。
由于模型调用的计算量与token序列长度相关,输入或输出token数量越多,模型的计算时间越长,我们将根据模型输入和输出的token数量计费。可以从API返回结果的 usage 字段中了解到您每次调用时使用的token数量。
对于输入的图片有以下限制:
图片文件大小不超过10MB
图片总的像素数不超过 1048576,这相当于一张长宽均为 1024 的图片总像素数
图片支持的格式:
图片格式 | Content Type | 文件扩展名 |
BMP | image/bmp | .bmp |
DIB | image/bmp | .dib |
ICNS | image/icns | .icns |
ICO | image/x-icon | .ico |
JPEG | image/jpeg | .jfif, .jpe, .jpeg, .jpg |
JPEG2000 | image/jp2 | .j2c, .j2k, .jp2, .jpc, .jpf, .jpx |
PNG | image/png | .apng, .png |
SGI | image/sgi | .bw, .rgb, .rgba, .sgi |
TIFF | image/tiff | .tif, .tiff |
WEBP | image/webp | .webp |
VL 模型目前不推荐定制 system role。
模型概览
模型名 | 模型简介 |
qwen-vl-plus | 通义千问大规模视觉语言模型增强版。大幅提升细节识别能力和文字识别能力,支持超百万像素分辨率和任意长宽比规格的图像。在广泛的视觉任务上提供卓越的性能。 |
qwen-vl-max | 通义千问超大规模视觉语言模型。相比增强版,再次提升视觉推理能力和指令遵循能力,提供更高的视觉感知和认知水平。在更多复杂任务上提供最佳的性能。 |
SDK使用
前提条件
已开通服务并获得API-KEY:开通DashScope并创建API-KEY。
已安装最新版SDK:安装DashScope SDK。
问答示例
以下示例展示了调用通义千问VL模型对用户指令进行响应的代码。
需要使用您的API-KEY替换示例中的 YOUR_DASHSCOPE_API_KEY,代码才能正常运行。
API-KEY设置
我们推荐您将API-KEY配置到环境变量中以降低API-KEY的泄漏风险,详情可参考通过环境变量配置API-KEY。您也可以在代码中配置API-KEY,但是泄漏风险会提高。
简单示例
from http import HTTPStatus
import dashscope
def simple_multimodal_conversation_call():
messages = [
{
"role": "user",
"content": [
{"image": "https://dashscope.oss-cn-beijing.aliyuncs.com/images/dog_and_girl.jpeg"},
{"text": "这是什么?"}
]
}
]
response = dashscope.MultiModalConversation.call(model='qwen-vl-plus',
messages=messages)
if response.status_code == HTTPStatus.OK:
print(response)
else:
print(response.code) # 错误码
print(response.message) # 错误信息
if __name__ == '__main__':
simple_multimodal_conversation_call()
// Copyright (c) Alibaba, Inc. and its affiliates.
import java.util.Arrays;
import java.util.Collections;
import com.alibaba.dashscope.aigc.multimodalconversation.MultiModalConversation;
import com.alibaba.dashscope.aigc.multimodalconversation.MultiModalConversationParam;
import com.alibaba.dashscope.aigc.multimodalconversation.MultiModalConversationResult;
import com.alibaba.dashscope.common.MultiModalMessage;
import com.alibaba.dashscope.common.Role;
import com.alibaba.dashscope.exception.ApiException;
import com.alibaba.dashscope.exception.NoApiKeyException;
import com.alibaba.dashscope.exception.UploadFileException;
public class Main {
public static void simpleMultiModalConversationCall()
throws ApiException, NoApiKeyException, UploadFileException {
MultiModalConversation conv = new MultiModalConversation();
MultiModalMessage userMessage = MultiModalMessage.builder().role(Role.USER.getValue())
.content(Arrays.asList(Collections.singletonMap("image", "https://dashscope.oss-cn-beijing.aliyuncs.com/images/dog_and_girl.jpeg"),
Collections.singletonMap("text", "这是什么?"))).build();
MultiModalConversationParam param = MultiModalConversationParam.builder()
.model(MultiModalConversation.Models.QWEN_VL_PLUS)
.message(userMessage)
.build();
MultiModalConversationResult result = conv.call(param);
System.out.println(result);
}
public static void main(String[] args) {
try {
simpleMultiModalConversationCall();
} catch (ApiException | NoApiKeyException | UploadFileException e) {
System.out.println(e.getMessage());
}
System.exit(0);
}
}
本地文件
您可以通过本地文件测试接口调用。在传入文件路径时,请根据您所使用的系统和文件的路径进行调整,详情如下表所示。
系统 | SDK | 传入的文件路径 | 示例 |
Linux或macOS系统 | Python SDK | file://{文件的绝对路径} | file:///home/images/test.png |
Java SDK | |||
Windows系统 | Python SDK | file://{文件的绝对路径} | file://D:/images/test.png |
Java SDK | file:///{文件的绝对路径} | file:///D:images/test.png |
示例代码如下:
from dashscope import MultiModalConversation
def call_with_local_file():
local_file_path1 = 'file://The_local_absolute_file_path1'
local_file_path2 = 'file://The_local_absolute_file_path2'
messages = [{
'role': 'user',
'content': [
{
'image': local_file_path1
},
{
'image': local_file_path2
},
{
'text': '图片里有什么东西?'
},
]
}]
response = MultiModalConversation.call(model='qwen-vl-plus', messages=messages)
print(response)
if __name__ == '__main__':
call_with_local_file()
// Copyright (c) Alibaba, Inc. and its affiliates.
import java.util.Arrays;
import java.util.HashMap;
import com.alibaba.dashscope.aigc.multimodalconversation.MultiModalConversation;
import com.alibaba.dashscope.aigc.multimodalconversation.MultiModalConversationParam;
import com.alibaba.dashscope.aigc.multimodalconversation.MultiModalConversationResult;
import com.alibaba.dashscope.common.MultiModalMessage;
import com.alibaba.dashscope.common.Role;
import com.alibaba.dashscope.exception.ApiException;
import com.alibaba.dashscope.exception.NoApiKeyException;
import com.alibaba.dashscope.exception.UploadFileException;
import io.reactivex.Flowable;
public class MultiModalConversationLocalFile2 {
/**
* sample of use local file
* Windows file format: file:///D:/test/images/test.png
* Linux & Mac format: file://The_absolute_local_path
*
*/
public static void callWithLocalFile()
throws ApiException, NoApiKeyException, UploadFileException {
String localFilePath1 = "file://The_file_absolute_path";
String localFilePath2 = "file://The_file_absolute_path2";
MultiModalConversation conv = new MultiModalConversation();
// The content list elements must be mutable map, such as HashMap.
MultiModalMessage userMessage = MultiModalMessage.builder().role(Role.USER.getValue())
.content(Arrays.asList(new HashMap<String, Object>(){{put("image", localFilePath1);}},
new HashMap<String, Object>(){{put("image", localFilePath2);}},
new HashMap<String, Object>(){{put("text", "这是什么?");}})).build();
MultiModalConversationParam param = MultiModalConversationParam.builder()
.model(MultiModalConversation.Models.QWEN_VL_PLUS)
.message(userMessage)
.build();
Flowable<MultiModalConversationResult> result = conv.streamCall(param);
result.blockingForEach(item -> {
System.out.println(item);
});
}
public static void main(String[] args) {
try {
callWithLocalFile();
} catch (ApiException | NoApiKeyException | UploadFileException e) {
System.out.println(e.getMessage());
}
System.exit(0);
}
}
多轮对话
from http import HTTPStatus
from dashscope import MultiModalConversation
def conversation_call():
"""Sample of multiple rounds of conversation.
"""
messages = [
{
"role": "user",
"content": [
{"image": "https://dashscope.oss-cn-beijing.aliyuncs.com/images/dog_and_girl.jpeg"},
{"text": "这是什么?"},
]
}
]
response = MultiModalConversation.call(model='qwen-vl-plus',
messages=messages)
# The response status_code is HTTPStatus.OK indicate success,
# otherwise indicate request is failed, you can get error code
# and message from code and message.
if response.status_code == HTTPStatus.OK:
print(response)
else:
print(response.code) # The error code.
print(response.message) # The error message.
messages.append({'role': response.output.choices[0].message.role,
'content': response.output.choices[0].message.content})
messages.append({"role": "user",
"content": [
{"text": "她们在干什么?", }
]})
import json
print(json.dumps(messages, ensure_ascii=False))
response = MultiModalConversation.call(model='qwen-vl-plus',
messages=messages)
# The response status_code is HTTPStatus.OK indicate success,
# otherwise indicate request is failed, you can get error code
# and message from code and message.
if response.status_code == HTTPStatus.OK:
print(response)
else:
print(response.code) # The error code.
print(response.message) # The error message.
if __name__ == '__main__':
conversation_call()
// Copyright (c) Alibaba, Inc. and its affiliates.
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import com.alibaba.dashscope.aigc.multimodalconversation.MultiModalConversation;
import com.alibaba.dashscope.aigc.multimodalconversation.MultiModalConversationParam;
import com.alibaba.dashscope.aigc.multimodalconversation.MultiModalConversationResult;
import com.alibaba.dashscope.common.MultiModalMessage;
import com.alibaba.dashscope.common.Role;
import com.alibaba.dashscope.exception.ApiException;
import com.alibaba.dashscope.exception.NoApiKeyException;
import com.alibaba.dashscope.exception.UploadFileException;
public class Main {
private static final String modelName = "qwen-vl-plus";
public static void MultiRoundConversationCall() throws ApiException, NoApiKeyException, UploadFileException {
MultiModalConversation conv = new MultiModalConversation();
MultiModalMessage systemMessage = MultiModalMessage.builder().role(Role.SYSTEM.getValue())
.content(Arrays.asList(Collections.singletonMap("text", "You are a helpful assistant."))).build();
MultiModalMessage userMessage = MultiModalMessage.builder().role(Role.USER.getValue())
.content(Arrays.asList(Collections.singletonMap("image", "https://dashscope.oss-cn-beijing.aliyuncs.com/images/dog_and_girl.jpeg"),
Collections.singletonMap("text", "图片里有什么动物?"))).build();
List<MultiModalMessage> messages = new ArrayList<>();
messages.add(systemMessage);
messages.add(userMessage);
MultiModalConversationParam param = MultiModalConversationParam.builder()
.model(modelName)
.messages(messages)
.build();
MultiModalConversationResult result = conv.call(param);
System.out.println(result);
// add the result to conversation
messages.add(result.getOutput().getChoices().get(0).getMessage());
MultiModalMessage msg = MultiModalMessage.builder().role(Role.USER.getValue())
.content(Arrays.asList(Collections.singletonMap("text", "图片动物是什么?"))).build();
messages.add(msg);
// new messages
param.setMessages((List)messages);
result = conv.call(param);
System.out.print(result);
}
public static void main(String[] args) {
try {
MultiRoundConversationCall();
} catch (ApiException | NoApiKeyException | UploadFileException e) {
System.out.println(e.getMessage());
}
System.exit(0);
}
}
流式输出
from dashscope import MultiModalConversation
def simple_multimodal_conversation_call():
"""Simple single round multimodal conversation call.
"""
messages = [
{
"role": "user",
"content": [
{"image": "https://dashscope.oss-cn-beijing.aliyuncs.com/images/dog_and_girl.jpeg"},
{"text": "这是什么?"}
]
}
]
responses = MultiModalConversation.call(model='qwen-vl-plus',
messages=messages,
stream=True)
for response in responses:
print(response)
if __name__ == '__main__':
simple_multimodal_conversation_call()
// Copyright (c) Alibaba, Inc. and its affiliates.
import java.util.Arrays;
import java.util.HashMap;
import com.alibaba.dashscope.aigc.multimodalconversation.MultiModalConversation;
import com.alibaba.dashscope.aigc.multimodalconversation.MultiModalConversationParam;
import com.alibaba.dashscope.aigc.multimodalconversation.MultiModalConversationResult;
import com.alibaba.dashscope.common.MultiModalMessage;
import com.alibaba.dashscope.common.Role;
import com.alibaba.dashscope.exception.ApiException;
import com.alibaba.dashscope.exception.NoApiKeyException;
import com.alibaba.dashscope.exception.UploadFileException;
import io.reactivex.Flowable;
public class MultiModalConversationStream {
public static void streamCall()
throws ApiException, NoApiKeyException, UploadFileException {
MultiModalConversation conv = new MultiModalConversation();
// must create mutable map.
MultiModalMessage userMessage = MultiModalMessage.builder().role(Role.USER.getValue())
.content(Arrays.asList(new HashMap<String, Object>(){{put("image", "https://dashscope.oss-cn-beijing.aliyuncs.com/images/dog_and_girl.jpeg");}},
new HashMap<String, Object>(){{put("text", "基于这幅图,讲一个故事");}})).build();
MultiModalConversationParam param = MultiModalConversationParam.builder()
.model(MultiModalConversation.Models.QWEN_VL_PLUS)
.message(userMessage)
.build();
Flowable<MultiModalConversationResult> result = conv.streamCall(param);
result.blockingForEach(item -> {
System.out.println(item);
});
}
public static void main(String[] args) {
try {
streamCall();
} catch (ApiException | NoApiKeyException | UploadFileException e) {
System.out.println(e.getMessage());
}
System.exit(0);
}
}
参数配置
参数 | 类型 | 默认值 | 说明 |
model | string | - | 指定用于对话的通义千问模型名,qwen-vl-plus。 |
messages | list[dict] | - | 用户输入的历史对话信息和指令组成的完整输入信息。 参考示例,目前对于图片,支持图片url和本地路径 本地路径格式: python下:
file://D:/images/abc.png java下:
⚠️windows下python,java区别 |
top_p (可选) | float | 0.1 | 生成过程中核采样方法概率阈值,例如,取值为0.1时,仅保留概率加起来大于等于0.1的最可能token的最小集合作为候选集。取值范围为(0,1.0),取值越大,生成的随机性越高;取值越低,生成的确定性越高。 |
stream(可选) | bool | False | 是否使用流式输出。当以stream模式输出结果时,接口返回结果为generator,需要通过迭代获取结果,每个输出为当前生成的整个序列,最后一次输出为最终全部生成结果。 |
top_k | float | 100.0 | 生成时,采样候选集的大小。例如,取值为50时,仅将单次生成中得分最高的50个token组成随机采样的候选集。取值越大,生成的随机性越高;取值越小,生成的确定性越高。注意:如果top_k的值大于100,top_k将采用默认值100 |
seed | int | 1234 | 生成时,随机数的种子,用于控制模型生成的随机性。如果使用相同的种子,每次运行生成的结果都将相同;当需要复现模型的生成结果时,可以使用相同的种子。seed参数支持无符号64位整数类型。默认值 1234 |
incremental_output | bool | False | 是否使用增量输出。当使用增量输出时每次流式返回的序列仅包含最新生成的增量内容,默认输出完整的全量内容 |
返回结果
返回结果示例
{
"status_code": 200,
"request_id": "afbf4016-8704-965d-b98a-53ea46a06742",
"code": "",
"message": "",
"output": {
"text": null,
"finish_reason": null,
"choices": [
{
"finish_reason": null,
"message": {
"role": "assistant",
"content": [
{
"text": "这是一个关于友情的故事。在这个故事中,有一只可爱的小狗,它非常喜欢和人类玩耍。一天,它和一个喜欢它的女孩一起去了海滩。他们在沙滩上玩得很开心,互相追逐,玩耍,甚至互相握手。在他们的快乐时光中,女孩给小狗一个饼干,小狗非常高兴地接受了。夕阳西下,他们坐在沙滩上,享受着这美好的时光,直到天黑。这个故事告诉我们,友情不分物种,只要我们用心去交流和理解,就能找到共同的乐趣。"
}
]
}
}
]
},
"usage": {
"input_tokens": 1282,
"output_tokens": 107
}
}
返回参数说明
返回参数 | 类型 | 说明 | |
status_code | int | 200(HTTPStatus.OK)表示请求成功,否则表示请求失败,可以通过code获取错误码,通过message字段获取错误详细信息。 | |
request_Id | string | 系统生成的标志本次调用的id。 | |
code | string | 表示请求失败,表示错误码,成功忽略。 | |
output | dict | 调用结果信息,对于通义VL模型,包含输出message。 | |
output.choices | List | 模型为输入生成的完成选项列表。 | "choices": [ { "finish_reason": null, "message": { "role": "assistant", "content": [ { "text": "这是一个" } ] } } ] |
output.choices[x].message.role | String | 信息来源。 | |
output.choices[x].message.content | List | 本次请求的算法输出内容,输出可能包含多种模态内容,因此,是一个list,元素为dict,key为内容类型,value为内容值。 | |
usage | dict | 计量信息,表示本次请求计量数据。 | |
usage.input_tokens | int | 用户输入转换成Token后的长度。对于通义千问VL模型,input_tokens主要由两部分组成,分别是用户输入文本转换的Token和用户输入图片转换的Token。需要注意的是,文本与图片中间需要额外的标识进行拼接,因此即使用户输入不包含文本,input_tokens会稍多于image_tokens | |
usage.image_tokens | int | 用户输入图片转换成Token后的长度 | |
usage.output_tokens | int | 模型生成回复转换为Token后的长度。 |
HTTP调用接口
功能描述
通义VL模型同时支持 HTTP 调用来完成客户的响应,目前提供普通 HTTP 和 HTTP SSE 两种协议,您可根据自己的需求自行选择。
前提条件
已开通服务并获得API-KEY:开通DashScope并创建API-KEY。
提交接口调用
POST https://dashscope.aliyuncs.com/api/v1/services/aigc/multimodal-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 | |
Body | model | String | 是 | 指明需要调用的模型 | qwen-vl-plus |
input.messages[list] | Array | 是 | 多模态场景下的输入信息 | "messages":[ { "role": "user", "content": [ {"image": "http://XXXX"}, {"text": "这个图片是哪里?"} ] }] | |
input.message[x].role | String | 是 | 信息来源 | ||
input.message[x].content[list] | Array | 是 | contents 列表中包含本次输入的内容列表,每一个列表可以分别是图像(image)或者文本(text) | ||
input.message[x].contents[list].image | String | 至少包含一项 | 本次输入的图像内容的 url 链接;图像格式目前支持:bmp, jpg, jpeg, png 和 tiff。 | ||
input.message[x].contents[list].text | String | 本次输入的文本内容;支持 utf-8 编码的中文、英文输入。 | |||
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.incremental_output | Bool | 否 | 是否使用增量输出。当使用增量输出时每次流式返回的序列仅包含最新生成的增量内容,默认值为false,即输出完整的全量内容 |
出参描述
字段 | 类型 | 描述 | 示例值 |
output.choices[list] | Array | 模型为输入生成的完成选项列表。 | "choices": [ { "finish_reason": null, "message": { "role": "assistant", "content": [ { "text": "这是一个" } ] } } ] |
output.choices[x].message.role | String | 信息来源。 | |
output.choices[x].message.content | Array | 本次请求的算法输出内容,为list,内容为多个dict,key为内容类型,value为内容值 | |
output.finish_reason | String | 有三种情况:正在生成时为null,生成结束时如果由于停止token导致则为stop,生成结束时如果因为生成长度过长导致则为length。 | stop |
usage.output_tokens | Integer | 本次请求算法输出内容的 token 数目。 | 380 |
usage.input_tokens | Integer | 用户输入转换成Token后的长度。对于通义千问VL模型,input_tokens主要由两部分组成,分别是用户输入文本转换的Token和用户输入图片转换的Token。需要注意的是,文本与图片中间需要额外的标识进行拼接,因此即使用户输入不包含文本,input_tokens会稍多于image_tokens | 633 |
usage.image_tokens | Integer | 用户输入图片转换成Token后的长度。 | 251 |
request_id | String | 本次请求的系统唯一码 | 7574ee8f-38a3-4b1e-9280-11c33ab46e51 |
请求示例(SSE 关闭)
以下示例展示通过CURL命令来调用通义千问-VL模型的脚本(SSE 关闭)。
需要使用您的API-KEY替换示例中的 your-dashscope-api-key ,代码才能正常运行。
curl --location 'https://dashscope.aliyuncs.com/api/v1/services/aigc/multimodal-generation/generation' \
--header 'Authorization: Bearer YOUR_DASHSCOPE_ACCESS_TOKEN' \
--header 'Content-Type: application/json' \
--data '{
"model": "qwen-vl-plus",
"input":{
"messages":[
{
"role": "user",
"content": [
{"image": "https://dashscope.oss-cn-beijing.aliyuncs.com/images/dog_and_girl.jpeg"},
{"text": "这个图片是哪里?"}
]
}
]
},
"parameters": {
}
}'
响应示例(SSE关闭)
{
"output": {
"choices": [
{
"finish_reason": "stop",
"message": {
"role": "assistant",
"content": [
{
"text": "这个图片是拍摄于一个海滩,可以看到远处的海浪和日落的天空。"
}
]
}
}
]
},
"usage": {
"output_tokens": 19,
"input_tokens": 1279,
"image_tokens": 680
},
"request_id": "b042e72d-7994-97dd-b3d2-7ee7e0140525"
}
请求示例(SSE开启)
以下示例展示通过CURL命令来调用通义千问-VL模型的脚本(SSE 开启)。
需要使用您的API-KEY替换示例中的 your-dashscope-api-key ,代码才能正常运行。
curl --location 'https://dashscope.aliyuncs.com/api/v1/services/aigc/multimodal-generation/generation' \
--header 'Authorization: Bearer YOUR_DASHSCOPE_ACCESS_TOKEN' \
--header 'Content-Type: application/json' \
--header 'X-DashScope-SSE: enable' \
--data '{
"model": "qwen-vl-plus",
"input":{
"messages":[
{
"role": "user",
"content": [
{"image": "https://dashscope.oss-cn-beijing.aliyuncs.com/images/dog_and_girl.jpeg"},
{"text": "这个图片是哪里?"}
]
}
]
},
"parameters": {
}
}'
响应示例(SSE开启)
id:1
event:result
data:{"output":{"choices":[{"finish_reason":"null","message":{"role":"assistant","content":"这个"}}]},"usage":{"output_tokens":3,"input_tokens":85, "image_tokens": 32},"request_id":"1117fb64-5dd9-9df0-a5ca-d7ee0e97032d"}
id:2
event:result
data:{"output":{"choices":[{"finish_reason":"null","message":{"role":"assistant","content":"这个图片描述"}}]},"usage":{"output_tokens":12,"input_tokens":85, "image_tokens": 32},"request_id":"1117fb64-5dd9-9df0-a5ca-d7ee0e97032d"}
... ... ... ...
... ... ... ...
id:8
event:result
data:{"output":{"choices":[{"finish_reason":"stop","message":{"role":"assistant","content":"这个图片描述的是一个公园里的 ... ... "}}]},"usage":{"output_tokens":51,"input_tokens":85, "image_tokens": 32},"request_id":"1117fb64-5dd9-9df0-a5ca-d7ee0e97032d"}
异常响应示例
在访问请求出错的情况下,输出的结果中会通过 code 和 message 指明出错原因。
{
"code":"InvalidApiKey",
"message":"Invalid API-key provided.",
"request_id":"fb53c4ec-1c12-4fc4-a580-cdb7c3261fc1"
}
状态码说明
DashScope灵积模型服务通用状态码请查阅:返回状态码说明
- 本页导读 (0)