更新时间:2025-07-29 GMT+08:00
分享

图像问答

功能介绍

多模态图像问答接口提供图片描述、视觉问答、OCR等能力,常用图像理解、视觉问答等理解和生成任务。

URI

获取URI方式请参见请求URI

多模态推理服务提供两种推理接口调用:

  • 盘古推理接口(V1推理接口)
  • 业界通用的OpenAI格式接口(V2推理接口)

V1、V2调用接口的鉴权方式不同,请求体和返回体略有差异。两种接口定义如推理接口所示。

表1 推理接口

API分类

API访问路径(URI)

V1推理接口

POST /v1/{project_id}/deployments/{deployment_id}/chat/completions

V2推理接口

POST /api/v2/chat/completions

V1推理接口URI需要输入额外参数,参数说明如路径参数所示:

表2 路径参数

参数

是否必选

参数类型

描述

project_id

String

参数解释:

项目ID,获取方法请参见获取项目ID

约束限制:

不涉及

取值范围:

不涉及

默认取值:

不涉及

deployment_id

String

参数解释:

模型的部署ID,获取方法请参见获取模型部署ID

约束限制:

不涉及

取值范围:

不涉及

默认取值:

不涉及

请求参数

V1、V2推理接口的鉴权方式不同,请求参数与响应参数也有不同,说明如下:

Header参数

  1. V1接口支持Token鉴权方式,也支持API Key鉴权方式。两种鉴权方式请求Header参数说明如下:
    表3 请求Header参数(Token认证)

    参数

    是否必选

    参数类型

    描述

    X-Auth-Token

    String

    参数解释:

    用户Token。

    用于获取操作API的权限。如图4中响应消息头中X-Subject-Token的值即为Token。

    约束限制:

    不涉及

    取值范围:

    不涉及

    默认取值:

    不涉及

    Content-Type

    String

    参数解释:

    发送的实体的MIME类型。

    约束限制:

    不涉及

    取值范围:

    不涉及

    默认取值:

    application/json

    • 使用API Key认证方式的请求Header参数见请求Header参数(API Key认证)
      表4 请求Header参数(API Key认证)

      参数

      是否必选

      参数类型

      描述

      X-Apig-AppCode

      String

      参数解释:

      API Key值。

      用于获取操作API的权限。API Key认证响应消息头中X-Apig-AppCode的值即为API Key。

      约束限制:

      不涉及

      取值范围:

      不涉及

      默认取值:

      不涉及

      Content-Type

      String

      参数解释:

      发送的实体的MIME类型。

      约束限制:

      不涉及

      取值范围:

      不涉及

      默认取值:

      application/json

  2. V2接口仅支持API Key鉴权方式。请求Header参数见表5
    表5 请求Header参数(OpenAI格式的API Key认证)

    参数

    是否必选

    参数类型

    描述

    Authorization

    String

    参数解释:

    用户创建应用接入获取的API Key,拼接“Bearer ”后的字符串。示例:Bearer d59******9C3。

    约束限制:

    不涉及

    取值范围:

    不涉及

    默认取值:

    不涉及

    Content-Type

    String

    参数解释:

    发送的实体的MIME类型。

    约束限制:

    不涉及

    取值范围:

    不涉及

    默认取值:

    application/json

请求Body参数

V1、V2推理接口请求Body参数一致,如表6描述。

表6 请求Body参数

参数

是否必选

参数类型

描述

messages

Array of message objects

参数解释:

多轮对话问答对。

约束限制:

不涉及

取值范围:

数组长度:1 - 20

默认取值:

不涉及

model

V1推理接口:否

V2推理接口:是

String

参数解释:

使用的推理服务模型名称,为推理服务部署时指定的Deployed_Model,可在推理服务详情页面查询到。V2推理接口必须指定此参数,V1推理接口不需要此参数。

约束限制:

不涉及

取值范围

字符串长度最大64,最小1。

默认取值:

不涉及

stream

Boolean

参数解释:

流式调用的开启开关。

约束限制:

不涉及

取值范围

  • true:开启流式调用
  • false:关闭流式调用

默认取值:

false

temperature

Float

参数解释:

