本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
导入模型的高级 API 功能
本页提供了 2025 年 11 月 11 日之后进口的车型可用的高级功能的详细示例。这些功能包括用于受控生成的结构化输出、用于多图像处理的增强视觉支持、用于信心洞察的日志概率以及模型调用工具。GPT-OSS
结构化输出
结构化输出允许按照特定的格式、架构或模式进行受控生成。此功能可确保模型的响应符合预定义的约束,因此非常适合需要一致的数据格式、API 集成或自动处理管道的应用程序。
通过两个参数支持自定义模型导入的结构化输出:
在 “自定义模型导入” 中使用结构化输出时,由于生成过程中的约束验证,客户应该期望在性能上进行权衡。诸如choice和json_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_object和json_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 来实现视觉功能。
图片要求:
高分辨率图像会显著增加处理时间和内存使用量,并可能导致超时错误。多张高分辨率图像对性能的影响呈指数级增长。为获得最佳性能,请适当调整图像大小,并尽可能使用较低的细节级别。
- 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=N,prompt_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
}
}