导入模型的高级 API 功能 - Amazon Bedrock

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

导入模型的高级 API 功能

本页提供了 2025 年 11 月 11 日之后进口的车型可用的高级功能的详细示例。这些功能包括用于受控生成的结构化输出、用于多图像处理的增强视觉支持、用于信心洞察的日志概率以及模型调用工具。GPT-OSS

结构化输出

结构化输出允许按照特定的格式、架构或模式进行受控生成。此功能可确保模型的响应符合预定义的约束,因此非常适合需要一致的数据格式、API 集成或自动处理管道的应用程序。

通过两个参数支持自定义模型导入的结构化输出:

  • response_format-支撑json_objectjson_schema类型

  • structured_outputs-支持jsonregexchoice、和grammar类型

注意

在 “自定义模型导入” 中使用结构化输出时,由于生成过程中的约束验证,客户应该期望在性能上进行权衡。诸如choicejson_object之类的简单约束影响最小,而复杂的约束(如json_schema和)grammar会显著增加延迟并降低吞吐量。为了获得最佳性能,请尽可能使用更简单的约束类型,并保持架构扁平化而不是深度嵌套。

以下示例演示了对不同 API 格式的结构化输出支持。Pydantic 模型的定义是:

from pydantic import BaseModel from enum import Enum class CarType(str, Enum): sedan = "sedan" suv = "SUV" truck = "Truck" coupe = "Coupe" class CarDescription(BaseModel): brand: str model: str car_type: CarType
BedrockCompletion

BedrockCompletion 仅支持使用带json_objectjson_schema类型的response_format参数的结构化输出。

示例:JSON 架构

payload = { "prompt": "Generate a JSON with the brand, model and car_type of the most iconic car from the 90's", "response_format": { "type": "json_schema", "json_schema": CarDescription.model_json_schema() } } response = client.invoke_model( modelId='your-model-arn', body=json.dumps(payload), accept='application/json', contentType='application/json' ) response_body = json.loads(response['body'].read())

示例响应:

{ "generation": "{\n \"brand\": \"Ferrari\",\n \"model\": \"F40\",\n \"car_type\": \"SUV\"\n }", "prompt_token_count": 22, "generation_token_count": 30, "stop_reason": "stop", "logprobs": null }
OpenAICompletion

Open 同时AICompletion 支持response_format(json_object、json_schema)和structured_outputs(json、regex、choice、语法)参数。使用max_tokens代替将请求路由max_gen_len到 Open AICompletion。

示例:结构化输出-选择

payload = { "prompt": "Classify the sentiment of this sentence. Amazon Bedrock CMI is Amazing!", "max_tokens": 10, "structured_outputs": { "choice": ["positive", "negative"] } } response = client.invoke_model( modelId='your-model-arn', body=json.dumps(payload), accept='application/json', contentType='application/json' ) response_body = json.loads(response['body'].read())

示例响应:

{ "id": "cmpl-01f94c4652d24870bbb4d5418a01c384", "object": "text_completion", "choices": [ { "index": 0, "text": "positive", "finish_reason": "stop" } ], "usage": { "prompt_tokens": 17, "completion_tokens": 4 } }
OpenAIChatCompletion

Open C AIChat ompletion 同时支持response_format(json_object、json_schema)和structured_outputs(json、regex、choice、语法)参数。

示例:响应格式-JSON 架构

payload = { "messages": [ {"role": "user", "content": "Generate a JSON with the brand, model and car_type of the most iconic car from the 90's"} ], "max_tokens": 100, "response_format": { "type": "json_schema", "json_schema": { "name": "car-description", "schema": CarDescription.model_json_schema() } } } response = client.invoke_model( modelId='your-model-arn', body=json.dumps(payload), accept='application/json', contentType='application/json' ) response_body = json.loads(response['body'].read())

示例响应:

{ "id": "chatcmpl-cae5a43b0a924b8eb434510cbf978a19", "object": "chat.completion", "choices": [ { "index": 0, "message": { "role": "assistant", "content": "{\"brand\": \"Dodge\", \"model\": \"Viper\", \"car_type\": \"Coupe\"}" }, "finish_reason": "stop" } ], "usage": { "prompt_tokens": 56, "completion_tokens": 23 } }

视觉支持

视觉功能支持处理图像和文本输入,增强了对复杂视觉分析任务的多图像支持。自定义模型导入现在支持每个请求最多支持 3 张图像,此功能增强了之前的单张图像限制。

支持的 API:仅限打开AIChat完成。2025 年 11 月 11 日之后进口的所有型号都将默认使用此 API 来实现视觉功能。

图片要求:

  • 需要 Base64 编码-图像 URLs 会导致请求失败

  • 每次请求最多 3 张图片

  • 高分辨率图像会显著增加处理时间和内存使用量

警告

高分辨率图像会显著增加处理时间和内存使用量,并可能导致超时错误。多张高分辨率图像对性能的影响呈指数级增长。为获得最佳性能,请适当调整图像大小,并尽可能使用较低的细节级别。

OpenAIChatCompletion

示例:多图像处理

