3,583 papers
arXiv:2604.14862 72 16 апр. 2026 г. FREE

Именование полей JSON как скрытый канал инструкций: как названия полей меняют качество ответа

КЛЮЧЕВАЯ СУТЬ
Промпт не трогаешь — меняешь только имена полей JSON. Глубина ответа другая. Метод позволяет получить развёрнутый, аргументированный ответ без переписывания основного запроса. Фишка: имя поля — это скрытая инструкция. Поле answer сигналит «ответь коротко». Поле step_by_step_verified_reasoning сигналит «разверни логику». Та же модель, тот же вопрос — два разных ответа.
Адаптировать под запрос

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)


📋 Дайджест исследования

Ключевая суть

Промпт не трогаешь — меняешь только имена полей JSON. Глубина ответа другая. Метод позволяет получить развёрнутый, аргументированный ответ без переписывания основного запроса. Фишка: имя поля — это скрытая инструкция. Поле answer сигналит «ответь коротко». Поле step_by_step_verified_reasoning сигналит «разверни логику». Та же модель, тот же вопрос — два разных ответа.

Принцип работы

Не пиши просто pros / cons / recommendation. Пиши detailed_analysis_of_business_risks_with_examples, specific_user_objections_and_how_to_counter_them. Формула имени поля: глагол + объект + уточнение. detailed_analysis вместо analysis. step_by_step_evaluation вместо evaluation. justified_conclusion_with_reasoning вместо conclusion. Длиннее и конкретнее — сильнее сигнал. Порядок полей тоже работает: модель заполняет сверху вниз, первое поле задаёт тон всему ответу.

Почему работает

Модель обучалась на миллионах документов — кодовых базах, документациях, аналитических отчётах. В этих данных имена полей всегда коррелировали с типом содержимого. detailed_reasoning тысячи раз стояло рядом с развёрнутыми аргументами. result — рядом с короткими строчками. Имя поля создаёт статистическое ожидание ещё до того, как модель начала писать значение. Это второй канал инструкций — работает параллельно основному промпту, тихо, без объявлений. Ты говоришь задачу промптом, и одновременно говоришь как отвечать — именами полей.

Когда применять

Любая задача с выводом в JSON-структуре: анализ решений, оценка рисков, сравнение вариантов, пошаговый разбор кейса — особенно когда нужна глубина, а не маркированный список. НЕ подходит: если основной промпт размытый или пустой — переименование полей не вытащит пустой запрос. Важно: на LLaMA-моделях без пояснения в основном промпте инструктивные имена могут ухудшить результат — модель воспринимает их как помеху. На ChatGPT и Claude исследование не тестировалось, но принцип работает через общую логику обучения на данных.

Мини-рецепт

1. Назови задачу: Что именно нужно — анализ, сравнение вариантов, оценка рисков?
2. Выбери глагол для каждого поля: detailed_analysis_ / step_by_step_evaluation_ / critical_review_ / specific_examples_of_ — глагол задаёт тип мышления, а не просто называет содержимое
3. Добавь объект и уточнение: _of_business_risks_with_examples, _of_user_objections_and_how_to_handle_them — чем конкретнее объект, тем точнее ответ
4. Поставь итоговое поле последним: final_justified_recommendation_with_step_by_step_reasoning — модель заполняет поля сверху вниз, итог должен опираться на предыдущие

Примеры

[ПЛОХО] : {"pros": "...", "cons": "...", "recommendation": "..."} — получишь по две строки на каждый пункт, никакой конкретики
[ХОРОШО] : {"detailed_analysis_of_business_risks_with_real_examples": "...", "specific_user_objections_and_how_to_counter_each_one": "...", "step_by_step_recommendation_with_justified_reasoning": "..."} — та же модель, тот же вопрос: развёрнутый анализ рисков с примерами, разбор возражений, аргументированный вывод
Источник: Schema Key Wording as an Instruction Channel in Structured Generation under Constrained Decoding
ArXiv ID: 2604.14862 | Сгенерировано: 2026-04-17 05:23

Проблемы LLM

ПроблемаСутьКак обойти
Нейтральные имена полей JSON дают мелкие ответыПросишь ответ в JSON. Называешь поля коротко: answer, pros, cons. Модель видит нейтральную метку — и даёт минимальный ответ. Не потому что не умеет больше. А потому что имя поля не дало сигнала что именно нужно. Проблема для любых задач где нужна глубина: анализ, оценка, сравнениеЗамени короткие имена на описательные. Вместо reasoning пиши step_by_step_thinking_process. Вместо recommendationstep_by_step_recommendation_with_reasoning. Само поле имя уже инструктирует модель

