

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
<a name="structured-output"></a>

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
<a name="structured-output-benefits"></a>

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
+ **Reducción de la complejidad del 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 la producción**: permite un despliegue seguro de aplicaciones de IA que requieren resultados predecibles y legibles por máquina

## Funcionamiento
<a name="structured-output-how-it-works"></a>

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
<a name="structured-output-json-schema"></a>

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 name="structured-output-strict-tool-use"></a>

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 utilizar de forma independiente o en conjunto en la misma solicitud. Consulte la [documentación de la API de Bedrock](https://docs.aws.amazon.com/bedrock/latest/APIReference/welcome.html) para obtener más información.

### Solicite un flujo de trabajo
<a name="structured-output-request-workflow"></a>

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.textFormat``output_config.format`, o un `response_format` parámetro o una herramienta con la `strict: true` marca en su solicitud de inferencia.

1. **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.

1. **Compilación por primera vez**: para los esquemas nuevos, Amazon Bedrock compila la gramática, lo que puede tardar unos minutos.

1. **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.

1. **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.

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

## Compatible con nuestras APIs funciones
<a name="structured-output-supported-apis"></a>

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
<a name="structured-output-supported-models"></a>

Para ver qué modelos admiten salidas estructuradas, consulte los [modelos de un vistazo](model-cards.md) y seleccione el modelo que le interese.

## Solicitudes de ejemplo
<a name="structured-output-examples"></a>

### Formato de salida del esquema JSON
<a name="structured-output-json-schema-examples"></a>

Los siguientes ejemplos muestran cómo utilizar el formato de salida del esquema JSON con salidas estructuradas.

#### API de Converse
<a name="json-schema-converse"></a>

##### Ver ejemplo
<a name="w2aac15c32c35c13b3b5b3b1"></a>

```
{
  "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)
<a name="json-schema-invokemodel-claude"></a>

##### Ver ejemplo
<a name="w2aac15c32c35c13b3b7b3b1"></a>

```
{
  "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)
<a name="json-schema-invokemodel-openweight"></a>

##### Ver ejemplo
<a name="w2aac15c32c35c13b3b9b3b1"></a>

```
{
  "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
<a name="structured-output-strict-tool-examples"></a>

Los siguientes ejemplos muestran cómo utilizar el campo estricto con el uso de herramientas.

#### API de Converse
<a name="strict-tool-converse"></a>

##### Ver ejemplo
<a name="w2aac15c32c35c13b5b5b3b1"></a>

```
{
  "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)
<a name="strict-tool-invokemodel-claude"></a>

##### Ver ejemplo
<a name="w2aac15c32c35c13b5b7b3b1"></a>

```
{
  "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)
<a name="strict-tool-invokemodel-openweight"></a>

##### Ver ejemplo
<a name="w2aac15c32c35c13b5b9b3b1"></a>

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