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.
Obtenga resultados JSON validados de los modelos
Los resultados estructurados son una capacidad de Amazon Bedrock que garantiza que las respuestas de los modelos se ajusten a los esquemas JSON y las definiciones de herramientas definidos por el usuario, lo que reduce la necesidad de mecanismos personalizados de análisis y validación en las implementaciones de IA de producción.
Ventajas
Los resultados estructurados abordan los desafíos críticos de las aplicaciones de IA de producción:
-
Garantiza el cumplimiento del esquema: elimina las tasas de error y los ciclos de reintento propios de los enfoques basados en solicitudes
-
Menor complejidad de desarrollo: elimina la necesidad de una lógica de análisis y validación personalizada
-
Menores costos operativos: reduce las solicitudes y los reintentos fallidos
-
Fiabilidad de producción: permite un despliegue seguro de aplicaciones de IA que requieren resultados predecibles y legibles por máquina
Funcionamiento
Las salidas estructuradas limitan las respuestas del modelo para que sigan un esquema específico, lo que garantiza una salida válida y analizable para el procesamiento posterior. Puede utilizar salidas estructuradas mediante dos mecanismos complementarios:
Formato de salida del esquema JSON
Para la InvokeModel API con modelos Anthropic Claude, utilice el campo de output_config.format solicitud. En el caso de los modelos de peso abierto, utilice el campo de response_format solicitud. Para las API de Converse, usa el campo de outputConfig.textFormat solicitud. La respuesta del modelo se ajustará al esquema JSON especificado.
Uso estricto de la herramienta
Añada la strict: true marca a las definiciones de las herramientas para permitir la validación del esquema en los nombres y las entradas de las herramientas. A continuación, las llamadas a las herramientas del modelo seguirán el esquema de entrada de herramientas definido.
Estos mecanismos se pueden usar de forma independiente o juntos en la misma solicitud. Consulte la documentación de la API de Bedrock para obtener más información.
Solicite un flujo de trabajo
A continuación, se describe cómo Amazon Bedrock procesa las solicitudes con resultados estructurados:
-
Solicitud inicial: incluye un esquema JSON mediante la definición de
outputConfig.textFormatoutput_config.format, o unresponse_formatparámetro o una herramienta con lastrict: truemarca en su solicitud de inferencia. -
Validación del esquema: Amazon Bedrock valida el formato de esquema JSON con el subconjunto JSON Schema Draft 2020-12 compatible. Si el esquema contiene funciones no compatibles, Amazon Bedrock devuelve inmediatamente un error 400.
-
First-time compilación: para los esquemas nuevos, Amazon Bedrock compila la gramática, lo que puede tardar unos minutos.
-
Almacenamiento en caché: las gramáticas compiladas correctamente se almacenan en caché durante 24 horas desde el primer acceso. Las gramáticas almacenadas en caché se cifran con claves. AWS-managed
-
Solicitudes posteriores: los esquemas idénticos de la misma cuenta utilizan gramáticas en caché, lo que da como resultado una latencia de inferencia comparable a la de las solicitudes estándar con una sobrecarga mínima.
-
Respuesta: recibe respuestas de inferencia estándar con un estricto cumplimiento del esquema.
Funciones del esquema JSON compatibles
Se admiten las siguientes funciones de JSON Schema Draft 2020-12:
Todos los tipos básicos:
object,array,string,integer,number,booleannullenum(solo cadenas, números, valores booleanos o nulos)const,anyOf,allOf(con limitaciones)$ref,$def, ydefinitions(solo referencias internas)Formatos de cadena:
date-timetimedate,duration,email,hostname,,uri,ipv4,ipv6,uuidMatriz
minItems(solo valores 0 y 1)
No se admiten las siguientes funciones:
Esquemas recursivos
Referencias externas
$refRestricciones numéricas (
minimum,maximum,multipleOf)Restricciones de cadena (
minLength,maxLength)additionalPropertiesestablecido en cualquier otra cosa que no seafalse
API o funciones compatibles
Puede utilizar salidas estructuradas en las siguientes funciones de Amazon Bedrock:
Converse y ConverseStream las API: utilice resultados estructurados con Converse y las ConverseStream API para realizar inferencias conversacionales.
InvokeModel y InvokeModelWithResponseStream API: utilice resultados estructurados con las InvokeModelWithResponseStream API InvokeModel y para realizar inferencias de un solo paso.
Cross-Region inferencia: utilice resultados estructurados en la inferencia entre regiones sin ninguna configuración adicional.
Inferencia por lotes: utilice salidas estructuradas dentro de la inferencia por lotes sin ninguna configuración adicional.
API de mensajes antrópicos en el bedrock-mantle punto final: la ruta de la API de Anthropic-style mensajes no admite salidas estructuradas (). https://bedrock-mantle.{region}.api.aws/anthropic/v1/messages El output_config.format parámetro se rechaza con un error 400. Para usar salidas estructuradas con Anthropic Claude modelos, envía la solicitud a través de la API de Converse o la InvokeModel API del bedrock-runtime punto final.
nota
Los resultados estructurados son incompatibles con las citas de los modelos antrópicos. Si habilita las citas mientras utiliza salidas estructuradas, el modelo devolverá un error de 400.
Modelos compatibles
Para ver qué modelos admiten salidas estructuradas, consulte los modelos de un vistazo y seleccione el modelo que le interese.
Solicitudes de ejemplo
Formato de salida del esquema JSON
Los siguientes ejemplos muestran cómo utilizar el formato de salida del esquema JSON con salidas estructuradas.
API de Converse
{ "messages": [ { "role": "user", "content": [ { "text": "Given the following unstructured data, extract it into the provided structure." }, { "text": "..." } ] } ], "outputConfig": { "textFormat": { "type": "json_schema", "structure": { "jsonSchema": { "schema": "{\"type\": \"object\", \"properties\": {\"title\": {\"type\": \"string\", \"description\": \"title\"}, \"summary\": {\"type\": \"string\", \"description\": \"summary\"}, \"next_steps\": {\"type\": \"string\", \"description\": \"next steps\"}}, \"required\": [\"title\", \"summary\", \"next_steps\"], \"additionalProperties\": false}", "name": "data_extraction", "description": "Extract structured data from unstructured text" } } } } }
InvokeModel (Claude antrópico)
{ "anthropic_version": "bedrock-2023-05-31", "messages": [ { "role": "user", "content": [ { "type": "text", "text": "Given the following unstructured data, extract it into the provided structure." }, { "type": "text", "text": "..." } ] } ], "max_tokens": 3000, "temperature": 1.0, "output_config": { "format": { "type": "json_schema", "schema": { "type": "object", "properties": { "title": { "type": "string", "description": "title" }, "summary": { "type": "string", "description": "summary" }, "next_steps": { "type": "string", "description": "next steps" } }, "required": [ "title", "summary", "next_steps" ], "additionalProperties": false } } } }
InvokeModel (Open-weight modelos)
{ "messages": [ { "role": "user", "content": "Given the following unstructured data, extract it into the provided structure." }, { "role": "user", "content": "..." } ], "inferenceConfig": { "maxTokens": 3000, "temperature": 1.0 }, "response_format": { "json_schema": { "name": "summarizer", "schema": { "type": "object", "properties": { "title": { "type": "string", "description": "title" }, "summary": { "type": "string", "description": "summary" }, "next_steps": { "type": "string", "description": "next steps" } }, "required": [ "title", "summary", "next_steps" ], "additionalProperties": false } }, "type": "json_schema" } }
Uso estricto de la herramienta
Los siguientes ejemplos muestran cómo utilizar el campo estricto con el uso de herramientas.
API de Converse
{ "messages": [ { "role": "user", "content": [ { "text": "What's the weather like in New York?" } ] } ], "toolConfig": { "tools": [ { "toolSpec": { "name": "get_weather", "description": "Get the current weather for a specified location", "strict": true, "inputSchema": { "json": { "type": "object", "properties": { "location": { "type": "string", "description": "The city and state, e.g. San Francisco, CA" }, "unit": { "type": "string", "enum": [ "fahrenheit", "celsius" ], "description": "The temperature unit to use" } }, "required": [ "location", "unit" ] } } } } ] } }
InvokeModel (Claude antrópico)
{ "anthropic_version": "bedrock-2023-05-31", "messages": [ { "role": "user", "content": [ { "type": "text", "text": "What's the weather like in San Francisco?" } ] } ], "max_tokens": 3000, "temperature": 1.0, "tools": [ { "name": "get_weather", "description": "Get the current weather for a specified location", "strict": true, "input_schema": { "type": "object", "properties": { "location": { "type": "string", "description": "The city and state, e.g. San Francisco, CA" }, "unit": { "type": "string", "enum": [ "fahrenheit", "celsius" ], "description": "The temperature unit to use" } }, "required": [ "location", "unit" ], "additionalProperties": false } } ] }
InvokeModel (Open-weight modelos)
{ "messages": [ { "role": "user", "content": "What's the weather like in San Francisco?" } ], "tools": [ { "type": "function", "function": { "name": "get_weather", "description": "Get the current weather for a specified location", "strict": true, "parameters": { "type": "object", "properties": { "location": { "type": "string", "description": "The city and state, e.g. San Francisco, CA" }, "unit": { "type": "string", "enum": [ "fahrenheit", "celsius" ], "description": "The temperature unit to use" } }, "required": [ "location", "unit" ] } } } ], "tool_choice": "auto", "max_tokens": 2000, "temperature": 1.0 }