3,583 papers
arXiv:2604.21076 70 22 апр. 2026 г. FREE

Формат данных для LLM: как способ подачи структуры влияет на точность извлечения

КЛЮЧЕВАЯ СУТЬ
LLM не выдумывает лишнее — она теряет нужное. В каждой из 20 протестированных комбинаций моделей и форматов точность всегда была выше полноты: модели пропускали реальные элементы значительно чаще, чем добавляли несуществующие. Это переворачивает логику проверки: не «не придумала ли модель?», а «всё ли она нашла?». Фишка: формат подачи данных меняет полноту ответа сильнее, чем кажется — нарративный текст с явными заголовками разделов даёт малым моделям (~7-8B параметров) на 19 процентных пунктов выше полноту по сравнению с сырым JSON, просто потому что модель перестаёт тратить усилия на разбор структуры и сразу работает с содержимым.
Адаптировать под запрос

TL;DR

Когда вы отдаёте LLM структурированные данные — таблицу, JSON, список — способ их форматирования меняет точность ответа сильнее, чем кажется. Исследование проверило четыре формата подачи одних и тех же медицинских данных: сырой JSON, таблицу Markdown, нарративный текст и хронологическую ленту. Для небольших моделей (~7–8B параметров) нарратив с явными заголовками разделов оказался лучше сырого JSON на 19 процентных пунктов точности. Для больших моделей (~70B) картина перевернулась — сырой JSON дал лучший результат.

Главная находка касается не формата, а типа ошибок: LLM пропускает элементы значительно чаще, чем выдумывает несуществующие. Во всех 20 комбинациях моделей и форматов точность (precision) превышала полноту (recall). Это значит: когда вы просите LLM извлечь список чего-либо, она вернёт вам часть правильных элементов, а не смесь правильных и ложных. Проблема — в пропусках, не в галлюцинациях.

Дополнительный потолок — длина списка. Маленькие модели перестают работать надёжно при попытке перечислить больше 7–10 элементов одновременно. Причём дело не в длине входного текста — длинные истории с малым числом активных пунктов модели обрабатывали хорошо. Проблема именно в размере выходного списка.


🔬

Схема метода

Это не один промпт-метод, а три извлекаемых принципа из исследования:

ПРИНЦИП 1: Формат данных
→ Для больших моделей (Claude, GPT-4o): сырой JSON и таблицы — ОК
→ Для меньших моделей: нарратив с явными заголовками > структура

ПРИНЦИП 2: Тип ошибок
→ LLM пропускает элементы, не выдумывает
→ Проверяй на полноту, не только на правдивость

ПРИНЦИП 3: Ёмкость списков
→ Просишь перечислить > 10 элементов → жди пропусков
→ Дроби на части: «первые 5», потом «следующие 5»

🚀

Пример применения

Задача: Ты ведёшь небольшой онлайн-магазин на Wildberries. Тебе нужно разобрать выгрузку из личного кабинета — 23 SKU с продажами, возвратами и остатками — и найти позиции, требующие пополнения склада.

Вместо того чтобы вставить сырую таблицу Excel и спросить «что нужно пополнить?», применяем принцип нарративного формата:

**Промпт:**

Я веду магазин на Wildberries. Ниже — данные по остаткам товаров за 
последние 30 дней. Найди все позиции, которым грозит out-of-stock 
в ближайшие 14 дней при текущем темпе продаж.

Критерий: остаток < скорость продаж × 14 дней.

ТОВАРЫ НА СКЛАДЕ (требуют мониторинга):
- Кроссовки белые р.38: остаток 12 шт., продаётся 2 шт./день
- Сумка кожаная чёрная: остаток 3 шт., продаётся 1 шт./день
- Толстовка серая XL: остаток 45 шт., продаётся 1 шт./день
[...остальные позиции...]

ТОВАРЫ ВНЕ МОНИТОРИНГА (уже в пополнении или сняты с продажи):
- Куртка синяя р.46: снята с продажи 10.05
- Ремень коричневый: уже заказан у поставщика

Верни список только тех позиций, которым грозит out-of-stock. 
Без объяснений — только список названий.

Результат: Модель вернёт список позиций, которым грозит обнуление склада. Важно: если позиций больше 10–12, проверь ответ — часть может быть пропущена. Лучше разбить на две части: «проверь первые 10 позиций», потом «проверь следующие 10».


🧠

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

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

Почему большие модели обходятся без этого. Claude и GPT-4o — это модели уровня 70B+ и выше. Для них разбор структуры не стоит усилий — они обрабатывают JSON не хуже нарратива. Поэтому на больших моделях можно смело кидать таблицы и JSON без ручного переформатирования.