import json import boto3 import base64 client = boto3.client('bedrock-runtime', region_name='us-east-1') # Load and encode images with open('/path/to/car_image_1.jpg', 'rb') as f: image_data_1 = base64.b64encode(f.read()).decode('utf-8') with open('/path/to/car_image_2.jpg', 'rb') as f: image_data_2 = base64.b64encode(f.read()).decode('utf-8') payload = { "messages": [ { "role": "system", "content": "You are a helpful assistant that can analyze images." }, { "role": "user", "content": [ { "type": "text", "text": "Spot the difference between the two images?" }, { "type": "image_url", "image_url": { "url": f"data:image/jpeg;base64,{image_data_1}" } }, { "type": "image_url", "image_url": { "url": f"data:image/jpeg;base64,{image_data_2}" } } ] } ], "max_tokens": 300, "temperature": 0.5 } response = client.invoke_model( modelId='your-model-arn', body=json.dumps(payload), accept='application/json', contentType='application/json' ) response_body = json.loads(response['body'].read())

示例响应:

{ "id": "chatcmpl-ccae8a67e62f4014a9ffcbedfff96f44", "object": "chat.completion", "created": 1763167018, "model": "667387627229-g6vkuhd609s4", "choices": [ { "index": 0, "message": { "role": "assistant", "content": "There are no differences between the two images provided. They appear to be identical.", "refusal": null, "annotations": null, "audio": null, "function_call": null, "tool_calls": [], "reasoning_content": null }, "logprobs": null, "finish_reason": "stop", "stop_reason": null, "token_ids": null } ], "service_tier": null, "system_fingerprint": null, "usage": { "prompt_tokens": 2795, "total_tokens": 2812, "completion_tokens": 17, "prompt_tokens_details": null }, "prompt_logprobs": null, "prompt_token_ids": null, "kv_transfer_params": null }

对数概率

对数概率表示序列中每个代币的可能性,计算方式为 log (p),其中 p 是给定上下文中先前一个标记的代币在任何位置的概率。由于日志概率是加法的,因此序列概率等于单个代币日志概率的总和,因此它们可用于按每个代币的平均分数对世代进行排名。自定义模型导入将始终返回请求令牌的原始 logprob 值。

关键应用包括日志探测器启用自定义置信度阈值的分类任务、使用置信度分数来减少幻觉的检索问答系统、基于代币可能性的自动完成建议,以及用于比较不同提示模型性能的困惑度计算。Log probs 还提供代币级别的分析功能,允许开发人员检查模型考虑的替代代币。

注意

日志探测器不会被缓存。对于需要提示 logprobs 的请求,系统将忽略前缀缓存并重新计算完整提示的预填以生成 logprobs。在使用 logprobs 时,这带来了明显的性能权衡。

日志概率支持因 API 格式而异:

  • BedrockCompletion -仅输出令牌

  • 打开 AICompletion -提示和输出标记

  • 打开AIChat完成-提示和输出标记

BedrockCompletion

BedrockCompletion 仅支持输出令牌日志探测器。这将返回每个输出令牌的前 1 个 logprob。

payload = { "prompt": "How is the rainbow formed?", "max_gen_len": 10, "temperature": 0.5, "return_logprobs": True } response = client.invoke_model( modelId='your-model-arn', body=json.dumps(payload), accept='application/json', contentType='application/json' ) response_body = json.loads(response['body'].read())

响应示例(截断):

{ "generation": " A rainbow is formed when sunlight passes through water dro", "prompt_token_count": 7, "generation_token_count": 10, "stop_reason": "length", "logprobs": [ { "362": -2.1413702964782715 }, { "48713": -0.8180374503135681 }, { "374": -0.09657637774944305 }, ... ] }
OpenAIChatCompletion

Open AIChat Completion 支持提示符和输出令牌日志探测器。你可以设置top_logprobs=Nprompt_logprobs=N其中 N 是一个整数,表示每个位置的 N 个最有可能的代币的对数概率。

payload = { "messages": [ { "role": "user", "content": "How is the rainbow formed?" } ], "max_tokens": 10, "temperature": 0.5, "logprobs": True, "top_logprobs": 1, "prompt_logprobs": 1 } response = client.invoke_model( modelId='your-model-arn', body=json.dumps(payload), accept='application/json', contentType='application/json' ) response_body = json.loads(response['body'].read())

响应示例(截断):

{ "id": "chatcmpl-xxx", "object": "chat.completion", "choices": [ { "index": 0, "message": { "role": "assistant", "content": "A rainbow is formed..." }, "logprobs": { "content": [ { "token": "A", "logprob": -0.07903262227773666, "bytes": [65], "top_logprobs": [ { "token": "A", "logprob": -0.07903262227773666, "bytes": [65] } ] }, { "token": " rainbow", "logprob": -0.20187227427959442, "bytes": [32, 114, 97, 105, 110, 98, 111, 119], "top_logprobs": [...] }, ... ] }, "finish_reason": "length" } ], "usage": { "prompt_tokens": 41, "completion_tokens": 10, "total_tokens": 51 } }