Obtenga resultados JSON validados de los 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 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 a través de 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 Converse APIs, 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:

  1. Solicitud inicial: incluye un esquema JSON mediante la definición de outputConfig.textFormatoutput_config.format, o un response_format parámetro o una herramienta con la strict: true marca en su solicitud de inferencia.

  2. 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.

  3. Compilación por primera vez: para 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 por AWS.

  5. 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.

  6. Respuesta: recibe respuestas de inferencia estándar con un estricto cumplimiento del esquema.

Compatible con nuestras APIs funciones

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

Converse y ConverseStream APIs: utilice salidas estructuradas con Converse y ConverseStream APIs para realizar inferencias conversacionales.

InvokeModel y InvokeModelWithResponseStream APIs: utilice salidas estructuradas con y para la inferencia de un solo InvokeModel giro InvokeModelWithResponseStream APIs .

Inferencia entre regiones: utilice resultados estructurados dentro de 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.

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

Las salidas estructuradas están generalmente disponibles en todas las regiones comerciales de AWS para algunos modelos sin servidor de Amazon Bedrock. Para ver la lista de modelos compatibles, consulte Soporte de modelos por función.

Anthropic
  • Claude Haiku 4.5 () anthropic.claude-haiku-4-5-20251001-v1:0

  • Soneto Claude 4.5 () anthropic.claude-sonnet-4-5-20250929-v1:0

  • Claudio Opus 4.5 () anthropic.claude-opus-4-5-20251101-v1:0

  • Claude Opus 4.6 () anthropic.claude-opus-4-6-v1

Qwen
  • Qwen3 235 B A2 B 2507 () qwen.qwen3-235b-a22b-2507-v1:0

  • Qen3 32B (denso) () qwen.qwen3-32b-v1:0

  • Qwen3-Coder-30B-A3B-Instruct () qwen.qwen3-coder-30b-a3b-v1:0

  • Codificador Qwen3 480B A35B Instruct () qwen.qwen3-coder-480b-a35b-v1:0

  • Qwen3 Next 80B A3B qwen.qwen3-next-80b-a3b ()

  • Qwen3 VL 235B A2B () qwen.qwen3-vl-235b-a22b

OpenAI
  • openai.gpt-oss-120b-1:0gpt-oss-120b ()

  • gpt-oss-20b () openai.gpt-oss-20b-1:0

  • GPT OSS Safeguard 120B () openai.gpt-oss-safeguard-120b

  • GPT OSS Safeguard 20B () openai.gpt-oss-safeguard-20b

DeepSeek
  • DeepSeek-V3.1 () deepseek.v3-v1:0

Google
  • Gemma 3 12 B IT () google.gemma-3-12b-it

  • Gemma 3 27B PT () google.gemma-3-27b-it

MiniMax
  • MiniMax M2 (2) minimax.minimax-m2

Mistral AI
  • Magistral Small 2509 () mistral.magistral-small-2509

  • Ministral 3B () mistral.ministral-3-3b-instruct

  • Ministerial 3 (8B) mistral.ministral-3-8b-instruct

  • Ministral 14B 3.0 () mistral.ministral-3-14b-instruct

  • Mistral Large (3) mistral.mistral-large-3-675b-instruct

  • Voxtral Mini 3B 2507 () mistral.voxtral-mini-3b-2507

  • Voxtral Pequeño 24V 2507 () mistral.voxtral-small-24b-2507

Moonshot AI
  • Kimi K2 Pensando () moonshot.kimi-k2-thinking

NVIDIA
  • NVIDIA Nemotron Nano 12B v2 VL () BF16 nvidia.nemotron-nano-12b-v2

  • NVIDIA Nemotron Nano 9B v2 () nvidia.nemotron-nano-9b-v2

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 (Modelos de peso abierto)

{ "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 (Modelos de peso abierto)

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