Ответ в JSON для автоматизации
В конце у вас будет код, который получает от модели JSON с нужными полями и проверяет его, прежде чем отдать в таблицу, CRM, 1С или бэкенд.
Нужно: ключ fetch_... (создать), баланс от $0.01 (пополнить), Python 3.10+ с pip install openai pydantic или Node.js 18+ с npm install openai zod.
- 1Опишите поля
Типы: строка, число, да/нет, выбор из списка. Для списка всегда задавайте
enum— иначе получите «Доставка», «доставка» и «delivery». - 2Отправьте запрос со схемой
response_formatсjson_schemaиstrict: true— пример 1. Полей мало — хватитjson_objectс полями в промпте, пример 2. - 3Проверьте ответ кодом
pydanticилиzod. Даже строгая схема не гарантирует верный ответ. - 4Дайте второй шанс
Не прошло — покажите модели её ответ и ошибку, попросите исправленный JSON. Второй отказ — отдайте документ человеку.
1Режимы и модели
| Режим | Что гарантирует |
|---|---|
response_format: {"type": "json_object"} | корректный JSON, поля не проверяются |
response_format: {"type": "json_schema", ...} со strict: true | JSON по вашей схеме: нужные поля нужных типов |
| Модель | Строгая схема | json_object |
|---|---|---|
deepseek-v4.1-flash | да | да |
claude-haiku-5-5 | да | да |
gpt-6-luna | нет | — |
Другие модели проверьте на 20–50 своих примерах. Цены — Модели и цены.
2Пример 1. Данные из счёта, строгая схема
"""
Данные из счёта — в JSON по строгой схеме.
pip install openai pydantic
"""
import os
from typing import Literal
from openai import OpenAI
from pydantic import BaseModel, ConfigDict, Field, ValidationError
MODEL = "deepseek-v4.1-flash" # или "claude-haiku-5-5"
client = OpenAI(
base_url="https://api.zukko.pro/v1",В Node.js схема для модели и схема zod написаны отдельно — держите их одинаковыми. В Python обе берутся из класса Invoice.
3Пример 2. Обращение в поддержку, режим json_object
"""
Разбор обращения в поддержку: категория, срочность, нужен ли человек.
pip install openai pydantic
"""
import os
from typing import Literal
from openai import OpenAI
from pydantic import BaseModel, ValidationError
client = OpenAI(
base_url="https://api.zukko.pro/v1",
api_key=os.environ["ZUKKO_API_KEY"],
timeout=60,4Правила схемы
- Числа — числами (
15400.5, а не «15 400,50 руб.»), валюта — отдельным полем. - Даты — строкой, формат в описании поля:
ГГГГ-ММ-ДД. - 5–10 полей без глубокой вложенности.
- Все поля в
required,additionalProperties: false.pydanticсextra="forbid"делает это сам.
5Если не работает
| Что видите | Что сделать |
|---|---|
| Ответ начинается с трёх обратных кавычек и слова json | Снимите обёртку функцией clean() из примера |
«Доставка» вместо delivery | Задайте у поля enum |
| JSON обрывается на середине | Увеличьте max_tokens |
| Модель выдумывает номер или дату | Разрешите пустую строку в описании поля и напишите «ничего не придумывай» в инструкции |
| Ответ идёт около минуты, схема не соблюдается | Возьмите deepseek-v4.1-flash или claude-haiku-5-5 |
400 с упоминанием response_format | Возьмите модель из таблицы выше или режим json_object |