Почему модели пропускают, а не выдумывают. LLM генерирует ответ последовательно, слово за словом. Остановиться раньше — легко. Добавить лишнее к уже сказанному — сложнее (особенно при температуре 0 и чёткой инструкции). Поэтому при любом формате ошибка «не упомянул» встречается чаще, чем «придумал несуществующее». Это меняет логику проверки: не «правда ли это?», а «всё ли это?».

Рычаги управления: - Явное разделение «активное / историческое» в заголовках раздела → модель не тратит логику на классификацию, сразу работает с нужными данными - Число элементов в запросе → если больше 10, дроби на части или проси «перечисли порциями по 5» - Фраза «верни только список, без объяснений» → снижает «мусор» в ответе и уменьшает число пропусков у маленьких моделей (меньше токенов тратится на рассуждения)


📋

Шаблон промпта

Принцип 1 — нарративный формат с явными заголовками:

Ниже — данные по {тема}. Найди все {что искать}.

{НАЗВАНИЕ РАЗДЕЛА 1 — то, что нужно проверять}:
- {элемент 1}: {параметр А}, {параметр Б}
- {элемент 2}: {параметр А}, {параметр Б}

{НАЗВАНИЕ РАЗДЕЛА 2 — то, что не нужно трогать}:
- {элемент}: {причина исключения}

Верни только список {что искать}. Без объяснений.

Принцип 2 — дробление длинных списков:

Это первая из {N} частей данных по {тема}.

{данные — не более 8-10 элементов}

Найди {что искать} в этой части. 
Сохрани результат — в следующем сообщении будет вторая часть.

Принцип 3 — проверка на полноту:

Я дам тебе {список/данные}. Твоя задача — убедиться, что ничего не пропущено.

{данные}

Сначала перечисли все элементы, которые видишь в данных — даже те, что 
не подходят под критерий. Потом из этого полного списка выдели {что искать}.

Плейсхолдеры: - {тема} — что анализируем: товары, задачи, транзакции, позиции в смете - {что искать} — критерий отбора: «с риском просрочки», «без исполнителя», «требующие доплаты» - {НАЗВАНИЕ РАЗДЕЛА} — явный заголовок типа «АКТИВНЫЕ ЗАДАЧИ», «УЖЕ ЗАКРЫТО», «ВНЕ РАМОК ПРОЕКТА» - {N} — число частей при дроблении


🚀 Быстрый старт — вставь в чат:

Вот шаблон для подачи структурированных данных в LLM. 
Адаптируй под мою задачу: [опиши задачу].
Задавай вопросы, чтобы заполнить поля.

[вставить шаблон выше]

LLM спросит про тему анализа, что именно искать и как разделить данные на разделы — потому что для нарративного формата важно правильно назвать группы, чтобы модель сразу поняла, что приоритетно.


⚠️

Ограничения

⚠️ Для крупных моделей (Claude, GPT-4o): Нарративный формат не даёт преимущества перед сырым JSON — большие модели справляются одинаково хорошо в обоих форматах. Переформатировать данные вручную ради красоты не стоит.

⚠️ Потолок длинных списков: Даже у крупных моделей точность падает при попытке вытащить 10+ элементов одним запросом. Нарративный формат смягчает, но не снимает эту проблему.

⚠️ Точного совпадения строк: В исследовании считали только дословные совпадения. В реальности у LLM точность выше — «аспирин 100мг» и «Aspirin 100 MG Oral Tablet» это одно. Реальные пропуски меньше, чем в цифрах исследования.

⚠️ Хронологический формат — ловушка: Подача данных строго по времени без разделения «актуальное/историческое» оказалась худшим вариантом даже для самой крупной модели. Если у тебя в данных есть «живые» и «архивные» записи — разделяй их явно, а не по дате.

⚠️ Медицинский домен ≠ гарантия: Модель, обученная на медицинских текстах (BioMistral), но без instruction tuning, вернула ноль полезного вывода. Доменные знания без умения следовать инструкциям — бесполезны.


🔍

Как исследовали

Исследователи взяли 200 синтетических пациентов с генерированными медицинскими историями и спросили пять разных LLM — от маленькой 3.8B до большой 70B — один и тот же вопрос: «какие лекарства сейчас активны у этого пациента?». Но каждую из четырёх версий формата подачи данных (сырой JSON, таблица, нарратив, хронология) тестировали отдельно. Итого 4000 запросов.

Интересное решение дизайна: для сырого JSON пришлось вводить обрезку — полные истории некоторых пациентов не помещались в контекст маленьких моделей (один пациент = 800 000 строк JSON). Это само по себе аргумент против сырого JSON в production-системах с небольшими моделями.

