Funciones de API avanzadas para modelos importados - Amazon Bedrock

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Funciones de API avanzadas para modelos importados

Esta página proporciona ejemplos detallados de las funciones avanzadas disponibles para los modelos importados después del 11 de noviembre de 2025. Estas capacidades incluyen salidas estructuradas para una generación controlada, un soporte de visión mejorado para el procesamiento de múltiples imágenes, probabilidades de registro para obtener información fiable y uso de herramientas para GPT-OSS crear modelos.

Salidas estructuradas

Las salidas estructuradas permiten la generación controlada siguiendo formatos, esquemas o patrones específicos. Esta función garantiza que la respuesta del modelo cumpla con las restricciones predefinidas, lo que lo hace ideal para aplicaciones que requieren formatos de datos consistentes, integraciones de API o procesos de procesamiento automatizados.

Las salidas estructuradas de Custom Model Import se admiten mediante dos parámetros:

  • response_format- Soportes json_object y json_schema tipos

  • structured_outputs- Soportes json regexchoice, y grammar tipos

nota

Al utilizar resultados estructurados en Custom Model Import, los clientes deben esperar que el rendimiento se vea reducido debido a la validación de las restricciones durante la generación. Las restricciones simples json_object tienen un impacto mínimo, mientras que las restricciones complejas grammar pueden aumentar significativamente la latencia json_schema y reducir el rendimiento. choice Para obtener un rendimiento óptimo, utilice tipos de restricciones más simples siempre que sea posible y mantenga los esquemas planos en lugar de anidados en profundidad.

Los siguientes ejemplos muestran la compatibilidad de los resultados estructurados en diferentes formatos de API. La definición del modelo Pydantic es:

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 admite salidas estructuradas utilizando únicamente el response_format parámetro con json_schema tipos json_object y.

Ejemplo: esquema 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())

Ejemplo de respuesta:

{ "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 admite parámetros response_format (json_object, json_schema) y structured_outputs (json, regex, choice, grammar). Úselo max_tokens en lugar de para enrutar las solicitudes a Open. max_gen_len AICompletion

Ejemplo: Salidas estructuradas: elección

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())

Ejemplo de respuesta:

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

Open AIChat Completion admite parámetros response_format (json_object, json_schema) y structured_outputs (json, regex, choice, grammar).

Ejemplo: Formato de respuesta: esquema 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())

Ejemplo de respuesta:

{ "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 } }

Vision Support

Las capacidades de visión permiten procesar imágenes junto con la entrada de texto, con una compatibilidad mejorada con varias imágenes para tareas complejas de análisis visual. La importación de modelos personalizados ahora admite hasta 3 imágenes por solicitud, lo que supone una mejora con respecto a la limitación anterior de una sola imagen.

API compatible: solo Open AIChat Completion. Todos los modelos importados después del 11 de noviembre de 2025 utilizarán esta API de forma predeterminada para las capacidades de visión.

Requisitos de imagen:

  • Se requiere la codificación Base64: la imagen URLs provocará errores en las solicitudes

  • Máximo 3 imágenes por solicitud

  • Las imágenes de alta resolución aumentan considerablemente el tiempo de procesamiento y el uso de memoria

aviso

Las imágenes de alta resolución aumentan considerablemente el tiempo de procesamiento y el uso de memoria y pueden provocar errores de tiempo de espera. Varias imágenes de alta resolución agravan el impacto en el rendimiento de forma exponencial. Para obtener un rendimiento óptimo, cambie el tamaño de las imágenes de forma adecuada y utilice niveles de detalle más bajos siempre que sea posible.

OpenAIChatCompletion

Ejemplo: procesamiento de varias imágenes

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())

Ejemplo de respuesta:

{ "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 }

Probabilidades logarítmicas

Las probabilidades logarítmicas representan la probabilidad de que cada ficha aparezca en una secuencia, calculada como log (p), donde p es la probabilidad de que una ficha se encuentre en cualquier posición dada su ficha anterior en el contexto. Como los probos logarítmicos son aditivos, la probabilidad de secuencia es igual a la suma de los probes logarítmicos individuales, lo que los hace útiles para clasificar generaciones según las puntuaciones medias por token. La importación de modelos personalizados siempre devolverá los valores de logprob sin procesar de los tokens solicitados.

Las aplicaciones clave incluyen tareas de clasificación en las que los sondeos de registro permiten establecer umbrales de confianza personalizados, sistemas de recuperación de preguntas y respuestas que utilizan puntuaciones de confianza para reducir las alucinaciones, completar automáticamente sugerencias basadas en la probabilidad simbólica y cálculos de perplejidad para comparar el rendimiento del modelo en función de las indicaciones. Los sondeos de registro también proporcionan funciones de análisis a nivel de token, lo que permite a los desarrolladores examinar los tokens alternativos que el modelo ha considerado.

nota

Los logprobs no se almacenan en caché. En el caso de una solicitud que requiera problemas de registro rápidos, el sistema ignorará la caché de prefijos y volverá a calcular el llenado previo del mensaje completo para generar los problemas de registro. Esto supone una evidente desventaja en cuanto al rendimiento cuando se utilizan los logprobs.

El soporte de probabilidad logarítmica varía según el formato de la API:

  • BedrockCompletion - Solo fichas de salida

  • AbiertoAICompletion : solicita y genera tokens

  • AIChatFinalización abierta: fichas de solicitud y salida

BedrockCompletion

BedrockCompletion solo admite los logprobs de token de salida. Esto devolverá el primer logprob de cada token de salida.

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())

Ejemplo de respuesta (truncada):

{ "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 admite problemas de registro tanto de entrada como de token de salida. Puede establecer top_logprobs=N y prompt_logprobs=N donde N es un número entero que representa las probabilidades logarítmicas de las N fichas más probables en cada posició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())

Ejemplo de respuesta (truncada):

{ "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 } }