TL;DR
Когда просишь LLM выдать ответ в JSON-формате, имена полей — это не нейтральные метки, а скрытые инструкции. Поле с именем answer («ответ») вытягивает одно поведение, а step_by_step_reasoning («пошаговое рассуждение») — другое. Содержимое основного промпта не меняется — меняются только имена полей. И результат меняется.
Модель не разделяет структуру и смысл. Она обучена на миллионах документов, где имена полей коррелируют с типом содержимого. Поле result → модель пишет коротко. Поле detailed_analysis_with_justification → модель разворачивает аргументацию. Имя поля создаёт внутреннее ожидание ещё до того, как модель начинает заполнять значение. Это работает тихо, без объявлений.
Вывод для практики прост: используй описательные, инструктивные имена полей вместо нейтральных коротких. Конкретнее — ниже.
Схема метода
Всё выполняется в одном промпте:
ШАГ 1: Определи задачу → что нужно от модели
ШАГ 2: Выбери нейтральные имена полей → замени на инструктивные
ШАГ 3: Вставь в промпт как требование к формату → модель сама наполнит правильно
Нейтральные имена (слабая версия):
{
"reasoning": "...",
"answer": "..."
}
Инструктивные имена (сильная версия):
{
"step_by_step_thinking_process": "...",
"final_verified_answer": "..."
}
Пример применения
Задача: Ты — продакт в стартапе. Нужно оценить идею добавить подписку вместо разового платежа в приложении для трекинга привычек. Просишь ChatGPT проанализировать.
Промпт (слабая версия — нейтральные поля):
Проанализируй идею: перевести приложение для трекинга привычек
с разового платежа (590 руб.) на подписку (199 руб./мес.).
Ответь в JSON:
{
"pros": "...",
"cons": "...",
"recommendation": "..."
}
Промпт (сильная версия — инструктивные поля):
Проанализируй идею: перевести приложение для трекинга привычек
с разового платежа (590 руб.) на подписку (199 руб./мес.).
Ответь в JSON:
{
"detailed_analysis_of_business_risks_with_examples": "...",
"specific_user_objections_and_how_to_handle_them": "...",
"step_by_step_recommendation_with_reasoning": "..."
}
Результат: Первый вариант даст краткий список преимуществ и недостатков — по два-три слова на каждый пункт. Второй — развёрнутый анализ с конкретными рисками (отток существующих пользователей, сравнение с конкурентами), типичными возражениями пользователей и аргументированной рекомендацией. Та же модель, тот же вопрос — другие имена полей.
Почему это работает
Слабость LLM: Модель не получает инструкций из воздуха — она опирается на весь контекст запроса. Если основной промпт сформулирован нейтрально ("проанализируй"), модель выбирает наиболее вероятный паттерн ответа — чаще всего короткий.
Сильная сторона LLM: Модель обучена на огромном корпусе текстов, где имена полей и атрибутов несут смысловую нагрузку. Поле detailed_reasoning в обучающих данных тысячи раз встречалось рядом с развёрнутыми аргументами. Это создаёт устойчивую ассоциацию — не правило, а статистический паттерн.
Как метод использует это: Инструктивное имя поля — это второй канал инструкций параллельно основному промпту. Ты говоришь задачу промптом, и одновременно говоришь модели как отвечать — именами полей. Два сигнала вместо одного.
Рычаги управления:
- Длина имени поля → длиннее и описательнее = больший «вес» инструкции
- Глагол в имени (analyze_ vs list_ vs evaluate_) → задаёт тип мышления
- Прилагательные (detailed_, specific_, critical_) → усиливают глубину
- Порядок полей → модель заполняет сверху вниз, первое поле задаёт «тон»
Шаблон промпта
{Задача или вопрос}
Ответь строго в формате JSON:
{
"{действие}_{объект}_{уточнение}": "...",
"{действие}_{объект}_{уточнение}": "...",
"{итоговое_действие}_with_clear_reasoning": "..."
}
Что подставлять:
- {задача} — твой вопрос или ситуация
- {действие} — глагол, который описывает тип мышления: detailed_analysis, step_by_step_evaluation, critical_review, specific_examples, justified_conclusion
- {объект} — что именно анализируем: risks, opportunities, arguments, objections
- {уточнение} — опционально: with_examples, with_reasoning, for_each_point
Шаблон на русском (тоже работает):
{Задача или вопрос}
Ответь строго в формате JSON:
{
"подробный_анализ_{чего}_с_примерами": "...",
"конкретные_{что}_и_как_с_ними_работать": "...",
"пошаговый_вывод_с_обоснованием": "..."
}
🚀 Быстрый старт — вставь в чат:
Я хочу попросить тебя проанализировать [моя задача]
и выдать ответ в JSON-формате.
Помоги мне придумать инструктивные имена полей —
такие, чтобы сами названия направляли тебя
на глубокий и конкретный ответ.
Предложи 3 варианта JSON-структуры с разными именами полей.
[вставить шаблон выше]
LLM спросит про задачу и тип нужного вывода (список рисков? пошаговое решение? сравнение вариантов?) — потому что от этого зависит какие глаголы и существительные лучше работают в именах полей.
Ограничения
⚠️ Зависимость от модели: Работает стабильно на моделях семейства Qwen. На LLaMA-моделях инструктивные имена полей без пояснения в основном промпте могут ухудшить результат — модель интерпретирует их как помеху. ChatGPT и Claude не тестировались в этом исследовании, но принцип общий.
⚠️ Не вместо промпта, а вместе: Инструктивные имена полей усиливают хороший промпт. Если основной промпт пустой (
"ответь на мой вопрос"), переименование полей не спасёт.
⚠️ Нет универсального словаря: Исследование не даёт конкретный список «лучших» имён полей — только принцип. Конкретные формулировки придётся тестировать под свою задачу.
⚠️ Добавление обоих каналов не суммируется: Если и в промпте написал «рассуждай пошагово», и поле назвал
step_by_step_reasoning_process— это не удвоит качество. Эффект нелинейный, иногда один сигнал мешает другому.
Как исследовали
Команда из Чжэцзянского университета сформулировала простой вопрос: что если схема JSON — это не просто техническая скорлупа, а инструкция? Они взяли задачи математического рассуждения (GSM8K и Math500) и проверили четыре варианта: без инструкций вообще, инструкция только в промпте, инструкция только в именах полей схемы, и оба канала сразу. Модели — семь штук из семейств Qwen и LLaMA, разного размера. Всё остальное держали неизменным: те же данные, та же система генерации, те же параметры.
Самый неожиданный результат: на Qwen2.5-7B смена только имён полей подняла точность с 79.6% до 86.5% — без единого изменения в промпте. При этом на Llama-3.2-3B та же смена имён обрушила точность с 53% до 37%. Разные модели живут в разных «режимах» восприятия инструкций. Одни лучше слышат схему, другие — только промпт.
Исследователи также проверили, складываются ли эффекты: «промпт+схема» не всегда лучше каждого по отдельности. На некоторых моделях два канала конфликтуют — давая результат хуже, чем один. Это важно: больше инструкций ≠ лучше результат.
Оригинал из исследования (опционально)
Авторы не публикуют конкретные имена полей, которые использовали — это ограничение воспроизводимости. Описывают принцип так:
For the reasoning field, we use key wording that explicitly encourages
step-by-step reasoning, while keeping the answer field clear and stable
to avoid introducing additional ambiguity.
Контекст: Это описание стратегии переименования для задач математического рассуждения. Нейтральное поле reasoning заменялось на инструктивное — предположительно что-то вроде step_by_step_reasoning_process или detailed_mathematical_solution_steps.
Адаптации и экстраполяции
1. Адаптация для ревью и критики
💡 Адаптация для обратной связи по тексту:
Нейтрально:
{"feedback": "...", "score": "..."}
Инструктивно:
{
"specific_language_issues_with_line_references": "...",
"structural_gaps_that_confuse_the_reader": "...",
"prioritized_improvements_from_most_to_least_critical": "..."
}
2. Адаптация техники: порядок полей как управление фокусом
🔧 Техника: первое поле задаёт «режим мышления» для всего ответа
Модель заполняет поля последовательно. Если первое поле — quick_intuitive_answer, модель входит в режим «быстро и уверенно». Если первое поле — all_possible_risks_and_uncertainties, модель входит в режим «осторожно и критично».
{
"all_risks_and_red_flags_before_proceeding": "...",
"only_after_risks_assessed_potential_benefits": "...",
"balanced_final_recommendation": "..."
}
vs.
{
"strongest_reasons_to_move_forward": "...",
"minor_concerns_to_keep_in_mind": "...",
"optimistic_action_plan": "..."
}
Та же задача, тот же промпт — другой первый вопрос к себе — разный итог.
3. Экстраполяция: XML-теги в промпте как тот же принцип
Тот же механизм работает с XML-тегами в промпте без JSON. Тег <критический_анализ_с_примерами> даст другой вывод, чем <мысли>. Имя тега = неявная инструкция.
Проанализируй питч-дек Яндекса для инвесторов:
<выявить_логические_противоречия_в_финансовой_модели>
[здесь напиши анализ]
выявить_логические_противоречия_в_финансовой_модели>
<конкретные_вопросы_которые_задаст_скептичный_инвестор>
[здесь напиши вопросы]
конкретные_вопросы_которые_задаст_скептичный_инвестор>
Ресурсы
Schema Key Wording as an Instruction Channel in Structured Generation under Constrained Decoding Автор: Yifan Le, Чжэцзянский университет (Zhejiang University) Контакт: leyifan@zju.edu.cn
Бенчмарки: GSM8K (Cobbe et al., 2021), Math500 (Hendrycks et al., 2021) Система генерации: XGrammar (Dong et al., 2024)
