图像问答
功能介绍
多模态图像问答接口提供图片描述、视觉问答、OCR等能力,常用图像理解、视觉问答等理解和生成任务。
URI
获取URI方式请参见请求URI。
多模态推理服务提供两种推理接口调用:
- 盘古推理接口(V1推理接口)
- 业界通用的OpenAI格式接口(V2推理接口)
V1、V2调用接口的鉴权方式不同,请求体和返回体略有差异。两种接口定义如推理接口所示。
API分类 |
API访问路径(URI) |
---|---|
V1推理接口 |
POST /v1/{project_id}/deployments/{deployment_id}/chat/completions |
V2推理接口 |
POST /api/v2/chat/completions |
V1推理接口URI需要输入额外参数,参数说明如路径参数所示:
请求参数
V1、V2推理接口的鉴权方式不同,请求参数与响应参数也有不同,说明如下:
Header参数
- V1接口支持Token鉴权方式,也支持API Key鉴权方式。两种鉴权方式请求Header参数说明如下:
- 使用Token认证方式的请求Header参数见请求Header参数(Token认证)。
表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
- V2接口仅支持API Key鉴权方式。请求Header参数见表5
请求Body参数
V1、V2推理接口请求Body参数一致,如表6描述。
参数 |
是否必选 |
参数类型 |
描述 |
---|---|---|---|
messages |
是 |
Array of message objects |
参数解释: 多轮对话问答对。 约束限制: 不涉及 取值范围: 数组长度:1 - 20 默认取值: 不涉及 |
model |
V1推理接口:否 V2推理接口:是 |
String |
参数解释: 使用的推理服务模型名称,为推理服务部署时指定的Deployed_Model,可在推理服务详情页面查询到。V2推理接口必须指定此参数,V1推理接口不需要此参数。 约束限制: 不涉及 取值范围: 字符串长度最大64,最小1。 默认取值: 不涉及 |
stream |
否 |
Boolean |
参数解释: 流式调用的开启开关。 约束限制: 不涉及 取值范围:
默认取值: 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 |
参数解释: 内容审核配置项。 约束限制: 不涉及 取值范围: 不涉及 默认取值: 不涉及 |
参数 |
是否必选 |
参数类型 |
描述 |
---|---|---|---|
role |
V1推理接口:否 V2推理接口:是 |
String |
参数解释: 对话的角色,取值为system、user、assistant。 如果需要模型以某个人设形象回答问题,可以将role参数设置为system。不使用人设时,可设置为user。在一次会话请求中,人设只需要设置一次。多轮对话中,用户输入提示词的role设置为user,推理结果的role设置为assistant。 约束限制: 不涉及 取值范围: [systeml, user, assistant] 默认取值: 不涉及 |
content |
是 |
Array of content objects |
参数解释: 问答对文本内容。 约束限制: 最小长度:1 取值范围: 不涉及 默认取值: 不涉及 |
参数 |
是否必选 |
参数类型 |
描述 |
---|---|---|---|
type |
是 |
String |
参数解释: 输入内容的类型。 约束限制: 不涉及 取值范围:
默认取值: 不涉及 |
text |
否 |
String |
参数解释: 问答对文本内容。 约束限制: 最小长度:1 type为text时必传。 取值范围: 不涉及 默认取值: 不涉及 |
image_url |
否 text、image_url不能同时为空 |
image_url object |
参数解释: 问答对图像内容。 约束限制: type为image_url时必传。 取值范围: 不涉及 默认取值: 不涉及 |
参数 |
是否必选 |
参数类型 |
描述 |
---|---|---|---|
url |
是 |
String |
参数解释: 标识符 + 图片的base64编码组成的字符串。 约束限制: 需要符合"data:image/jpg;base64,{base64_str}"的格式,base64_str是图片的base64编码,示例:data:image/jpg;base64,/9j/4AAQSKZJRg......qkf/z。 取值范围: 不涉及 默认取值: 不涉及 |
参数 |
参数类型 |
描述 |
---|---|---|
black_glossary_names |
String |
参数解释: 黑名单词库列表。 约束限制: 仅对开启高级版的推理服务生效。 取值范围: 不涉及 默认取值: 不涉及 |
white_glossary_names |
String |
参数解释: 白名单词库列表。 约束限制: 仅对开启高级版的推理服务生效。 取值范围: 不涉及 默认取值: 不涉及 |
question_moderation |
boolean |
参数解释: 是否开启对提示词进行内容审核。 约束限制: 仅对开启高级版的推理服务生效。 取值范围:
默认取值: true。 |
answer_moderation |
boolean |
参数解释: 是否开启对推理结果进行内容审核。 约束限制: 仅对开启高级版的推理服务生效。 取值范围:
默认取值: true。 |
show_result |
boolean |
参数解释: 是否返回内容审核不通过原因。 约束限制: 不涉及 取值范围:
默认取值: false。 |
响应参数
非流式响应(请求中stream参数为空或false)
状态码: 200
参数 |
参数类型 |
描述 |
---|---|---|
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时返回。 约束限制: 不涉及 取值范围: 不涉及 默认取值: 不涉及 |
参数 |
参数类型 |
描述 |
---|---|---|
index |
Integer |
参数解释: 回复的索引。 约束限制: 不涉及 取值范围: 不涉及 默认取值: 不涉及 |
message |
Array of MessageItem objects |
参数解释: 模型响应。 约束限制: 不涉及 取值范围: 不涉及 默认取值: 不涉及 |
参数 |
参数类型 |
描述 |
---|---|---|
role |
String |
参数解释: 角色。 约束限制: 不涉及 取值范围: 不涉及 默认取值: 不涉及 |
content |
String |
参数解释: 模型响应。 约束限制: 不涉及 取值范围: 不涉及 默认取值: 不涉及 |
参数 |
参数类型 |
描述 |
---|---|---|
completion_tokens |
Number |
参数解释: 表示模型生成的答案中包含的tokens的数量。 约束限制: 不涉及 取值范围: 不涉及 默认取值: 不涉及 |
prompt_tokens |
Number |
参数解释: 表示生成结果时使用的提示文本的tokens的数量。 约束限制: 不涉及 取值范围: 不涉及 默认取值: 不涉及 |
total_tokens |
Number |
参数解释: 对话过程中使用的tokens总数。 约束限制: 不涉及 取值范围: 不涉及 默认取值: 不涉及 |
参数 |
参数类型 |
描述 |
---|---|---|
request_id |
String |
参数解释: 调用盘古护栏审核接口请求ID。 约束限制: 不涉及 取值范围: 不涉及 默认取值: 不涉及 |
result |
object |
参数解释: 审核结果。 约束限制: 不涉及 取值范围: 不涉及 默认取值: 不涉及 |
label |
String |
参数解释: 当前内容片段的风险类型。 约束限制: 不涉及 取值范围: 不涉及 默认取值: 不涉及 |
流式响应(请求中stream参数为true)
状态码: 200
参数 |
参数类型 |
描述 |
---|---|---|
data |
参数解释: stream=true时,模型生成的消息以流式形式返回。生成的内容以增量的方式逐步发送回来,每个data字段均包含一部分生成的内容,直到所有data返回,响应结束。 约束限制: 不涉及 取值范围: 不涉及 默认取值: 不涉及 |
参数 |
参数类型 |
描述 |
---|---|---|
id |
String |
参数解释: 该对话的唯一标识符。 约束限制: 不涉及 取值范围: 不涉及 默认取值: 不涉及 |
created |
Integer |
参数解释: 创建聊天完成时的Unix时间戳(以秒为单位)。流式响应的每个chunk的时间戳相同。 约束限制: 不涉及 取值范围: 不涉及 默认取值: 不涉及 |
model |
String |
参数解释: 生成该completion的模型名。 约束限制: 不涉及 取值范围: 不涉及 默认取值: 不涉及 |
object |
String |
参数解释: 对象的类型, 其值为chat.completion.chunk。 约束限制: 不涉及 取值范围: 不涉及 默认取值: 不涉及 |
choices |
ChatCompletionResponseStreamChoice |
参数解释: 模型生成的completion的选择列表。 约束限制: 不涉及 取值范围: 不涉及 默认取值: 不涉及 |
usage |
UsageInfo |
参数解释: 该对话请求的token用量信息。该参数可以帮助用户了解和控制模型的使用情况,避免超出Tokens限制。 约束限制: 不涉及 取值范围: 不涉及 默认取值: 不涉及 |
参数 |
参数类型 |
描述 |
---|---|---|
index |
Integer |
参数解释: 该completion在模型生成的completion的选择列表中的索引。 约束限制: 不涉及 取值范围: 不涉及 默认取值: 不涉及 |
finish_reason |
String |
参数解释: 模型停止生成token的原因。 约束限制: 不涉及 取值范围: [stop, length, content_filter, tool_calls, insufficient_system_resource]
默认取值: 不涉及 |
delta |
DeltaMessage |
参数解释: V2推理接口流式返回的一个completion增量。 V1推理接口返回体不包含此参数。 约束限制: 不涉及 取值范围: 不涉及 默认取值: 不涉及 |
message |
DeltaMessage |
参数解释: V1推理接口流式返回的一个completion增量。 V2推理接口返回体不包含此参数。 约束限制: 不涉及 取值范围: 不涉及 默认取值: 不涉及 |
参数 |
参数类型 |
描述 |
---|---|---|
role |
String |
参数解释: 产生这条消息的角色。 约束限制: 不涉及 取值范围: 不涉及 默认取值: 不涉及 |
content |
String |
参数解释: completion增量的内容。 约束限制: 不涉及 取值范围: 不涉及 默认取值: 不涉及 |
reasoning_content |
String |
参数解释: 内容为最终答案之前的推理内容(模型的思考过程)。 约束限制: 仅适用于支持思考过程的模型。 取值范围: 不涉及 默认取值: 不涉及 |
参数 |
参数类型 |
描述 |
---|---|---|
prompt_tokens |
Integer |
参数解释: 用户输入的提示词及默认人设的Token数。 约束限制: 不涉及 取值范围: 不涉及 默认取值: 不涉及 |
completion_tokens |
Integer |
参数解释: 推理服务返回结果的Token数。 约束限制: 不涉及 取值范围: 不涉及 默认取值: 不涉及 |
total_tokens |
Integer |
参数解释: 总消耗token数。 约束限制: 不涉及 取值范围: 不涉及 默认取值: 不涉及 |
参数 |
参数类型 |
描述 |
---|---|---|
suggestion |
String |
参数解释: 审核结果:block表示未通过。 约束限制: 不涉及 取值范围: 不涉及 默认取值: 不涉及 |
reply |
String |
参数解释: 兜底回复:审核未通过时兜底回复为有效回复,兜底策略。 约束限制: 不涉及 取值范围: 不涉及 默认取值: 不涉及 |
moderation_type |
String |
参数解释: 内容审核拦截类型,请求参数show_result设为true,且盘古护栏拦截时返回。包含以下属性: question:用户提问。 answer:模型回答。 约束限制: 不涉及 取值范围: 不涉及 默认取值: 不涉及 |
moderation_result |
参数解释: 盘古护栏审核拦截详情。请求参数show_result设为true,且盘古护栏拦截时返回。 约束限制: 不涉及 取值范围: 不涉及 默认取值: 不涉及 |
状态码: 400
接口报错的场景下,V1推理接口返回的报错信息符合华为云规范;V2推理接口则会对外透传推理服务返回的错误信息,通常符合OpenAi接口格式。
参数 |
参数类型 |
描述 |
---|---|---|
error_msg |
String |
错误信息。 |
error_code |
String |
错误码。 |
details |
List<Object> |
推理服务返回的报错信息,具体的格式、内容取决于推理服务。 |
参数 |
参数类型 |
描述 |
---|---|---|
error |
错误信息。 |
|
id |
String |
请求ID。 |
请求示例
接口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]
状态码
请参见状态码。
错误码
请参见错误码。