

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

# Obtenha resultados JSON validados de modelos
<a name="structured-output"></a>

As saídas estruturadas são um recurso do Amazon Bedrock que garante que as respostas do modelo estejam em conformidade com os esquemas JSON e as definições de ferramentas definidos pelo usuário, reduzindo a necessidade de mecanismos personalizados de análise e validação em implantações de IA de produção.

## Benefícios
<a name="structured-output-benefits"></a>

Os resultados estruturados abordam desafios críticos em aplicativos de IA de produção:
+ **Garante a conformidade do esquema** — elimina as taxas de erro e os ciclos de repetição a partir de abordagens baseadas em prompts
+ **Complexidade de desenvolvimento reduzida** — elimina a necessidade de lógica personalizada de análise e validação
+ **Custos operacionais mais baixos** — reduz solicitações e novas tentativas malsucedidas
+ **Confiabilidade de produção** — permite a implantação confiável de aplicativos de IA que exigem saídas previsíveis e legíveis por máquina

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

As saídas estruturadas restringem as respostas do modelo para que sigam um esquema específico, garantindo uma saída válida e analisável para o processamento posterior. Você pode usar saídas estruturadas por meio de dois mecanismos complementares:

### Formato de saída do esquema JSON
<a name="structured-output-json-schema"></a>

Para InvokeModel API com modelos Anthropic Claude, use o campo de `output_config.format` solicitação. Com modelos de peso aberto, use o campo de `response_format` solicitação. Para Converse APIs, use o campo de `outputConfig.textFormat` solicitação. A resposta do modelo estará em conformidade com o esquema JSON especificado.

### Uso estrito de ferramentas
<a name="structured-output-strict-tool-use"></a>

Adicione o `strict: true` sinalizador às definições da ferramenta para habilitar a validação do esquema nos nomes e entradas das ferramentas. As chamadas de ferramentas do modelo seguirão então o esquema de entrada da ferramenta definido.

Esses mecanismos podem ser usados de forma independente ou em conjunto na mesma solicitação. Consulte a [documentação da API Bedrock](https://docs.aws.amazon.com/bedrock/latest/APIReference/welcome.html) para obter mais detalhes.

### Solicitar fluxo de trabalho
<a name="structured-output-request-workflow"></a>

A seguir, descrevemos como o Amazon Bedrock processa solicitações com saídas estruturadas:

1. **Solicitação inicial** — Você inclui um esquema JSON por meio do `response_format` parâmetro `outputConfig.textFormat``output_config.format`, ou ou uma definição de ferramenta com o `strict: true` sinalizador em sua solicitação de inferência.

1. **Validação do esquema** — O Amazon Bedrock valida o formato do esquema JSON em relação ao subconjunto compatível do JSON Schema Draft 2020-12. Se o esquema contiver recursos não suportados, o Amazon Bedrock retornará imediatamente um erro 400.

1. **Primeira compilação** — Para novos esquemas, o Amazon Bedrock compila a gramática, o que pode levar alguns minutos.

1. **Cache** — As gramáticas compiladas com sucesso são armazenadas em cache por 24 horas a partir do primeiro acesso. As gramáticas em cache são criptografadas com chaves gerenciadas pela AWS.

1. **Solicitações subsequentes** — esquemas idênticos da mesma conta usam gramáticas em cache, resultando em latência de inferência comparável às solicitações padrão com sobrecarga mínima.

1. **Resposta** — Você recebe respostas de inferência padrão com estrita conformidade com o esquema.

## Compatível APIs com nossos recursos
<a name="structured-output-supported-apis"></a>

Você pode usar saídas estruturadas nos seguintes recursos do Amazon Bedrock:

**Converse e ConverseStream APIs** — Use saídas estruturadas com o Converse e ConverseStream APIs para inferência conversacional.

**InvokeModel e InvokeModelWithResponseStream APIs** — Use saídas estruturadas com InvokeModel e InvokeModelWithResponseStream APIs para inferência de turno único.

**Inferência entre regiões** — Use saídas estruturadas na inferência entre regiões sem nenhuma configuração adicional.

**Inferência em lote** — Use saídas estruturadas na inferência em lote sem nenhuma configuração adicional.

**nota**  
Os resultados estruturados são incompatíveis com as citações de modelos antrópicos. Se você ativar as citações ao usar saídas estruturadas, o modelo retornará um erro 400.

## Modelos compatíveis
<a name="structured-output-supported-models"></a>

Para ver quais modelos oferecem suporte a saídas estruturadas, acesse os [modelos em um piscar](model-cards.md) de olhos e selecione o modelo em que você está interessado.

## Exemplo de solicitações
<a name="structured-output-examples"></a>

### Formato de saída do esquema JSON
<a name="structured-output-json-schema-examples"></a>

Os exemplos a seguir mostram como usar o formato de saída do esquema JSON com saídas estruturadas.

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

##### Veja um exemplo
<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>

##### Veja um exemplo
<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 aberto)
<a name="json-schema-invokemodel-openweight"></a>

##### Veja um exemplo
<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 estrito de ferramentas
<a name="structured-output-strict-tool-examples"></a>

Os exemplos a seguir mostram como usar o campo estrito com o uso de ferramentas.

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

##### Veja um exemplo
<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>

##### Veja um exemplo
<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 aberto)
<a name="strict-tool-invokemodel-openweight"></a>

##### Veja um exemplo
<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
}
```