用于控制生成文本的多样性和创造力。参数的取值范围是0到1,其中0表示最低的随机性。一般来说,temperature越低,适合完成确定性的任务。temperature越高,如0.9,适合完成创造性的任务。temperature参数可以影响语言模型输出的质量和多样性,但也不是唯一的因素。还有其他一些参数,如top_p参数也可以用来调整语言模型的行为和偏好,但不建议同时更改这两个参数。

约束限制:

不涉及

取值范围

最小值:0

最大值:1

默认取值:

缺省值:0.3

top_p

Float

参数解释:

一种替代温度采样的方法,称为nucleus sampling,其中模型考虑具有top_p概率质量的标记的结果。通常建议更改此值或温度,但不要同时更改两者。通常建议更改top_p或temperature来调整生成文本的倾向性,但不要同时更改这两个参数。

约束限制:

不涉及

取值范围:

[0, 1]

默认取值:

缺省值:0

max_tokens

Integer

参数解释:

用于控制聊天回复的长度和质量。一般来说,较大的max_tokens值可以生成较长和较完整的回复,但也可能增加生成无关或重复内容的风险。较小的max_tokens值可以生成较短和较简洁的回复,但也可能导致生成不完整或不连贯的内容。因此,需要根据不同的场景和需求来选择合适的max_tokens值。

约束限制:

最小值为1

取值范围:

不涉及

默认取值:

不涉及

presence_penalty

Float

参数解释:

用于控制生成文本中的重复程度。正值会根据它们到目前为止在文本中的现有频率来惩罚新tokens,从而降低模型逐字重复同一行的可能性。presence_penalty参数可以用来提高生成文本的多样性和创造性,避免生成单调或重复的内容。

约束限制:

不涉及

取值范围

最小值:-2

最大值:2

默认取值:

缺省值:0

frequency_penalty

Float

参数解释:

重复采样惩罚值,避免文本重复生成。

约束限制:

不涉及

取值范围

最小值:-2

最大值:2

默认取值:

0

moderation_config

Array of moderation_config

参数解释:

内容审核配置项。

约束限制:

不涉及

取值范围:

不涉及

默认取值:

不涉及

表7 message

参数

是否必选

参数类型

描述

role

V1推理接口:否

V2推理接口:是

String

参数解释:

对话的角色,取值为system、user、assistant。

如果需要模型以某个人设形象回答问题,可以将role参数设置为system。不使用人设时,可设置为user。在一次会话请求中,人设只需要设置一次。多轮对话中,用户输入提示词的role设置为user,推理结果的role设置为assistant。

约束限制:

不涉及

取值范围:

[systeml, user, assistant]

默认取值:

不涉及

content

Array of content objects

参数解释:

问答对文本内容。

约束限制:

最小长度:1

取值范围:

不涉及

默认取值:

不涉及

表8 content

参数

是否必选

参数类型

描述

type

String

参数解释:

输入内容的类型。

约束限制:

不涉及

取值范围

  • text:文本
  • image_url:图像

默认取值:

不涉及

text

String

参数解释:

问答对文本内容。

约束限制:

最小长度:1

type为text时必传。

取值范围:

不涉及

默认取值:

不涉及

image_url

text、image_url不能同时为空

image_url object

参数解释:

问答对图像内容。

约束限制:

type为image_url时必传。

取值范围:

不涉及

默认取值:

不涉及

表9 image_url

参数

是否必选

参数类型

描述

url

String

参数解释:

标识符 + 图片的base64编码组成的字符串。

约束限制:

需要符合"data:image/jpg;base64,{base64_str}"的格式,base64_str是图片的base64编码,示例:data:image/jpg;base64,/9j/4AAQSKZJRg......qkf/z。

取值范围:

不涉及

默认取值:

不涉及

表10 moderation_config

参数

参数类型

描述

black_glossary_names

String

参数解释:

黑名单词库列表。

约束限制:

仅对开启高级版的推理服务生效。

取值范围:

不涉及

默认取值:

不涉及

white_glossary_names

String

参数解释:

白名单词库列表。

约束限制:

仅对开启高级版的推理服务生效。

取值范围:

不涉及

默认取值:

不涉及

question_moderation

boolean

参数解释:

是否开启对提示词进行内容审核。

约束限制:

