Структурированный вывод (JSON): отвечай по форме
🤔 Зачем это читать
Ты попросил модель разобрать сотню входящих писем от клиентов и для каждого вытащить: кто написал, по какому заказу, доволен или зол, что просит. Она справилась — выдала сто аккуратных абзацев живым языком, читать приятно. А дальше начинается боль: эти сто абзацев надо занести в таблицу или в 1С. И ты сидишь и руками растаскиваешь — из этого абзаца имя сюда, статус туда, номер заказа в третью колонку. Час работы превратился в три.
Знакомо? Ответ красивый ровно для человека, который читает глазами. А машине — таблице, CRM (программе с карточками клиентов), бухгалтерской системе — этот красивый абзац всё равно что иностранный язык. Она не умеет «вчитываться» и догадываться, где тут имя, а где жалоба. Ей нужна форма: вот поле «имя», вот поле «статус», заполни ровно так.
Дело не в том, что модель плохо поработала. Дело в том, что ты не сказал ей, в какой форме отвечать. Попросил «разбери письма» — получил сочинение. А надо было попросить «разбери и выдай по форме: имя, заказ, настроение, просьба» — и получить готовые данные, которые программа подхватит сама, без твоих рук.
После этой темы ты сможешь сам формулировать запрос так, чтобы ответ был не сочинением, а заполненным бланком, который другая программа прочитает и разложит по местам без единого клика мышкой. Это тот самый приём, который превращает «модель что-то написала» в «модель встроена в наш рабочий процесс». Клей всей автоматизации.
Задержись на 10 секунд. Вспомни, когда ты в последний раз вручную переносил что-то из одного места в другое: из письма в таблицу, из ответа в карточку клиента, из отчёта в форму. Сколько времени ушло на это «растаскивание»? Держи этот случай в голове — к концу страницы ты увидишь, как его можно было снять одной фразой в запросе.
🍱 Бланк с полями против свободного письма
В прошлой теме про должностную инструкцию и разделители мы учились объяснять повару, кто он и где границы заказа. Теперь — про то, в каком виде он должен подать готовое блюдо. Это разные вещи: одно дело, что повар приготовил, другое — как он это выложил на выдачу.
Представь два способа подачи. Первый: повар приносит тебе блюдо в руках, всё свалено горкой, «вот, держи, тут лосось, рядом вроде соус, а это гарнир, кажется». Вкусно, наверное. Но если за этой выдачей стоит конвейер — официант, который должен мгновенно понять, что куда, — он встанет в ступор. Где порция? Сколько соуса? Это вообще на какой стол?
Второй способ: повар выкладывает всё в стандартную гастроёмкость с подписанными отсеками — в одном отсеке основное, в другом соус, в третьем гарнир, на крышке номер стола. Любой на раздаче возьмёт и поймёт мгновенно, не переспрашивая. Это и есть структурированный вывод: ответ не «на глаз в руках», а разложенный по заранее оговорённой форме.
Для текста та же история — это разница между свободным письмом и бланком с полями. Свободное письмо человек прочитает легко, а машина — нет. Бланк, где у каждого факта своё подписанное поле, машина прочитает с ходу, а заполнить его модель тоже умеет — если её об этом попросить.
заказ: 1842
настроение: недовольна
просьба: возврат денег
🔤 Что такое JSON и почему все системы говорят на нём
У этого «бланка с полями» есть общепринятый вид, на котором между собой договариваются почти все программы мира. Называется он JSON (структурированный формат данных — читается «джейсон»). Не пугайся слова: по сути это просто способ записать «поле — значение» так, чтобы любая программа поняла одинаково.
Смотри, как он устроен, на нашем примере. Пары «название поля : его значение», каждая на своей строке, всё в фигурных скобках:
"имя": "Анна Петрова",
"заказ": 1842,
"настроение": "недовольна",
"просьба": "возврат денег"
}
# слева — название поля (как подпись на отсеке), справа — что туда положили
Почему именно он, а не просто красивый текст? Потому что у JSON есть жёсткая, всегда одинаковая форма. У поля «имя» всегда будет значение «имя» — не «звать её», не «отправитель», не «клиентка». Поэтому программа, которая принимает такой ответ, заранее знает, где искать каждый кусочек, и берёт его без догадок. Это и есть подписанные отсеки гастроёмкости: повар может приготовить разное, но раскладка всегда одна, и раздача никогда не путается.
Тебе как владельцу не нужно уметь писать JSON руками — это работа поваров. Тебе нужно понимать одну вещь: когда ответ модели должна читать другая программа, проси ответ в этой строгой форме, а не вольным текстом. Дальше код подхватит сам.
📋 Как попросить ответ по форме (тремя движениями)
Хорошая новость: чтобы получить структурированный ответ, не нужно ничего технического. Достаточно в запросе чётко сказать три вещи — вот они на той же задаче с письмами.
Разбери письмо клиента ниже.
Верни ответ строго в формате JSON, без лишнего текста до и после.
Заполни ровно эти поля:
"имя" — кто написал # текст
"заказ" — номер заказа # число
"настроение" — доволен / нейтрально / недоволен
"просьба" — что человек хочет # коротко
Если поля в письме нет — поставь "не указано", не выдумывай.
# граница против фантазии: пустое поле честнее придуманного
Разберём по движениям. Первое — назвать форму: «верни в формате JSON». Этим ты сразу отсекаешь сочинение. Второе — перечислить поля: какие именно отсеки в гастроёмкости и что в каждый класть. Тут же стоит сказать тип — где число, где текст, где выбор из готового списка («доволен / нейтрально / недоволен»). Чем точнее опишешь форму, тем точнее повар её заполнит. Третье — закрыть лазейку для фантазии: «нет данных — поставь „не указано“, не выдумывай». Иначе модель «из вежливости» может дописать правдоподобное, а на самом деле взятое из воздуха.
Заметь, как это перекликается с прошлыми темами модуля: тут работают и точность заказа, и заранее заданные границы. Структурированный вывод — не отдельный фокус, а ещё один способ дать повару ровно тот заказ, какой нужен.
🔌 Зачем это бизнесу: клей между моделью и системами
Вот ради чего всё. Сам по себе красивый ответ модели — это тупик: его прочитал человек, и дальше всё снова руками. А структурированный ответ — это труба, по которой данные сами текут из модели в твои системы: в таблицу, в 1С, в CRM, в следующую программу по цепочке.
Разница прямая и денежная. Со свободным текстом каждый ответ кто-то должен прочитать и перенести руками — это упирается в человеко-часы и в опечатки. С формой ответ занимается своим местом автоматически: пришло письмо → модель разобрала по бланку → программа сама занесла в таблицу и завела заявку. Сто писем за минуту вместо трёх часов руками. И главное — предсказуемо: форма всегда одна, значит, принимающая программа не сломается на пятьдесят третьем ответе из-за того, что модель вдруг написала чуть иначе.
Именно поэтому структурированный вывод называют клеем автоматизации. Без него каждый кусок системы живёт сам по себе, и между ними сидит человек-переноска. С ним куски склеиваются в один процесс, который работает сам. На этом и держится всё, что в курсе пойдёт дальше — про инструменты агента и про сборку нескольких шагов в цепочку.
🎮 Что машина прочитает, а что — нет
Прежде чем жать кнопку — реши сам: вот ответ модели. Если его примет не человек, а другая программа — таблица, CRM, следующий шаг автоматизации — она поймёт его без твоих рук? Или кому-то придётся сидеть и растаскивать вручную?
Сначала пять ответов на одну задачу: для каждого реши — машина прочитает сама или нужны руки человека. А в конце задание посложнее: сам поймай, где форма врёт. Жми кнопку — сразу увидишь разбор. Это тренировка того самого чутья «по форме или нет», ради которого тема.
📖 Ключевые понятия
- Структурированный вывод
- Ответ модели не вольным текстом, а по заранее оговорённой форме — как блюдо в гастроёмкости с подписанными отсеками, а не «на глаз в руках». Каждый факт лежит в своём поле под понятным названием, поэтому другая программа читает ответ без догадок и без рук человека.
- JSON (структурированный формат данных)
- Общепринятый вид того самого бланка с полями, на котором между собой договариваются почти все программы. Записывается парами «название поля : значение». Тебе не нужно писать его руками — нужно знать, что его стоит просить, когда ответ должна читать другая программа.
- Бланк с полями vs свободное письмо
- Два способа подать один и тот же факт. Свободное письмо человек прочитает легко, машина — нет. Бланк, где у каждого факта своё подписанное поле, машина прочитает сама. Аккуратный список с тире и отступами — это всё ещё письмо для людей, а не бланк для программ.
- Клей автоматизации
- Роль структурированного вывода в цепочке: предсказуемая форма, по которой данные сами текут из модели в системы (таблицу, 1С, CRM, следующий шаг). Без него между кусками процесса сидит человек-переноска; с ним куски склеиваются в процесс, который работает сам.
🛡️ Частые заблуждения
«Если ответ выглядит аккуратно — со списком, отступами, заголовками — машина его прочитает»
Нет. Аккуратное оформление — это для человеческих глаз, а не строгая форма для программ. Машине нужны именно поля с одинаковыми названиями, а не красивые тире и переносы. Список «— отправитель: …» программа не обязана понять так же, как ты. Структура для глаз и структура для кода — разные вещи.
«Просить ответ в JSON — это техническая штука, мне в неё лезть незачем»
Лезть в синтаксис — незачем, писать его руками тебе не придётся. А вот понимать, когда просить ответ по форме, — твоя работа. Это решение владельца, а не повара: «этот ответ пойдёт в другую программу — значит, проси строгую форму». Одна фраза в запросе экономит человеко-часы на ручном переносе.
«Если в письме нет какого-то поля, модель сама поймёт и оставит его пустым»
Не рассчитывай на это по умолчанию. Модель «из вежливости» может дописать правдоподобное — выдуманную дату, придуманный номер — и программа примет это за правду. Поэтому в запросе прямо говори: «нет данных — поставь „не указано", не выдумывай». Пустой отсек честнее заполненного наугад.
🧠 AI-чутьё (AI Judgment)
Когда просить форму, чему доверять, где подстелить соломку
Главная мысль темы для владельца короткая: как только ответ модели должна читать не пара глаз, а другая программа — проси строгую форму, а не вольный текст. Это водораздел между «модель что-то написала, дальше руками» и «модель встроена в наш процесс, он работает сам». Структурированный вывод — основа любой надёжной интеграции AI в системы.
Два рабочих движения. Первое: на любой запрос, где результат пойдёт дальше по цепочке, сразу думай о форме — какие поля нужны принимающей системе и в каком виде (число, текст, выбор из списка). Второе: всегда закрывай лазейку для фантазии — «нет данных — пиши „не указано"», иначе получишь правдоподобную выдумку, которую программа молча проглотит. Форма даёт предсказуемость, но не делает содержимое автоматически правдой — это всё ещё угадывание повара, просто разложенное по полкам.
И прямой мостик вперёд. Этот приём — фундамент под двумя большими вещами в курсе. Когда агент берёт инструменты (лезет в склад, в CRM, дёргает другую программу), он общается с ними ровно такой строгой формой — иначе они его не поймут. И когда несколько шагов собирают в цепочку, выход одного шага становится входом следующего — и держится эта стыковка опять же на предсказуемой форме. Без структурированного вывода ни инструменты, ни цепочки не работают надёжно. Поэтому он и стоит здесь, до них.
🎯 Практика
Одно задание на десять минут — чтобы приём лёг на твою реальную работу, а не остался теорией.
- Возьми тот случай из начала страницы — где ты что-то переносил руками из одного места в другое. Что это были за данные?
- Выпиши поля бланка для этой задачи: какие именно куски тебе нужны на выходе и какого они вида. Например: «имя — текст», «сумма — число», «статус — один из: новый / в работе / закрыт».
- Собери из этого запрос по форме тремя движениями: (1) «верни строго в формате JSON, без лишнего текста»; (2) перечисли поля и что в каждом; (3) «нет данных — поставь „не указано", не выдумывай».
- Прогони запрос на трёх-четырёх реальных примерах. Сравни: ответ теперь можно вставить в таблицу как есть — или всё ещё надо растаскивать руками? Если надо — какого уточнения в форме не хватило?
Этот готовый «запрос по форме» — уже маленький кирпич автоматизации. Его можно отдать тому, кто будет настраивать процесс, со словами: «вот ровно те поля, что мне нужны на выходе, в таком виде». Так формулирует задачу владелец, который понимает свою кухню.