> Для получения чистого Markdown любой страницы добавьте .md к URL страницы.  
> Для полного индекса документации см. https://api.vega.chat/docs/llms.txt.  
> Для полного содержания документации см. https://api.vega.chat/docs/llms-full.txt.  
> Для интеграции AI‑клиентов (Claude Code, Cursor и др.) подключитесь к серверу MCP по адресу https://api.vega.chat/docs/_mcp/server.

# Структурированные выводы

VEGA поддерживает структурированные выводы для совместимых моделей, гарантируя, что ответы соответствуют определённому формату JSON Schema. Эта возможность особенно полезна, когда вам нужны последовательные, хорошо отформатированные ответы, которые можно надёжно разобрать в вашем приложении.

## Обзор

Структурированные выводы позволяют:

* Применять конкретную проверку JSON Schema к ответам модели  
* Получать последовательные, типобезопасные результаты  
* Избегать ошибок разбора и «галлюцинированных» полей  
* Упростить обработку ответов в вашем приложении  

## Использование структурированных выводов

Чтобы использовать структурированные выводы, включите параметр `response_format` в ваш запрос, задав `type` как `json_schema` и указав объект `json_schema`, содержащий вашу схему:

```typescript
{
  "messages": [
    { "role": "user", "content": "What's the weather like in London?" }
  ],
  "response_format": {
    "type": "json_schema",
    "json_schema": {
      "name": "weather",
      "strict": true,
      "schema": {
        "type": "object",
        "properties": {
          "location": {
            "type": "string",
            "description": "City or location name"
          },
          "temperature": {
            "type": "number",
            "description": "Temperature in Celsius"
          },
          "conditions": {
            "type": "string",
            "description": "Weather conditions description"
          }
        },
        "required": ["location", "temperature", "conditions"],
        "additionalProperties": false
      }
    }
  }
}
```

Модель ответит JSON‑объектом, строго соответствующим вашей схеме:

```json
{
  "location": "London",
  "temperature": 18,
  "conditions": "Partly cloudy with light drizzle"
}
```

## Поддержка моделей

Структурированные выводы поддерживаются отдельными моделями.

Список моделей, поддерживающих структурированные выводы, доступен на странице [models page](/aimodels?order=newest\&supported_parameters=structured_outputs).

* Модели OpenAI (GPT‑4o и более новые версии) [Docs](https://platform.openai.com/docs/guides/structured-outputs)  
* Модели Google Gemini [Docs](https://ai.google.dev/gemini-api/docs/structured-output)  
* Модели Anthropic (Sonnet 4.5, Opus 4.1+) [Docs](https://docs.claude.com/en/docs/build-with-claude/structured-outputs)  
* Большинство моделей с открытым исходным кодом  
* Все модели, предоставляемые Fireworks [Docs](https://docs.fireworks.ai/structured-responses/structured-response-formatting#structured-response-modes)

Чтобы убедиться, что выбранная вами модель поддерживает структурированные выводы:

1. Проверьте поддерживаемые параметры модели на странице [models page](/aimodels)  
2. Установите `require_parameters: true` в настройках провайдера (см. [Provider Routing](/docs/guides/routing/provider-selection))  
3. Включите `response_format` и задайте `type: json_schema` в обязательных параметрах  

## Лучшие практики

1. **Добавляйте описания**: Указывайте чёткие описания для свойств схемы, чтобы направлять модель.  

2. **Используйте строгий режим**: Всегда задавайте `strict: true`, чтобы модель точно следовала вашей схеме.  

## Пример реализации

Ниже приведён полный пример с использованием Fetch API:

```typescript title="TypeScript SDK"
import { OpenRouter } from '@openrouter/sdk';

const client = new OpenRouter({
  apiKey: '{{API_KEY_REF}}',
});

const response = await client.chat.send({
  model: '{{MODEL}}',
  messages: [
    { role: 'user', content: 'What is the weather like in London?' },
  ],
  responseFormat: {
    type: 'json_schema',
    jsonSchema: {
      name: 'weather',
      strict: true,
      schema: {
        type: 'object',
        properties: {
          location: {
            type: 'string',
            description: 'City or location name',
          },
          temperature: {
            type: 'number',
            description: 'Temperature in Celsius',
          },
          conditions: {
            type: 'string',
            description: 'Weather conditions description',
          },
        },
        required: ['location', 'temperature', 'conditions'],
        additionalProperties: false,
      },
    },
  },
  stream: false,
});

const weatherInfo = response.choices[0].message.content;
```

```python title="Python"
import requests
import json

response = requests.post(
  "https://api.vega.chat/api/v1/chat/completions",
  headers={
    "Authorization": f"Bearer {{API_KEY_REF}}",
    "Content-Type": "application/json",
  },

  json={
    "model": "{{MODEL}}",
    "messages": [
      {"role": "user", "content": "What is the weather like in London?"},
    ],
    "response_format": {
      "type": "json_schema",
      "json_schema": {
        "name": "weather",
        "strict": True,
        "schema": {
          "type": "object",
          "properties": {
            "location": {
              "type": "string",
              "description": "City or location name",
            },
            "temperature": {
              "type": "number",
              "description": "Temperature in Celsius",
            },
            "conditions": {
              "type": "string",
              "description": "Weather conditions description",
            },
          },
          "required": ["location", "temperature", "conditions"],
          "additionalProperties": False,
        },
      },
    },
  },
)

data = response.json()
weather_info = data["choices"][0]["message"]["content"]
```

```typescript title="TypeScript (fetch)"
const response = await fetch('https://api.vega.chat/api/v1/chat/completions', {
  method: 'POST',
  headers: {
    Authorization: 'Bearer {{API_KEY_REF}}',
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    model: '{{MODEL}}',
    messages: [
      { role: 'user', content: 'What is the weather like in London?' },
    ],
    response_format: {
      type: 'json_schema',
      json_schema: {
        name: 'weather',
        strict: true,
        schema: {
          type: 'object',
          properties: {
            location: {
              type: 'string',
              description: 'City or location name',
            },
            temperature: {
              type: 'number',
              description: 'Temperature in Celsius',
            },
            conditions: {
              type: 'string',
              description: 'Weather conditions description',
            },
          },
          required: ['location', 'temperature', 'conditions'],
          additionalProperties: false,
        },
      },
    },
  }),
});

const data = await response.json();
const weatherInfo = data.choices[0].message.content;
```

## Потоковая передача с структурированными выводами

Структурированные выводы также поддерживаются при потоковой передаче ответов. Модель будет передавать корректный частичный JSON, который после завершения образует валидный ответ, соответствующий вашей схеме.

Чтобы включить потоковую передачу с структурированными выводами, просто добавьте `stream: true` в ваш запрос:

```typescript
{
  "stream": true,
  "response_format": {
    "type": "json_schema",
    // ... остальная часть вашей схемы
  }
}
```

## Обработка ошибок

При использовании структурированных выводов могут возникнуть следующие ситуации:

1. **Модель не поддерживает структурированные выводы**: запрос завершится ошибкой, указывающей на отсутствие поддержки.  
2. **Недействительная схема**: модель вернёт ошибку, если ваш JSON Schema некорректен.  

## Восстановление ответа

Для запросов без потоковой передачи, использующих `response_format` с `type: "json_schema"`, вы можете включить плагин [Response Healing](/docs/guides/features/plugins/response-healing), чтобы снизить риск получения недействительного JSON, когда модели возвращают несовершенно отформатированный ответ. Подробнее см. в документации [Response Healing](/docs/guides/features/plugins/response-healing).