Удивительная находка: история записей не влияла на точность. Модели одинаково хорошо обрабатывали пациентов с 10-летней и 25-летней историей болезни. Ломались они только когда нужно было перечислить много активных позиций одновременно — не читать длинный текст, а написать длинный список. Узкое место — в генерации ответа, не в чтении данных.

Ещё один неожиданный результат: BioMistral — модель специально дообученная на медицинских текстах — вернула мусор на всех 200 пациентах и всех четырёх форматах. Ноль полезного вывода. Это разрушает интуитивное «возьми специализированную модель для специализированной задачи» — если у модели нет instruction tuning, она не умеет следовать инструкциям независимо от своего «экспертного» обучения.


🔗

Ресурсы

Название: Serialisation Strategy Matters: How FHIR Data Format Affects LLM Medication Reconciliation

Авторы: Sanjoy Pator (Independent Researcher)

Связанные работы: LLMonFHIR (Schmiedmayer et al., 2025, Stanford), FHIR-GPT (Li et al., 2024), Asgari et al. 2025 (оценка галлюцинаций в клинических текстах)

Инструменты из исследования: Synthea (генератор синтетических пациентов), Ollama (локальный запуск моделей)


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

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

LLM не выдумывает лишнее — она теряет нужное. В каждой из 20 протестированных комбинаций моделей и форматов точность всегда была выше полноты: модели пропускали реальные элементы значительно чаще, чем добавляли несуществующие. Это переворачивает логику проверки: не «не придумала ли модель?», а «всё ли она нашла?». Фишка: формат подачи данных меняет полноту ответа сильнее, чем кажется — нарративный текст с явными заголовками разделов даёт малым моделям (~7-8B параметров) на 19 процентных пунктов выше полноту по сравнению с сырым JSON, просто потому что модель перестаёт тратить усилия на разбор структуры и сразу работает с содержимым.

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

Три правила, которые вытекают из исследования. Правило первое — подбирай формат под размер модели. Малая модель (~7-8B): нарративный текст с явными заголовками — «АКТИВНЫЕ ПОЗИЦИИ» и «АРХИВ» отдельно — выигрывает у JSON и таблицы Markdown. Большая модель (70B+, Claude, GPT-4o): сырой JSON не хуже нарратива, переформатировать вручную ради точности не нужно. Правило второе — дроби длинные списки: любая модель начинает пропускать элементы после 7-10 позиций в одном ответе. Дело не в длине входных данных — длинные истории с малым числом активных пунктов модели обрабатывали хорошо. Проблема именно в размере того, что нужно вернуть. Правило третье — хронологическая подача данных без явного разделения «актуальное / историческое» оказалась худшим форматом даже для самой крупной модели. Если записи бывают живыми и архивными — раздели их явными заголовками, а не по дате.

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

Когда данные поданы как сырой JSON, модель решает две задачи разом: разбирает структуру и извлекает нужное. Нарративный формат убирает первую задачу — результат виден в цифрах: +19 процентных пунктов для малых моделей. Пропуски вместо выдумок — это не случайная особенность, а следствие того, как работает генерация: остановиться раньше легко, добавить лишнее к уже написанному — сложнее. Именно поэтому при любом формате модель возвращает часть правильных элементов, а не смесь правильных и придуманных. Ограничение выходного списка в 7-10 позиций то же самое: не длина входного текста давит, а сложность удержать в «голове» большой перечень при генерации слово за словом.

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

Любая задача на извлечение списка из структурированных данных — товарные остатки, строки сметы, задачи в проекте, транзакции, позиции договора — особенно когда в данных вперемешку «живые» и «архивные» записи. Важно когда используешь малую модель (локальную или дешёвую через API) и не можешь позволить себе пропуски. НЕ подходит как мотивация переформатировать данные под нарратив для крупных моделей (Claude, GPT-4o, GPT-4-turbo) — они справляются с JSON одинаково хорошо, ручная работа по переформатированию не даст выигрыша.

Мини-рецепт

1. Раздели данные на группы явными заголовками: не «вот все записи», а «АКТИВНЫЕ ПОЗИЦИИ» и «АРХИВ / ВНЕ МОНИТОРИНГА» — модель сразу видит что приоритетно и не тратит логику на классификацию.

2. Если элементов больше 10 — дроби на части: скажи модели «это первая из N частей, найди нужное здесь, сохрани результат — вторая часть следом» и отправляй порциями по 8-10 позиций.

3. Попроси сначала перечислить всё, потом отфильтровать: добавь в промпт «сначала перечисли все элементы, которые видишь в данных — даже не подходящие под критерий — потом из этого полного списка выдели нужные». Это снижает пропуски: модель сначала делает «перепись», потом сортировку.

