> ## Documentation Index
> Fetch the complete documentation index at: https://docs.bettertoken.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Как проверять структурированный JSON через Pydantic?

> Проверяйте JSON от LLM через Pydantic, сохраняйте исходный ответ и явно обрабатывайте repair и повторные попытки.

## Короткий ответ

Считайте ответ модели недоверенным текстом. Попросите JSON, сохраните исходный ответ, разберите его локально и проверьте объект через Pydantic. Если проверка не прошла, верните явную ошибку или выполните одну ограниченную попытку исправления.

Этот подход не требует специального параметра структурированного вывода конкретного провайдера. Он также не гарантирует валидный JSON с первой попытки.

## Пример на Python

Установите OpenAI SDK и Pydantic, затем вызовите OpenAI-compatible Chat Completions API:

```python theme={null}
import json
import os

from openai import OpenAI
from pydantic import BaseModel, ValidationError


class Ticket(BaseModel):
    category: str
    summary: str


client = OpenAI(
    api_key=os.environ["BETTERTOKEN_API_KEY"],
    base_url="https://bettertoken.ai/v1",
)

response = client.chat.completions.create(
    model="YOUR_MODEL_ID",
    messages=[
        {
            "role": "user",
            "content": (
                "Return only a JSON object with string fields "
                "category and summary for this support request: "
                "The API request timed out."
            ),
        }
    ],
)

raw = response.choices[0].message.content or ""

try:
    payload = json.loads(raw)
    ticket = Ticket.model_validate(payload)
except (json.JSONDecodeError, ValidationError) as error:
    # Store raw only in a protected debug record allowed by your data policy.
    raise RuntimeError("Model output failed validation") from error

print(ticket.model_dump())
```

Возьмите полный Model ID в <a href={"https://bettertoken.ai/pricing"}>каталоге моделей</a>. Храните BetterToken API Key в переменной окружения, а не в исходном коде.

## Конвейер проверки

1. Опишите минимальную схему, необходимую приложению.
2. Запросите JSON без полей, которых нет в схеме.
3. Сохраните исходный ответ в защищённом месте, если это допускает ваша политика данных.
4. Разберите ответ через `json.loads`.
5. Проверьте объект через `model_validate`.
6. Верните явную ошибку или выполните одну ограниченную попытку исправления.

Не подставляйте пропущенные значения незаметно, не выдумывайте defaults и не повторяйте запрос бесконечно. Исправленный объект должен пройти ту же схему.

## Что проверять при ошибке

| Ошибка           | Что проверить                                               |
| ---------------- | ----------------------------------------------------------- |
| Синтаксис JSON   | Лишний текст, Markdown fences, обрыв или неполный вывод     |
| Нет поля         | Prompt и схема используют одинаковые имена                  |
| Неверный тип     | Схема соответствует реальному контракту приложения          |
| Повторная ошибка | Остановите retry и верните типизированную ошибку приложения |

Pydantic проверяет объект на стороне клиента. Он не подтверждает истинность фактических значений. Для идентификаторов, прав, сумм и других правил нужны отдельные бизнес-проверки.

## Граница возможностей

Опубликованный контракт BetterToken Chat Completions описывает OpenAI-compatible запрос и текстовый ответ. Специальные поля структурированного вывода зависят от модели и маршрута. Не отправляйте недокументированное поле, пока выбранная модель и текущая API-справка явно его не поддерживают.

## Связанные страницы

* [OpenAI Chat Completions API](/api-reference/chat-completions)
* [Как выбрать подходящую AI-модель?](/faq/model-calling/model-selection-guide)
* [Модели Pydantic](https://docs.pydantic.dev/latest/concepts/models/)