仅对开启高级版的推理服务生效。

取值范围

  • true:审核
  • false:不审核

默认取值:

true。

answer_moderation

boolean

参数解释:

是否开启对推理结果进行内容审核。

约束限制:

仅对开启高级版的推理服务生效。

取值范围

  • true:审核
  • false:不审核

默认取值:

true。

show_result

boolean

参数解释:

是否返回内容审核不通过原因。

约束限制:

不涉及

取值范围

  • true:审核
  • false:不审核

默认取值:

false。

响应参数

非流式响应(请求中stream参数为空或false)

状态码: 200

表11 响应Body参数

参数

参数类型

描述

id

String

参数解释:

响应ID。

约束限制:

不涉及

取值范围:

不涉及

默认取值:

不涉及

created

Integer

参数解释:

响应时间。

约束限制:

不涉及

取值范围:

不涉及

默认取值:

不涉及

choices

Array of ChatChoice objects

参数解释:

模型回复。

约束限制:

不涉及

取值范围:

不涉及

默认取值:

不涉及

usage

CompletionUsage object

参数解释:

tokens数量统计对象。

约束限制:

不涉及

取值范围:

不涉及

默认取值:

不涉及

moderation_type

String

参数解释:

内容审核拦截类型;触发内容审核拦截,且请求参数show_result设为true时返回。

约束限制:

不涉及

取值范围:

不涉及

默认取值:

不涉及

moderation_result

ModerationResp object

参数解释:

内容审核拦截详情;触发内容审核拦截,且请求参数show_result设为true时返回。

约束限制:

不涉及

取值范围:

不涉及

默认取值:

不涉及

表12 ChatChoice

参数

参数类型

描述

index

Integer

参数解释:

回复的索引。

约束限制:

不涉及

取值范围:

不涉及

默认取值:

不涉及

message

Array of MessageItem objects

参数解释:

模型响应。

约束限制:

不涉及

取值范围:

不涉及

默认取值:

不涉及

表13 MessageItem

参数

参数类型

描述

role

String

参数解释:

角色。

约束限制:

不涉及

取值范围:

不涉及

默认取值:

不涉及

content

String

参数解释:

模型响应。

约束限制:

不涉及

取值范围:

不涉及

默认取值:

不涉及

表14 CompletionUsage

参数

参数类型

描述

completion_tokens

Number

参数解释:

表示模型生成的答案中包含的tokens的数量。

约束限制:

不涉及

取值范围:

不涉及

默认取值:

不涉及

prompt_tokens

Number

参数解释:

表示生成结果时使用的提示文本的tokens的数量。

约束限制:

不涉及

取值范围:

不涉及

默认取值:

不涉及

total_tokens

Number

参数解释:

对话过程中使用的tokens总数。

约束限制:

不涉及

取值范围:

不涉及

默认取值:

不涉及

表15 ModerationResp

参数

参数类型

描述

request_id

String

参数解释:

调用盘古护栏审核接口请求ID。

约束限制:

不涉及

取值范围:

不涉及

默认取值:

不涉及

result

object

参数解释:

审核结果。

约束限制:

不涉及

取值范围:

不涉及

默认取值:

不涉及

label

String

参数解释:

当前内容片段的风险类型。

约束限制:

不涉及

取值范围:

不涉及

默认取值:

不涉及

流式响应(请求中stream参数为true)

状态码: 200

表16 流式输出的数据单元

参数

参数类型

描述

data

CompletionStreamResponse

参数解释:

stream=true时,模型生成的消息以流式形式返回。生成的内容以增量的方式逐步发送回来,每个data字段均包含一部分生成的内容,直到所有data返回,响应结束。

约束限制:

不涉及

取值范围:

不涉及

默认取值:

不涉及

表17 CompletionStreamResponse

参数

参数类型

描述

id

String

参数解释:

该对话的唯一标识符。

约束限制:

不涉及

取值范围:

不涉及

默认取值:

不涉及

created

Integer

参数解释:

创建聊天完成时的Unix时间戳(以秒为单位)。流式响应的每个chunk的时间戳相同。

约束限制:

不涉及

取值范围:

不涉及

默认取值:

不涉及

model

String

参数解释:

生成该completion的模型名。

