文档

API详情

更新时间:

通义千问VL

说明

支持的领域 / 任务:aigc

通义千问开源视觉理解大模型Qwen-VL于2023年12月1日发布重大更新,不仅大幅提升通用OCR、视觉推理、中文文本理解基础能力,还能处理各种分辨率和规格的图像,甚至能“看图做题”。

升级的Qwen-VL(qwen-vl-plus/qwen-vl-max)模型现有几大特点:

  1. 大幅增强了图片中文字处理能力,帮助您有效提取、整理、总结文字信息。

  2. 增加可处理分辨率范围,各分辨率和长宽比的图都能处理,大图和长图能看清。

  3. 增强视觉推理和决策能力,适于搭建视觉Agent,让大模型Agent的想象力进一步扩展。

  4. 升级看图做题能力,拍一拍习题图发给Qwen-VL,大模型能帮用户一步步解题。

您可以将文本和URL形式的图片形式输入包含多轮对话历史和当前指令的信息序列(messages),模型生成的回复作为返回输出。

文本将被转换为语言模型可以处理的token序列。Token是模型用来表示自然语言文本的基本单位,可以直观地理解为“字”或“词”。对于中文,一个token对应1.5到1.8个汉字,例如“通义千问大语言模型”,转换为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数量。

对于输入的图片有以下限制:

  1. 图片文件大小不超过10 MB

  2. 图片总的像素数不超过 1048576,这相当于一张长宽均为 1024 的图片总像素数

图片支持的格式:

图片格式

Content Type

文件扩展名

BMP

image/bmp

.bmp

JPEG

image/jpeg

.jpeg, .jpg

PNG

image/png

.png

TIFF

image/tiff

.tif, .tiff

WEBP

image/webp

.webp

说明

VL 模型目前不推荐定制 system role。

模型概览

模型名

模型简介

模型输入/输出限制

qwen-vl-plus

通义千问大规模视觉语言模型增强版。大幅提升细节识别能力和文字识别能力,支持超百万像素分辨率和任意长宽比规格的图像。在广泛的视觉任务上提供卓越的性能。

模型支持8k tokens上下文,为了保证正常的使用和输出,API限定用户输入为6k tokens。

qwen-vl-max

通义千问超大规模视觉语言模型。相比增强版,再次提升视觉推理能力和指令遵循能力,提供更高的视觉感知和认知水平。在更多复杂任务上提供最佳的性能。

SDK使用

前提条件

问答示例

以下示例展示了调用通义千问VL模型对用户指令进行响应的代码。

简单示例

