Ao executar tarefas de extração de informações ou geração de dados estruturados, um modelo pode retornar texto extra (como json ) que interrompe a análise posterior. Ativar a saída estruturada garante que o modelo retorne uma string JSON válida. O modo JSON Schema também oferece controle preciso sobre a estrutura e os tipos da saída, eliminando a necessidade de validações extras ou novas tentativas.
Uso
A saída estruturada suporta dois modos: JSON Object e JSON Schema.
-
Modo JSON Object: Garante que a saída seja uma string JSON válida, mas não assegura uma estrutura específica. Uso:
- Defina o parâmetroresponse_format: No corpo da solicitação, defina
response_formatcomo{"type": "json_object"}. - Inclua a palavra-chave JSON no prompt: A mensagem do sistema ou do usuário deve conter a palavra "JSON" (sem distinção entre maiúsculas e minúsculas). Caso contrário, a API retorna:
'messages' must contain the word 'json' in some form, to use 'response_format' of type 'json_object'.
- Defina o parâmetroresponse_format: No corpo da solicitação, defina
-
Modo JSON Schema: Assegura que a saída esteja em conformidade com uma estrutura especificada. Uso: defina
response_formatcomo{"type": "json_schema", "json_schema": {..., "strict": true}}.Não é necessária a palavra-chave JSON no prompt.
Recurso | Modo JSON Object | Modo JSON Schema |
|---|---|---|
Gera JSON válido | Sim | Sim |
Segue estritamente o schema | Não | Sim |
Modelos suportados | Maioria dos modelos Qwen | Apenas modelos qwen-plus selecionados |
Configuração de |
|
|
Requisito do prompt | Deve incluir "JSON" | Recomenda-se descrever explicitamente |
Caso de uso | Saída JSON flexível | Validação precisa de schema |
Modelos suportados
- JSON Object
- JSON Schema
- Qwen
- Kimi
- DeepSeek
- GLM
- Stepfun
-
Modelos de geração de texto
- Qwen-Max: séries Qwen3.8-Max, Qwen3.7-Max
- Qwen-Max (modo sem raciocínio): séries Qwen3.6-Max, Qwen3-Max, Qwen-Max
- Qwen-Plus: série Qwen3.7-Plus
- Qwen-Plus (modo sem raciocínio): séries Qwen3.6-Plus, Qwen3.5-Plus, Qwen-Plus
- Qwen-Flash: séries Qwen3.8-Flash, Qwen3.7-Flash
- Qwen-Flash (modo sem raciocínio): séries Qwen3.6-Flash, Qwen3.5-Flash, Qwen-Flash
- Qwen-Turbo (modo sem raciocínio): série Qwen-Turbo
- Qwen-Coder: série Qwen3-Coder
- Qwen-Long: série Qwen-Long
- Série open-source Qwen3.8
- Série open-source Qwen3.6 (modo sem raciocínio)
- Série open-source Qwen3.5 (modo sem raciocínio)
- Série open-source Qwen3 (modo sem raciocínio)
- Série open-source Qwen3-Coder
- Série open-source Qwen2.5 (excluindo modelos math e coder)
-
Modelos multimodais
- Qwen-VL (modo sem raciocínio): séries Qwen3-VL-Plus, Qwen3-VL-Flash, Qwen-VL-Max (excluindo as versões mais recentes e snapshot), Qwen-VL-Plus (excluindo as versões mais recentes e snapshot)
- Qwen-Omni: série Qwen3.5-Omni-Plus
- Série open-source Qwen3-VL (modo sem raciocínio)
response_format definido como {"type": "json_object"} no modo de raciocínio sem erro, mas alguns podem retornar conteúdo que não é estritamente um JSON válido; se você precisar de um JSON consistentemente válido, consulte o FAQ.- Qwen
- Kimi
- GLM
- DeepSeek
-
Modelos de geração de texto
- Qwen-Max: séries Qwen3.8-Max, Qwen3.7-Max
- Qwen-Max (modo sem raciocínio): séries Qwen3.6-Max, Qwen3-Max, Qwen-Max
- Qwen-Plus: série Qwen3.7-Plus
- Qwen-Plus (modo sem raciocínio): séries Qwen3.6-Plus, Qwen3.5-Plus, Qwen-Plus
- Qwen-Flash: séries Qwen3.8-Flash, Qwen3.7-Flash
- Qwen-Flash (modo sem raciocínio): séries Qwen3.6-Flash, Qwen3.5-Flash, Qwen-Flash
- Qwen-Turbo (modo sem raciocínio): série Qwen-Turbo
- Qwen-Coder: série Qwen3-Coder
- Qwen-Long: série Qwen-Long
- Série open-source Qwen3.8
- Série open-source Qwen3.6 (modo sem raciocínio)
- Série open-source Qwen3.5 (modo sem raciocínio)
- Série open-source Qwen3 (modo sem raciocínio)
- Série open-source Qwen3-Coder
- Série open-source Qwen2.5 (excluindo modelos math e coder)
-
Modelos multimodais
- Qwen-VL (modo sem raciocínio): séries Qwen3-VL-Plus, Qwen3-VL-Flash, Qwen-VL-Max (excluindo as versões mais recentes e snapshot), Qwen-VL-Plus (excluindo as versões mais recentes e snapshot)
- Qwen-Omni: série Qwen3.5-Omni-Plus
- Série open-source Qwen3-VL (modo sem raciocínio)
response_format definido como {"type": "json_object"} no modo de raciocínio sem erro, mas alguns podem retornar conteúdo que não é estritamente um JSON válido; se você precisar de um JSON consistentemente válido, consulte o FAQ.Primeiros passos
Este exemplo extrai informações estruturadas de um perfil pessoal.
O modo JSON Object não garante nomes de chaves ou tipos de campos estáveis. Os resultados podem variar entre diferentes prompts ou chamadas. Para impor uma estrutura fixa, use o modo JSON Schema.Obtain an API key e export the API key as an environment variable. Se você usar o OpenAI SDK ou DashScope SDK para fazer chamadas, install the SDK.
- OpenAI compatible
- DashScope
- Python
- Node.js
- curl
Resposta
Processamento de dados de imagem e vídeo
Modelos multimodais também suportam saída estruturada para imagens e vídeos. Use o modo JSON para extrair dados estruturados de conteúdo visual, como valores de campos de recibos, localizações de objetos em imagens ou eventos em vídeo.
Para limites de arquivos de imagem e vídeo, consulte Image and video understanding .
- OpenAI compatible
- DashScope
- Python
- Node.js
- curl
Resposta
Otimize os prompts
Prompts ambíguos como "retornar informações do usuário" levam a estruturas de saída imprevisíveis. Para obter resultados confiáveis, descreva o schema esperado no seu prompt: especifique nomes de campos, tipos, status obrigatório versus opcional, restrições de formato (como formato de data) e inclua exemplos.
- OpenAI compatible
- DashScope
- Python
- Node.js
Resposta
Obtendo saída estruturada
Definir o type de response_format como json_object retorna uma string JSON válida, mas a estrutura pode não corresponder às suas expectativas — adequado para cenários simples. Para análise automatizada, interoperabilidade de API e outros cenários complexos que exigem restrições rigorosas de tipo, defina type como json_schema para forçar o modelo a gerar conteúdo estritamente em conformidade com um formato especificado. Formato e exemplo de response_format:
name e age) e um campo opcional email.
Modelos da região Singapore ainda não são suportados.
Como usar
Com o método parse do OpenAI SDK, você pode passar diretamente uma classe Pydantic do Python ou um objeto Zod do Node.js. O SDK converte automaticamente para um JSON Schema — sem necessidade de escrever JSON complexo manualmente. Para o DashScope SDK, construa o JSON Schema manualmente seguindo o formato acima.
- OpenAI compatible
- DashScope
Python
Node.js
Guia de configuração
Siga estas diretrizes ao usar JSON Schema para obter uma saída estruturada mais confiável:
-
Declaração de campo obrigatório
Recomenda-se listar os campos obrigatórios no array
required. Campos opcionais podem ser omitidos, por exemplo:
-
Implementando campos opcionais
Além de omitir do
required, você também pode permitir o tiponull:
email, mas seu valor pode ser null.
- Configuração de additionalProperties Controla se deve permitir campos extras não definidos no schema:
"I'm Zhang San, 25 years old"; saída: {"name": "Zhang San", "age": 25} (inclui o campo age não definido).
Valor | Comportamento | Caso de uso |
|---|---|---|
| Gera apenas campos definidos | Controle preciso da estrutura |
| Permite campos extras | Capturar mais informações |
- Tipos de dados suportados: string, number, integer, boolean, object, array, enum.
Indo para produção
- Valide antes de passar para serviços downstream Ao usar o modo JSON Object, valide a saída antes de passá-la para serviços downstream. Use uma biblioteca como jsonschema (Python), Ajv (JavaScript) ou Everit (Java) para garantir que ela esteja em conformidade com o JSON Schema esperado, evitando falhas de análise downstream, perda de dados ou interrupções na lógica de negócios devido a campos ausentes, erros de tipo ou formatos malformados. Em caso de falha, tente novamente a solicitação ou use um modelo para reescrever a saída.
-
Não defina max_tokens
Não defina
max_tokensquando a saída estruturada estiver ativada. Este parâmetro limita o número de tokens de saída e tem como padrão o máximo do modelo. Defini-lo pode truncar a string JSON no meio da geração, produzindo um JSON inválido que falha na análise. -
Use o SDK para gerar schemas
Utilize o SDK para gerar schemas automaticamente. Isso evita erros de manutenção manual e fornece validação e análise automáticas.
Python
FAQ
P: Como o modelo de modo de raciocínio do Qwen produz saída estruturada?
Modelos rotulados como "modo sem raciocínio" retornam conteúdo que não é uma string JSON estritamente válida no modo de raciocínio. Você pode usar a seguinte abordagem de duas etapas para corrigir isso: primeiro chame o modelo de raciocínio para obter uma saída de alta qualidade e, em seguida, passe qualquer JSON malformado por um modelo que suporte o modo JSON para corrigi-lo.
-
Obtenha a saída do modelo de modo de raciocínio
Chame o modelo de modo de raciocínio. O resultado pode não ser um JSON válido.
Nota: definir o parâmetro
response_formatcomo{"type": "json_object"}quando o modo de raciocínio está ativado não causa erro. O exemplo abaixo é um fallback que omite intencionalmenteresponse_format; use-o apenas para corrigir casos em que a saída de um modelo não é um JSON válido.
-
Valide e corrija a saída
Tente analisar a
json_stringda etapa anterior:- Se o modelo retornou um JSON válido, analise-o e use-o diretamente.
- Se o modelo retornou um JSON inválido, chame um modelo que suporte saída estruturada (um modelo rápido e de baixo custo, como qwen-flash no modo sem raciocínio, funciona bem) para corrigir o formato.