4. Заверши промпт явной инструкцией на формат ответа: Верни только список названий. Без объяснений. — меньше служебных токенов в ответе, меньше пропусков у малых моделей.

Примеры

[ПЛОХО] : Вот выгрузка из CRM за квартал [вставить JSON с 30 полями]. Какие сделки зависли без следующего шага?
[ХОРОШО] : Ниже — данные по сделкам. Найди все, где нет запланированного следующего шага и срок последнего контакта больше 14 дней. АКТИВНЫЕ СДЕЛКИ (нужна проверка): - Клиент А: последний контакт 12.05, следующий шаг — не назначен - Клиент Б: последний контакт 03.05, следующий шаг — звонок 20.05 - Клиент В: последний контакт 28.04, следующий шаг — не назначен ЗАКРЫТЫЕ И АРХИВНЫЕ (не трогать): - Клиент Г: сделка закрыта 15.05 - Клиент Д: отказ, архив Верни только список клиентов из активных, которые зависли. Без объяснений. Если активных сделок больше 10 — не вали всё в один промпт. Отправь первые 8, потом следующие 8. Иначе часть потеряется — и ты об этом не узнаешь.
Источник: Serialisation Strategy Matters: How FHIR Data Format Affects LLM Medication Reconciliation
ArXiv ID: 2604.21076 | Сгенерировано: 2026-04-24 05:33

Проблемы LLM

ПроблемаСутьКак обойти
Модель пропускает элементы списка, а не выдумывает лишниеПросишь извлечь список из данных. Модель возвращает часть правильных элементов. Остальные просто не упоминает. При этом ложных элементов почти нет. Проблема не в галлюцинациях — в пропусках. Это меняет логику проверки: спрашивать нужно не «правда ли это?», а «всё ли это?»Попроси модель сначала перечислить ВСЕ элементы которые видит. Потом из этого полного списка выделить нужные. Два шага: «что есть» «что подходит». Пропусков станет меньше
Длинный выходной список ломает точностьПросишь перечислить 10+ элементов одновременно — модель начинает пропускать. Важно: дело не в длине входных данных. Длинная история с 3 нужными пунктами — ОК. Проблема именно в размере списка на выходеДроби по выходу, не по входу. Вместо «найди всё» пиши «проверь первые 8 позиций». Потом следующие 8. Граница — около 7–10 элементов в одном ответе

Методы

МетодСуть
Нарративный формат с явными заголовками — для малых моделейКогда работаешь с моделью размером меньше 30B: не кидай сырой JSON или таблицы. Переформатируй данные в текст с явными разделами. Пример: вместо JSON-массива пиши АКТИВНЫЕ ЗАДАЧИ: и УЖЕ ЗАКРЫТО: с перечнями. Почему работает: малая модель тратит ресурс на разбор структуры. Нарратив снимает эту задачу — модель сразу видит что важно. Для больших моделей (Claude, GPT-4o) — разницы нет, там JSON работает так же хорошо
Явное разделение «актуальное / архивное» в структуре данныхЕсли в данных есть живые и исторические записи — раздели их в отдельные разделы. Не по дате, а по смыслу: ЧТО НУЖНО ПРОВЕРИТЬ: и УЖЕ НЕ АКТУАЛЬНО:. Почему работает: без явного деления модель тратит логику на классификацию каждой записи. С заголовками — сразу работает с нужными данными. Хронологический порядок без такого деления — худший вариант подачи данных
📖 Простыми словами

Serialisation Strategy Matters: How FHIR Data Format AffectsLLMMedication Reconciliation

arXiv: 2604.21076

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

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

Исследование четко разделило мир на «малышей» и «гигантов». Для небольших моделей типа Llama 3 8B сырой JSON — это яд: точность падает на 19 процентных пунктов по сравнению с обычным текстом. Им жизненно необходимы нарратив и заголовки, чтобы не заблудиться в данных. А вот тяжеловесы вроде GPT-4 или Llama 70B ведут себя иначе — они настолько натренированы на коде, что сырой JSON для них понятнее, чем попытки человека расписать всё «своими словами». Там, где маленькая модель видит хаос, большая видит четкую структуру.

Этот принцип универсален и применим далеко за пределами медицины. Если ты анализируешь продажи на маркетплейсе, отчеты по рекламе или логи сервера, выбор формата зависит от того, какую «железку» ты используешь. Тестировали на медицинских картах, но логика та же: для дешевых и быстрых моделей переводи данные в текстовое описание, а для топовых и дорогих — оставляй структурированный код. Ошибка в выборе формата превращает мощный инструмент в генератор случайных галлюцинаций.

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

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

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

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