from http import HTTPStatus
import dashscope
import os


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',
        api_key=os.getenv('DASHSCOPE_API_KEY'),  # 如果您没有设置环境变量,请在此处填写您的 API Key
        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 java.lang.System;
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)
                // 如果您没有设置环境变量,请在此处填写您的 API Key
                .apiKey(System.getenv("DASHSCOPE_API_KEY"))
                .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 Main {
    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

array

-

用户输入的历史对话信息和指令组成的完整输入信息。

目前对于图片,支持图片 URL 和本地路径,本地路径的指定方式请参考:本地文件

top_p(可选)

float

生成过程中核采样方法概率阈值,例如,取值为0.1时,仅保留概率加起来大于等于0.1的最可能token的最小集合作为候选集。取值范围为(0,1.0),取值越大,生成的随机性越高;取值越低,生成的确定性越高。

stream(可选)

boolean

False

是否使用流式输出。当以stream模式输出结果时,接口返回结果为generator,需要通过迭代获取结果,每个输出为当前生成的整个序列,最后一次输出为最终全部生成结果。

top_k

integer

生成时,采样候选集的大小。例如,取值为50时,仅将单次生成中得分最高的50个token组成随机采样的候选集。取值越大,生成的随机性越高;取值越小,生成的确定性越高。注意:如果top_k的值大于100,top_k将取值100。

seed

integer

生成时,随机数的种子,用于控制模型生成的随机性。如果使用相同的种子,每次运行生成的结果都将相同;当需要复现模型的生成结果时,可以使用相同的种子。seed参数支持无符号64位整数类型。

incremental_output

boolean

False

是否使用增量输出,仅在设置stream为True时可指定。当使用增量输出时每次流式返回的序列仅包含最新生成的增量内容;默认输出完整的全量内容。

返回结果

  • 返回结果示例

    {
      "status_code": 200,
      "request_id": "a0dc436c-2ee7-93e0-9667-c462009dec4d",
      "code": "",
      "message": "",
      "output": {
        "text": null,
        "finish_reason": null,
        "choices": [
          {
            "finish_reason": "stop",
            "message": {
              "role": "assistant",
              "content": [
                {
                  "text": "这张图片显示了一位女士和她的狗在海滩上。她们似乎正在享受彼此的陪伴,狗狗坐在沙滩上伸出爪子与女士握手或互动。背景是美丽的日落景色,海浪轻轻拍打着海岸线。\n\n请注意,我提供的描述基于图像中可见的内容,并不包括任何超出视觉信息之外的信息。如果您需要更多关于这个场景的具体细节,请告诉我!"
                }
              ]
            }
          }
        ]
      },
      "usage": {
        "input_tokens": 1277,
        "output_tokens": 81,
        "image_tokens": 1247
      }
    }
  • 返回参数说明

    返回参数

    类型

    说明

    示例值

    status_code

    integer

    200(HTTPStatus.OK)表示请求成功,否则表示请求失败,可以通过code获取错误码,通过message字段获取错误详细信息。

    200

    request_id

    string

    系统生成的标志本次调用的id。

    code

    string

    表示请求失败,表示错误码,成功忽略。

    output

    object

    调用结果信息,对于通义VL模型,包含输出message。

    output.choices

    array

    模型为输入生成的完成选项列表。

    "choices": [

    {

    "finish_reason": null,

    "message": {

    "role": "assistant",

    "content": [

    {

    "text": "这是一个"

    }

    ]

    }

    }

    ]

    output.choices[x].finish_reason

    string

    模型停止生成的原因。

    output.choices[x].message.role

    string

    信息来源。

    output.choices[x].message.content

    array

    本次请求的算法输出内容,输出可能包含多种模态内容。输出是一个元素为哈希表的列表,哈希表的key为内容类型,value为内容值。

    usage

    object

    计量信息,表示本次请求计量数据。

    usage.input_tokens

    integer

    用户输入转换成token后的计量。对于通义千问VL模型,input_tokens主要由两部分组成,分别是用户输入文本转换的token和用户输入图片转换的token。需要注意的是,文本与图片中间需要额外的标识进行拼接,因此即使用户输入不包含文本,input_tokens会稍多于image_tokens。

    usage.image_tokens

    integer

    用户输入图片转换成token后的长度。

    usage.output_tokens

    integer

    模型生成回复转换为token后的长度。

HTTP调用接口

功能描述

通义VL模型同时支持 HTTP 调用来完成客户的响应,目前提供普通 HTTP 和 HTTP SSE 两种协议,您可根据自己的需求自行选择。

前提条件

  • 我们推荐您将API-KEY配置到环境变量中以降低API-KEY的泄漏风险,详情可参考通过环境变量配置API-KEY

    重要

    您也可以在代码中配置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 链接;图像文件限制与支持格式详见文档上方模型介绍部分。

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位整数类型。

65535

parameters.incremental_output

boolean

是否使用增量输出。当使用增量输出时每次流式返回的序列仅包含最新生成的增量内容,默认值为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

本次请求的算法输出内容,为元素为哈希表的列表,哈希表key为内容类型,value为内容值。

output.output.choices[x].finish_reason

string

有三种情况:正在生成时为null,生成结束时如果由于停止token导致则为stop,生成结束时如果因为生成长度过长导致则为length。

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 关闭)。

curl --location 'https://dashscope.aliyuncs.com/api/v1/services/aigc/multimodal-generation/generation' \
--header "Authorization: Bearer $DASHSCOPE_API_KEY" \
--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 开启)。

curl --location 'https://dashscope.aliyuncs.com/api/v1/services/aigc/multimodal-generation/generation' \
--header "Authorization: Bearer $DASHSCOPE_API_KEY" \
--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)