As saídas estruturadas permitem que um modelo gere uma saída que sempre segue um esquema específico. Por exemplo, um modelo pode receber um esquema de resposta para garantir que a resposta produza um JSON válido. Os modelos Grok disponíveis no Gemini Enterprise Agent Platform Model as a Service (MaaS) oferecem suporte a saídas estruturadas.
Para mais informações conceituais sobre o recurso de saída estruturada, consulte Introdução à saída estruturada.
Usar saídas estruturadas com a API Responses
Os modelos a seguir mostram como usar saídas estruturadas com a API Responses:
Python
Antes de testar esta amostra, siga as instruções de configuração Python no Guia de início rápido da plataforma de agentes: como usar bibliotecas de cliente.
Para autenticar na plataforma de agentes, configure o Application Default Credentials. Se quiser mais informações, consulte Configurar a autenticação para um ambiente de desenvolvimento local.
Antes de executar os exemplos de código, defina a variável de ambiente GOOGLE_CLOUD_UNIVERSE_DOMAIN como s3nsapis.fr.
Antes de executar esta amostra, defina a variável de ambiente OPENAI_BASE_URL ou configure as credenciais OAuth.
Para mais informações, consulte Autenticação e credenciais.
from openai import OpenAI client = OpenAI()response = client.responses.create( model="MODEL", input="INPUT", text={ "format": { "type": "json_schema", "name": "SCHEMA_NAME", "strict": True, "schema": JSON_SCHEMA } }, stream=False, ) print(response)
- MODEL: o nome do modelo que você quer usar, por exemplo,
xai/grok-4.20-reasoning. - INPUT: o comando ou a entrada do modelo.
- SCHEMA_NAME: um nome para o esquema de resposta.
- JSON_SCHEMA: um dicionário que define o esquema JSON, por exemplo:
{"type": "object", "properties": {"name": {"type": "string"}, "age": {"type": "integer"}}, "required": ["name", "age"], "additionalProperties": False}
REST
Antes de usar os dados da solicitação abaixo, faça estas substituições:
- PROJECT_ID: o ID do projeto do Cloud de Confiance by S3NS .
- MODEL: o nome do modelo que você quer usar, por exemplo,
xai/grok-4.20-reasoning. - INPUT: o comando ou a entrada do modelo.
- SCHEMA_NAME: um nome para o esquema de resposta.
- JSON_SCHEMA: um objeto de esquema JSON que define a estrutura da saída.
Método HTTP e URL:
POST https://aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/global/endpoints/openapi/responses
Corpo JSON da solicitação:
{
"model": "MODEL",
"input": "INPUT",
"text": {
"format": {
"type": "json_schema",
"name": "SCHEMA_NAME",
"strict": true,
"schema": JSON_SCHEMA
}
},
"stream": false
}
Para enviar a solicitação, escolha uma destas opções:
curl
Salve o corpo da solicitação em um arquivo com o nome request.json e execute o comando a seguir:
curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/global/endpoints/openapi/responses"
PowerShell
Salve o corpo da solicitação em um arquivo com o nome request.json,
e execute o comando a seguir:
$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }
Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/global/endpoints/openapi/responses" | Select-Object -Expand Content
Exemplo
Os exemplos a seguir mostram um exemplo completo de como usar saídas estruturadas com a API Responses:
Python
Antes de testar esta amostra, siga as instruções de configuração Python no Guia de início rápido do Agent Platform: como usar bibliotecas de cliente.
Para autenticar na plataforma de agentes, configure o Application Default Credentials. Se quiser mais informações, consulte Configurar a autenticação para um ambiente de desenvolvimento local.
Antes de executar os exemplos de código, defina a variável de ambiente GOOGLE_CLOUD_UNIVERSE_DOMAIN como s3nsapis.fr.
Antes de executar esta amostra, defina a variável de ambiente OPENAI_BASE_URL ou configure as credenciais OAuth.
Para mais informações, consulte Autenticação e credenciais.
from openai import OpenAI client = OpenAI()response = client.responses.create( model="xai/grok-4.20-reasoning", input="Extract: John Doe is 30.", text={ "format": { "type": "json_schema", "name": "person_info", "strict": True, "schema": { "type": "object", "properties": { "name": {"type": "string"}, "age": {"type": "integer"} }, "required": ["name", "age"], "additionalProperties": False } } }, stream=False, ) print(response)
REST
curl -X POST \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "Content-Type: application/json" \ https://aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/global/endpoints/openapi/responses -d \ '{ "model": "xai/grok-4.20-reasoning", "input": "Extract: John Doe is 30.", "text": { "format": { "type": "json_schema", "name": "person_info", "strict": true, "schema": { "type": "object", "properties": { "name": { "type": "string" }, "age": { "type": "integer" } }, "required": [ "name", "age" ], "additionalProperties": false } } }, "stream": false }'
- PROJECT_ID: o ID do projeto do Cloud de Confiance by S3NS .
Exemplo de resposta
Confira a seguir um exemplo de como a saída do modelo pode ser:
{
"background": false,
"completed_at": 1779159186,
"created_at": 1779159184,
"error": null,
"frequency_penalty": 0,
"id": "kNALat3NENmDifEP14TQ8Qk",
"incomplete_details": null,
"instructions": null,
"max_output_tokens": null,
"max_tool_calls": null,
"metadata": {
"system_fingerprint": "fp_39c5j0a3e9"
},
"model": "xai/grok-4.20-reasoning",
"object": "response",
"output": [
{
"content": [
{
"annotations": [],
"logprobs": [],
"text": "**Extracted Information:**\n\n- **Name:** John Doe\n- **Age:** 30\n\n**Structured output:**\n```json\n{\n \"name\": \"John Doe\",\n \"age\": 30\n}\n```",
"type": "output_text"
}
],
"id": "msg_kNALat3NENmDifEP14TQ8Qk",
"role": "assistant",
"status": "completed",
"type": "message"
}
],
"parallel_tool_calls": true,
"presence_penalty": 0,
"previous_response_id": null,
"prompt_cache_key": null,
"reasoning": {
"effort": "medium",
"summary": "detailed"
},
"safety_identifier": null,
"service_tier": "default",
"status": "completed",
"store": true,
"temperature": 0.7,
"text": {
"format": {
"type": "text"
}
},
"tool_choice": "auto",
"tools": [],
"top_logprobs": 0,
"top_p": 0.95,
"truncation": "disabled",
"usage": {
"extra_properties": {
"google": {
"traffic_type": "ON_DEMAND"
}
},
"input_tokens": 343,
"input_tokens_details": {
"cached_tokens": 0
},
"num_server_side_tools_used": 0,
"num_sources_used": 0,
"output_tokens": 369,
"output_tokens_details": {
"reasoning_tokens": 325
},
"total_tokens": 712
},
"user": null
}
Usar saídas estruturadas com a API Chat Completions
O caso de uso a seguir define um esquema de resposta que garante que a saída do modelo seja um objeto JSON com as seguintes propriedades: nome, data e participantes. O código Python usa o SDK do OpenAI e objetos Pydantic para gerar o esquema JSON.
from pydantic import BaseModel
from openai import OpenAI
client = OpenAI()
class CalendarEvent(BaseModel):
name: str
date: str
participants: list[str]
completion = client.beta.chat.completions.parse(
model="MODEL_NAME",
messages=[
{"role": "system", "content": "Extract the event information."},
{"role": "user", "content": "Alice and Bob are going to a science fair on Friday."},
],
response_format=CalendarEvent,
)
print(completion.choices[0].message.parsed)
A saída do modelo vai seguir este esquema JSON:
{ "name": STRING, "date": STRING, "participants": [STRING] }
Quando receber o comando "Alice and Bob are going to a science fair on Friday", o modelo poderá produzir a seguinte resposta:
{
"name": "science fair",
"date": "Friday",
"participants": [
"Alice",
"Bob"
]
}
exemplo detalhado
O código a seguir é um exemplo de esquema recursivo. A classe UI contém uma lista de children, que também podem ser da classe UI.
from pydantic import BaseModel
from openai import OpenAI
from enum import Enum
from typing import List
client = OpenAI()
class UIType(str, Enum):
div = "div"
button = "button"
header = "header"
section = "section"
field = "field"
form = "form"
class Attribute(BaseModel):
name: str
value: str
class UI(BaseModel):
type: UIType
label: str
children: List["UI"]
attributes: List[Attribute]
UI.model_rebuild() # This is required to enable recursive types
class Response(BaseModel):
ui: UI
completion = client.beta.chat.completions.parse(
model="MODEL_NAME",
messages=[
{"role": "system", "content": "You are a UI generator AI. Convert the user input into a UI."},
{"role": "user", "content": "Make a User Profile Form"}
],
response_format=Response,
)
print(completion.choices[0].message.parsed)
A saída do modelo vai seguir o esquema do objeto Pydantic especificado no snippet anterior. Neste exemplo, o modelo pode gerar este formulário de UI:
Form
Input
Name
Email
Age
Uma resposta pode ser semelhante a esta:
ui = UI(
type=UIType.div,
label='Form',
children=[
UI(
type=UIType.div,
label='Input',
children=[],
attributes=[
Attribute(name='label', value='Name')
]
),
UI(
type=UIType.div,
label='Input',
children=[],
attributes=[
Attribute(name='label', value='Email')
]
),
UI(
type=UIType.div,
label='Input',
children=[],
attributes=[
Attribute(name='label', value='Age')
]
)
],
attributes=[
Attribute(name='name', value='John Doe'),
Attribute(name='email', value='john.doe@example.com'),
Attribute(name='age', value='30')
]
)
Receber respostas de objetos JSON
É possível restringir o modelo para gerar apenas objetos JSON sintaticamente válidos definindo o response_format campo como { "type": "json_object" }. Isso geralmente é chamado de modo JSON. O modo JSON é útil ao gerar JSON para uso com chamadas de função ou outras tarefas downstream que exigem entrada JSON.
Quando o modo JSON está ativado, o modelo é restrito a gerar apenas strings que são analisadas em objetos JSON válidos. Embora esse modo garanta que a saída seja um JSON sintaticamente correto, ele não aplica nenhum esquema específico. Para garantir que o modelo gere um JSON que siga um esquema específico, inclua instruções no comando, conforme mostrado no exemplo a seguir.
Os exemplos a seguir mostram como ativar o modo JSON e instruir o modelo a retornar um objeto JSON com uma estrutura específica:
Python
Antes de testar esta amostra, siga as instruções de configuração Python no Guia de início rápido do Agent Platform: como usar bibliotecas de cliente.
Para autenticar no Agent Platform, configure o Application Default Credentials. Se quiser mais informações, consulte Configurar a autenticação para um ambiente de desenvolvimento local.
Antes de executar os exemplos de código, defina a variável de ambiente GOOGLE_CLOUD_UNIVERSE_DOMAIN como s3nsapis.fr.
Antes de executar esta amostra, defina a variável de ambiente OPENAI_BASE_URL ou configure as credenciais OAuth.
Para mais informações, consulte Autenticação e credenciais.
from openai import OpenAI client = OpenAI()response = client.chat.completions.create( model="MODEL", response_format={ "type": "json_object" }, messages=[ {"role": "user", "content": "List 5 rivers in South America. Your response must be a JSON object with a single key "rivers", which has a list of strings as its value."}, ] ) print(response.choices[0].message.content)
Substitua MODEL pelo nome do modelo que você quer usar,
por exemplo xai/grok-4.1-fast-reasoning.
REST
Antes de usar os dados da solicitação abaixo, faça estas substituições:
- PROJECT_ID: o ID do projeto na nuvem do Google Cloud.
- LOCATION: uma região compatível com modelos Grok.
- MODEL: o nome do modelo que você quer usar,
por exemplo
xai/grok-4.1-fast-reasoning.
Método HTTP e URL:
POST https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/endpoints/openapi/chat/completions
Corpo JSON da solicitação:
{
"model": "MODEL",
"response_format": {
"type": "json_object"
},
"messages": [
{
"role": "user",
"content": "List 5 rivers in South America. Your response must be a JSON object with a single key \"rivers\", which has a list of strings as its value."
}
]
}
Para enviar a solicitação, escolha uma destas opções:
curl
Salve o corpo da solicitação em um arquivo com o nome request.json e execute o comando a seguir:
curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/endpoints/openapi/chat/completions"
PowerShell
Salve o corpo da solicitação em um arquivo com o nome request.json e execute o comando a seguir:
$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }
Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/endpoints/openapi/chat/completions" | Select-Object -Expand Content
Você receberá uma resposta JSON semelhante a seguinte.
A seguir
- Saiba mais sobre a chamada de função.
- Saiba mais sobre o raciocínio.