Методы

МетодСуть
Имена полей JSON как второй канал инструкцийКогда просишь ответ в JSON — используй имена полей как дополнительные инструкции. Структура имени: {глагол}_{объект}_{уточнение}. Глагол задаёт тип мышления: detailed_analysis_of, step_by_step_evaluation_of, critical_review_of. Уточнение усиливает глубину: _with_examples, _with_reasoning, _for_each_point. Порядок важен: модель заполняет сверху вниз. Первое поле задаёт «тон» для остальных. Когда работает: задача требует глубины, основной запрос уже достаточно конкретный. Когда не работает: основной запрос пустой — имена полей не спасут; на некоторых моделях семейства LLaMA эффект обратный

Тезисы

ТезисКомментарий
Имя поля в JSON — статистический сигнал о типе содержимогоМодель обучена на миллионах документов. В них имена полей и атрибутов коррелировали с типом содержимого. Поле detailed_analysis тысячи раз встречалось рядом с развёрнутой аргументацией. Поле result — рядом с короткой строкой. Эта ассоциация остаётся. Модель «ожидает» определённый тип ответа ещё до того как начинает его писать. Применяй: хочешь список — назови list_of. Хочешь рассуждение — назови step_by_step_reasoning. Хочешь критику — назови critical_objections_with_examples
📖 Простыми словами

Schema Key Wording as an Instruction Channel in Structured Generation under Constrained Decoding

arXiv: 2604.14862

Когда ты просишь нейронку выдать ответ в строгом формате JSON, названия полей в схеме перестают быть просто техническими метками. Это не пустые контейнеры, а скрытые инструкции, которые напрямую управляют «мозгами» модели. Если ты назовешь поле result, получишь сухую отписку, но стоит переименовать его в step_by_step_reasoning, и модель внезапно начинает рассуждать глубоко и подробно. Суть в том, что LLM обучались на гигантских массивах кода и данных, где названия переменных всегда несут смысл, поэтому для них имя ключа — это приказ, который может перевесить даже основной промпт.

Это как если бы ты дал повару пустую тарелку с надписью «десерт» или тарелку с надписью «закуска». Продукты на кухне одни и те же, повар один и тот же, и ты даже не сказал ни слова, но в первом случае он приготовит что-то сладкое, а во втором — соленое. Формально ты ничего не просил, но контекст самой «посуды» продиктовал результат. В мире структурированной генерации схема данных — это и есть форма тарелки, которая заставляет модель подстраивать свои рассуждения под ожидания, заложенные в названиях полей.

Исследователи проверили это на практике: они оставляли основной запрос неизменным, но меняли ключи в JSON-схеме. Выяснилось, что Schema Key Wording работает как мощный рычаг управления. Если поле называется concise_summary, модель безжалостно режет текст, а если comprehensive_analysis, она начинает «галлюцинировать» подробностями и связями, которые раньше игнорировала. Это не просто косметический эффект — это канал передачи инструкций, который работает даже тогда, когда основной промпт сформулирован максимально нейтрально.

Этот принцип универсален и применим везде, где нужно выжать из модели конкретное поведение без переписывания длинных инструкций. Тестировали на сложных логических задачах, но это работает и для бизнес-анализа, и для классификации данных. Если ты строишь систему на базе ChatGPT, Perplexity или Gemini, помни: твоя структура данных — это часть промпта. SEO для полей схемы становится важнее, чем само описание задачи, потому что модель цепляется за названия ключей как за спасательный круг в океане контекста.

Короче: хватит относиться к названиям полей в коде как к бессмысленным key1 или data. Каждое слово в схеме — это микро-промпт, который либо помогает модели выдать базу, либо заставляет её лажать. Используй говорящие названия ключей, чтобы направлять логику нейронки в нужное русло без лишней воды в основном запросе. Кто игнорирует семантику схемы, тот получает рандомный мусор на выходе и гадает, почему модель внезапно отупела.

Работа с исследованием

Адаптируйте исследование под ваши задачи или создайте готовый промпт на основе техник из исследования.

0 / 2000
~0.5-2 N-токенов ~10-30с
~0.3-1 N-токенов ~5-15с