约束限制:

不涉及

取值范围:

不涉及

默认取值:

不涉及

object

String

参数解释:

对象的类型, 其值为chat.completion.chunk。

约束限制:

不涉及

取值范围:

不涉及

默认取值:

不涉及

choices

ChatCompletionResponseStreamChoice

参数解释:

模型生成的completion的选择列表。

约束限制:

不涉及

取值范围:

不涉及

默认取值:

不涉及

usage

UsageInfo

参数解释:

该对话请求的token用量信息。该参数可以帮助用户了解和控制模型的使用情况,避免超出Tokens限制。

约束限制:

不涉及

取值范围:

不涉及

默认取值:

不涉及

表18 ChatCompletionResponseStreamChoice

参数

参数类型

描述

index

Integer

参数解释:

该completion在模型生成的completion的选择列表中的索引。

约束限制:

不涉及

取值范围:

不涉及

默认取值:

不涉及

finish_reason

String

参数解释:

模型停止生成token的原因。

约束限制:

不涉及

取值范围:

[stop, length, content_filter, tool_calls, insufficient_system_resource]

  • stop:模型自然停止生成,或遇到stop序列中列出的字符串。
  • length :输出长度达到了模型上下文长度限制,或达到了max_tokens的限制。
  • content_filter:输出内容因触发过滤策略而被过滤。
  • tool_calls:模型决定调用外部工具(函数/API)来完成任务。
  • insufficient_system_resource:系统推理资源不足,生成被打断。

默认取值:

不涉及

delta

DeltaMessage

参数解释:

V2推理接口流式返回的一个completion增量。

V1推理接口返回体不包含此参数。

约束限制:

不涉及

取值范围:

不涉及

默认取值:

不涉及

message

DeltaMessage

参数解释:

V1推理接口流式返回的一个completion增量。

V2推理接口返回体不包含此参数。

约束限制:

不涉及

取值范围:

不涉及

默认取值:

不涉及

表19 DeltaMessage

参数

参数类型

描述

role

String

参数解释:

产生这条消息的角色。

约束限制:

不涉及

取值范围:

不涉及

默认取值:

不涉及

content

String

参数解释:

completion增量的内容。

约束限制:

不涉及

取值范围:

不涉及

默认取值:

不涉及

reasoning_content

String

参数解释:

内容为最终答案之前的推理内容(模型的思考过程)。

约束限制:

仅适用于支持思考过程的模型。

取值范围:

不涉及

默认取值:

不涉及

表20 UsageInfo

参数

参数类型

描述

prompt_tokens

Integer

参数解释:

用户输入的提示词及默认人设的Token数。

约束限制:

不涉及

取值范围:

不涉及

默认取值:

不涉及

completion_tokens

Integer

参数解释:

推理服务返回结果的Token数。

约束限制:

不涉及

取值范围:

不涉及

默认取值:

不涉及

total_tokens

Integer

参数解释:

总消耗token数。

约束限制:

不涉及

取值范围:

不涉及

默认取值:

不涉及

表21 流式输出的数据单元(输出内容未审核通过)

参数

参数类型

描述

suggestion

String

参数解释:

审核结果:block表示未通过。

约束限制:

不涉及

取值范围:

不涉及

默认取值:

不涉及

reply

String

参数解释:

兜底回复:审核未通过时兜底回复为有效回复,兜底策略。

约束限制:

不涉及

取值范围:

不涉及

默认取值:

不涉及

moderation_type

String

参数解释:

内容审核拦截类型,请求参数show_result设为true,且盘古护栏拦截时返回。包含以下属性:

question:用户提问。

answer:模型回答。

约束限制:

不涉及

取值范围:

不涉及

默认取值:

不涉及

moderation_result

moderationResp

参数解释:

盘古护栏审核拦截详情。请求参数show_result设为true,且盘古护栏拦截时返回。

约束限制:

不涉及

取值范围:

不涉及

默认取值:

不涉及

状态码: 400

接口报错的场景下,V1推理接口返回的报错信息符合华为云规范;V2推理接口则会对外透传推理服务返回的错误信息,通常符合OpenAi接口格式。

表22 响应Body参数

参数

参数类型

描述

error_msg

String

错误信息。

error_code

