View a markdown version of this page

Obtenga resultados JSON validados a partir de modelos - 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.

Obtenga resultados JSON validados a partir de 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 utilizar 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 bucles de reintento de los enfoques basados en las solicitudes

  • Reducción de la complejidad del desarrollo: elimina la necesidad de una lógica personalizada de análisis y validación

  • Menores costos operativos: reduce las solicitudes y los reintentos fallidos

  • Fiabilidad de la producción: permite la implementación segura de aplicaciones de inteligencia artificial que requieren resultados predecibles y legibles por máquina

Funcionamiento

Los resultados estructurados limitan las respuestas del modelo a seguir un esquema específico, lo que garantiza un resultado válido y analizable para el procesamiento posterior. Puede utilizar las salidas estructuradas a través de dos mecanismos complementarios:

Formato de salida del esquema JSON

Para la InvokeModel API con modelos de Anthropic Claude, utilice el campo de output_config.format solicitud. En el caso de los modelos de peso abiertos, 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 herramientas

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 en conjunto en la misma solicitud. Consulte la documentación de la API de Bedrock para obtener más información.

Solicite el flujo de trabajo

A continuación se describe cómo Amazon Bedrock procesa las solicitudes con resultados estructurados:

  1. Solicitud inicial: incluye un esquema JSON a través del outputConfig.textFormat response_format parámetro o una definición de herramienta con la strict: true marca en la solicitud de inferencia. output_config.format

  2. Validación del esquema: Amazon Bedrock valida el formato del esquema JSON comparándolo con el subconjunto compatible del borrador del esquema JSON 2020-12. Si el esquema contiene funciones no compatibles, Amazon Bedrock devuelve inmediatamente un error 400.

  3. First-time compilación: en el caso de los esquemas nuevos, Amazon Bedrock compila la gramática, lo que puede tardar unos minutos.

  4. 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 administradas. AWS

  5. Solicitudes posteriores: los esquemas idénticos de la misma cuenta utilizan gramáticas almacenadas en caché, lo que genera una latencia de inferencia comparable a la de las solicitudes estándar, con una sobrecarga mínima.

  6. Respuesta: recibe respuestas de inferencia estándar que cumplen estrictamente con el esquema.

Funciones del esquema JSON compatibles

Se admiten las siguientes funciones del borrador del esquema JSON 2020-12:

  • Todos los tipos básicos:object,array,string,integer,number, boolean null

  • enum(solo cadenas, números, valores booleanos o nulos)

  • const,anyOf, allOf (con limitaciones)

  • $ref,$def, y definitions (solo referencias internas)

  • Formatos de cadena: date-time time dateduration,email,hostname,uri,ipv4,ipv6, uuid

  • Matriz minItems (solo valores 0 y 1)

No se admiten las siguientes funciones:

  • Esquemas recursivos

  • Referencias externas $ref

  • Restricciones numéricas (minimum,maximum,multipleOf)

  • Restricciones de cadenas (minLength,maxLength)

  • additionalPropertiesestablecido en cualquier cosa que no sea false

API o funciones compatibles

Puede usar salidas estructuradas en las siguientes funciones de Amazon Bedrock:

API o función Compatible Notas
Converse y API ConverseStream Inferencia conversacional.
InvokeModely API InvokeModelWithResponseStream Single-turn inferencia.
Cross-Region inferencia Funciona sin ninguna configuración adicional.
Inferencia en lotes Funciona sin ninguna configuración adicional.
AnthropicAPI de mensajes en el bedrock-mantle punto final (https://bedrock-mantle.{region}.api.aws/anthropic/v1/messages) No 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

Las salidas estructuradas son incompatibles con las citas de los modelos antrópicos. Si habilita las citas mientras usa salidas estructuradas, el modelo devolverá un error 400.

Modelos compatibles

Para ver qué modelos admiten salidas estructuradas, consulte la sección 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 usar 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 herramientas

Los siguientes ejemplos muestran cómo usar 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 }