String

错误码。

details

List<Object>

推理服务返回的报错信息,具体的格式、内容取决于推理服务。

表23 V2推理接口响应错误信息Body参数

参数

参数类型

描述

error

ErrorResp

错误信息。

id

String

请求ID。

表24 ErrorResp

参数

参数类型

描述

code

String

错误码。

type

String

错误类型。

message

String

错误详情。

请求示例

接口URL与消息头:

V1推理接口:
POST https://mastudio.cn-southwest-2.myhuaweicloud.com/v1/{project_id}/deployments/{deployment_id}/chat/completions 

Request Header:   
Content-Type: application/json   
X-Auth-Token: MIINRwYJKoZIhvcNAQcCoIINODCCDTQCAQExDTALBglghkgBZQMEAgEwgguVBgkqhkiG...      

V2推理接口:
POST https://mastudio.cn-southwest-2.myhuaweicloud.com/api/v2/chat/completions

Request Header:   
Content-Type: application/json   
Authorization: Bearer 201ca68f-45f9-4e19-8fa4-831e... 

请求体示例:

{
    "temperature": 0.5,
    "model": "pangu-mm-m2-img2txt-12k", // 仅V2接口需要此参数
    "messages": [
        {
            "role":"user", // 仅V2接口需要此参数
            "content": [
                {
                    "type": "image_url",
                    "image_url": {
                        "url": "data:image/jpg;base64,/9j/4AAQSkZJRgABAQAAAQABAA......qVKgqkf/Z"
                    }
                },
                {
                    "type": "text",
                    "text": "图中有什么?"
                }
            ]
        }
    ],
    "presence_penalty": 0.5,
    "frequency_penalty": 0.5,
    "max_tokens": 2048,
    "stream": false
}

多轮问答请求示例:

{
    "temperature": 0.5,
    "model": "pangu-mm-m2-img2txt-12k", // 仅V2接口需要此参数
    "messages": [
        {
            "role":"user", // 仅V2接口需要此参数
            "content": [
                {
                    "type": "image_url",
                    "image_url": {
                        "url": "data:image/jpg;base64,/9j/4AAQSkZJRgABAQAAAQABAA......qVKgqkf/Z"
                    }
                },
                {
                    "type": "text",
                    "text": "图中有什么?"
                }
            ]
        },
        {
            "role":"assistant", // 仅V2接口需要此参数
            "content": [
                {
                    "type": "text",
                    "text": "这是一张飞机在天空中飞行的图片。它显示了飞机及其翼展和发动机的大小,以及它所穿越的空气量。这架飞机是一架军用喷气式战斗机,机身颜色为黑色,机头有一个大螺旋桨。背景中的云层表明飞机正在接近高空,很可能是在航程的中间。"
                }
            ]
        }
        {
            "role":"user", // 仅V2接口需要此参数
            "content": [
                {
                    "type": "image_url",
                    "image_url": {
                        "url": "data:image/jpg;base64,/9j/4AAQSkZJRgABAQAAAQABAA......qVKgqkf/Z"
                    }
                },
                {
                    "type": "text",
                    "text": "这张图与第一张图有什么差异?"
                }
            ]
        }
    ],
    "presence_penalty": 0.5,
    "frequency_penalty": 0.5,
    "max_tokens": 2048,
    "stream": false
}

响应示例

状态码: 200

非流式问答响应示例:

{
    "id": "chat-38ea6118a5d14e38b7d592211bbd31a6",
    "object": "chat.completion",
    "created": 1749894390,
    "model": "pangu-mm-m2-img2txt-12k",
    "choices": [
        {
            "index": 0,
            "message": {
                "role": "assistant",
                "reasoning_content": null,
                "content": "这是一张飞机在天空中飞行的图片。它显示了飞机及其翼展和发动机的大小,以及它所穿越的空气量。这架飞机是一架军用喷气式战斗机,机身颜色为黑色,机头有一个大螺旋桨。背景中的云层表明飞机正在接近高空,很可能是在航程的中间。",
                "tool_calls": [
                ]
            },
            "logprobs": null,
            "finish_reason": "stop",
            "stop_reason": null
        }
    ],
    "usage": {
        "prompt_tokens": 3189,
        "total_tokens": 3236,
        "completion_tokens": 47
    },
    "prompt_logprobs": null
}

流式问答响应示例:

V1推理接口响应:
data:{"id":"chat-59170add0fd1427bbca0388431058d45","object":"chat.completion.chunk","created":1745725837,"model":"pangu-mm-m2-img2txt-12k","choices":[{"index":0,"logprobs":null,"finish_reason":null,"message":{"role":"assistant"}}],"usage":{"prompt_tokens":64,"total_tokens":64,"completion_tokens":0}}

data:{"id":"chat-59170add0fd1427bbca0388431058d45","object":"chat.completion.chunk","created":1745725837,"model":"pangu-mm-m2-img2txt-12k","choices":[{"index":0,"logprobs":null,"finish_reason":null,"message":{"content":"在这"}}],"usage":{"prompt_tokens":64,"total_tokens":65,"completion_tokens":1}}

data:{"id":"chat-59170add0fd1427bbca0388431058d45","object":"chat.completion.chunk","created":1745725837,"model":"pangu-mm-m2-img2txt-12k","choices":[{"index":0,"logprobs":null,"finish_reason":"stop","stop_reason":null,"message":{"content":"张"}}],"usage":{"prompt_tokens":64,"total_tokens":73,"completion_tokens":2}}

data:{"id":"chat-59170add0fd1427bbca0388431058d45","object":"chat.completion.chunk","created":1745725837,"model":"pangu-mm-m2-img2txt-12k","choices":[{"index":0,"logprobs":null,"finish_reason":"stop","stop_reason":null,"message":{"content":"图片"}}],"usage":{"prompt_tokens":64,"total_tokens":73,"completion_tokens":3}}

......

data:{"id":"chat-59170add0fd1427bbca0388431058d45","object":"chat.completion.chunk","created":1745725837,"model":"pangu-mm-m2-img2txt-12k","choices":[],"usage":{"prompt_tokens":64,"total_tokens":73,"completion_tokens":9}}

event:{"usage":{"completionTokens":9,"promptTokens":64,"totalTokens":73},"tokens":64,"token_number":9}

data:[DONE]


V2推理接口响应:
data:{"id":"chat-59170add0fd1427bbca0388431058d45","object":"chat.completion.chunk","created":1745725837,"model":"pangu-mm-m2-img2txt-12k","choices":[{"index":0,"logprobs":null,"finish_reason":null,"delta":{"role":"assistant"}}],"usage":{"prompt_tokens":64,"total_tokens":64,"completion_tokens":0}}

data:{"id":"chat-59170add0fd1427bbca0388431058d45","object":"chat.completion.chunk","created":1745725837,"model":"pangu-mm-m2-img2txt-12k","choices":[{"index":0,"logprobs":null,"finish_reason":null,"delta":{"content":"在这"}}],"usage":{"prompt_tokens":64,"total_tokens":65,"completion_tokens":1}}

data:{"id":"chat-59170add0fd1427bbca0388431058d45","object":"chat.completion.chunk","created":1745725837,"model":"pangu-mm-m2-img2txt-12k","choices":[{"index":0,"logprobs":null,"finish_reason":"stop","stop_reason":null,"delta":{"content":"张"}}],"usage":{"prompt_tokens":64,"total_tokens":73,"completion_tokens":2}}

data:{"id":"chat-59170add0fd1427bbca0388431058d45","object":"chat.completion.chunk","created":1745725837,"model":"pangu-mm-m2-img2txt-12k","choices":[{"index":0,"logprobs":null,"finish_reason":"stop","stop_reason":null,"delta":{"content":"图片"}}],"usage":{"prompt_tokens":64,"total_tokens":73,"completion_tokens":3}}

......

data:{"id":"chat-59170add0fd1427bbca0388431058d45","object":"chat.completion.chunk","created":1745725837,"model":"pangu-mm-m2-img2txt-12k","choices":[],"usage":{"prompt_tokens":64,"total_tokens":73,"completion_tokens":9}}

event:{"usage":{"completionTokens":9,"promptTokens":64,"totalTokens":73},"tokens":64,"token_number":9}

data:[DONE]

状态码

请参见状态码

错误码

请参见错误码

相关文档