3,583 papers
arXiv:2608.03794 75 4 авг. 2026 г. FREE

Progressive-Text2SQL: граф рассуждений для сложных многоусловных запросов

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

TL;DR

Когда задачу нужно описать одной фразой, но в ней спрятано пять условий сразу — модель теряет часть логики. Исследователи заметили: чем сложнее запрос к базе данных, тем хуже модель справляется с ним "в один присест", потому что естественный язык слишком сжат для сложной логики, а SQL-запрос — слишком длинный и многослойный, чтобы держать его целиком "в голове" за один шаг.

Решение — разбить сложный запрос на граф пошаговых узлов: каждый узел — маленькая подзадача ("отфильтровать по дате", "объединить таблицы") с описанием на обычном языке и локальным результатом. Узлы связаны зависимостями — что нужно сделать раньше, что позже. Модель собирает финальный результат, проходя по графу шаг за шагом, а не пытаясь угадать всё сразу.

Метод показал: чем сложнее исходная задача, тем сильнее выигрыш от разбивки на граф. Для простых запросов эффект небольшой, для по-настоящему сложных — прирост точности резкий.


🔬

Схема метода

ШАГ 1: Раздели сложную задачу на подзадачи (узлы) 
       → каждый узел = короткое описание на обычном языке + локальный результат

ШАГ 2: Определи зависимости между узлами 
       → что должно быть сделано раньше, что зависит от чего (граф, не просто список)

ШАГ 3: Собери финальный результат, проходя граф по порядку зависимостей 
       → итоговый ответ строится из промежуточных шагов, а не угадывается целиком

Всё выполняется в рамках одного диалога — можно попросить модель сделать граф и сборку за один запрос или разбить на два шага (сначала граф, потом сборка).


🚀

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

Задача: Нужна сложная сводная таблица в Google Sheets — выручка по менеджерам за квартал, без учёта возвратов, с разбивкой по регионам и сортировкой убывания, плюс отдельно выделить тех, кто просел больше 20% к прошлому кварталу.

Промпт:

Мне нужна сложная формула/логика для сводной таблицы. Не пиши сразу готовую формулу.

Сначала построй граф рассуждений:
- Раздели задачу на узлы (подзадачи). Каждый узел — короткое описание, 
  что он делает, и что на выходе.
- Укажи зависимости: какой узел должен быть готов, прежде чем перейти к следующему.

Вот задача: посчитать выручку по менеджерам за 3-й квартал, исключить возвраты, 
разбить по регионам, отсортировать по убыванию суммы, и отдельно пометить 
менеджеров, у которых выручка упала больше чем на 20% к прошлому кварталу.

После того как построишь граф — пройди по нему шаг за шагом и собери 
финальную формулу/логику, объясняя на каждом узле, что добавляется.

Результат: Модель сначала выдаст список узлов вроде "1. Отфильтровать возвраты → 2. Сгруппировать по менеджеру и региону → 3. Посчитать сумму за Q3 и Q2 → 4. Посчитать % изменения → 5. Отсортировать и пометить упавших". Дальше — сборку итоговой формулы или логики по этим шагам, с объяснением на каждом этапе. Точность итога будет выше, чем если попросить готовую формулу одним предложением.


🧠

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

Модель плохо держит в "голове" длинную цепочку условий, если всё нужно решить одним скачком от фразы к результату. Пропущенное условие или потерянная зависимость — обычная причина ошибок в сложных запросах.

Зато модель хорошо умеет двигаться шаг за шагом, когда каждый шаг маленький и понятный — это тот же принцип, что стоит за Chain-of-Thought. Разница здесь в том, что шаги не просто идут друг за другом, а образуют граф с зависимостями — некоторые подзадачи можно решать параллельно, некоторые обязательно после других.

Рычаги управления: - Количество узлов → для простых задач не нужно разбивать глубоко, 2-3 узла достаточно - Явное требование "укажи зависимости, не просто список" → заставляет модель думать о порядке, а не просто перечислять шаги - Просьба "объясняй на каждом узле" → показывает логику и помогает поймать ошибку раньше финала


📋

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

Не отвечай сразу. Сначала построй граф рассуждений для этой задачи:

{задача}

Граф рассуждений:
- Раздели задачу на узлы (подзадачи). У каждого узла: короткое описание 
  на обычном языке + что получается на выходе.
- Укажи зависимости между узлами: какой узел должен быть готов раньше другого.

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

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

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

Вот шаблон разбивки сложной задачи на граф рассуждений. Адаптируй под мою задачу: {твоя задача}.
Задавай вопросы, чтобы понять зависимости между шагами.

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

LLM спросит, какие условия у твоей задачи связаны друг с другом и в каком порядке их нужно решать — потому что без этого граф не построить правильно. Она возьмёт структуру "узлы + зависимости + сборка" и подгонит её под твою ситуацию.


⚠️

Ограничения

⚠️ Для простых задач не даёт эффекта: если запрос короткий и однозначный (например "покажи всех клиентов из Москвы"), разбивка на граф — лишняя работа, точность не растёт заметно.

⚠️ Ошибка в графе тянет за собой финал: если модель неправильно определила зависимости или пропустила узел, итоговый результат наследует эту ошибку. Метод снижает, но не убирает риск ошибки — просто делает её более заметной и локализуемой.

⚠️ Не спасает от нехватки знаний о предметной области: если модель не знает специфику твоих данных (названия колонок, бизнес-логику), граф рассуждений не компенсирует этот пробел — нужно давать контекст отдельно.


🔍

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

Команда создала бенчмарк DBLifeBench — проверила 11 моделей (среди них GPT-4o, Llama3, DeepSeek, специализированные SQL-модели типа SQLCoder) не только на генерации запросов, но и на всём цикле работы с базой данных: дизайн схемы, создание таблиц, запросы, отладка ошибок, поддержка системы.

Главный неожиданный результат: модели, дообученные специально под SQL (SQLCoder, Llama3-sqlcoder), сильно проседают в задачах вне генерации запросов — дизайне схемы, поддержке, устранении неполадок. Исследователи назвали это "проклятием специализации" — узкая заточка под одну задачу стирает более широкие навыки. General-purpose модели (GPT-4o) оказались устойчивее и сбалансированнее по всем фазам.

Для Progressive-Text2SQL данные строили сразу несколько LLM (GPT-4o, Claude, Gemini, DeepSeek) — каждая независимо генерировала свой вариант графа рассуждений, чтобы не привязываться к стилю одной модели. Три студента вручную перепроверяли графы без подсказок от модели, и совпадение оценок оказалось высоким (80%+ согласия) — это подтвердило, что структура графа не случайна, а отражает реальную логику разбора задачи.

Отдельно проверили устойчивость: специально "ломали" узлы графа (искажали SQL, убирали логику, вставляли противоречия) и смотрели, насколько упадёт точность. Даже с поломанными узлами модель с графом почти всегда обгоняла модель без графа вовсе — то есть даже несовершенная декомпозиция лучше, чем её отсутствие.


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

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

Пять условий в одной фразе — а модель теряет два из них. Причина проста: обычный язык слишком сжат для сложной логики, а SQL-запрос слишком длинный, чтобы держать его целиком в голове за один шаг. Метод Progressive-Text2SQL позволяет разбить сложный запрос на граф подзадач с зависимостями — вместо того чтобы угадывать всё и сразу. Фишка не в шагах по очереди, а в том что это ГРАФ: часть узлов решается параллельно, часть — только после других, и чем сложнее исходная задача, тем резче прирост точности.

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

Не проси готовый SQL одним запросом — сначала строй граф зависимостей из маленьких подзадач. Каждый узел — короткое описание на обычном языке плюс локальный результат: «отфильтровать возвраты», «сгруппировать по региону». Узлы связаны не списком, а зависимостями — что нужно сделать раньше, что можно параллельно. Финал собирается проходом по графу, а не одним прыжком от фразы к ответу.

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

Модель плохо держит в голове длинную цепочку условий, если решает всё одним скачком. Пропущенное условие или потерянная зависимость — обычная причина ошибок в сложных запросах к базе данных. Зато маленькими понятными кусками модель справляется отлично — тот же принцип, что у пошаговых рассуждений (Chain-of-Thought). Разница тут в графе: часть подзадач решается параллельно, а не строго по очереди — это ближе к тому, как реально устроена логика сложного SQL-запроса.

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

Text2SQL и работа с базами данных → для многоусловных запросов с фильтрами, объединением таблиц, группировкой и вложенными условиями, особенно когда в одной фразе спрятано 4-5 требований сразу. НЕ подходит для простых однозначных запросов типа «покажи всех клиентов из Москвы» — разбивка там просто лишняя работа без роста точности.

Мини-рецепт

1. Раздели на узлы: каждый узел — короткое описание на обычном языке плюс результат на выходе (например, «отфильтровать возвраты → таблица без возвратов»)
2. Укажи зависимости: явно попроси модель написать, какой узел должен быть готов раньше другого — не просто список шагов, а граф
3. Собери финал по графу: попроси пройти узлы в порядке зависимостей и объяснить, что добавляется на каждом шаге — так ошибку видно раньше, чем в готовом ответе

Примеры

[ПЛОХО] : Напиши SQL-запрос: выручка по менеджерам за квартал без возвратов, по регионам, с сортировкой по убыванию и отметкой тех, кто упал больше чем на 20%
[ХОРОШО] : Не пиши сразу запрос. Сначала построй граф рассуждений: раздели задачу на узлы (подзадачи) с указанием зависимостей — что должно быть готово раньше другого. После этого пройди по графу шаг за шагом и собери финальный SQL, объясняя, что добавляется на каждом узле
Источник: Evaluating LLMs in Database Scenarios: A Lifecycle Benchmark for Assessing Their Potential in Core Database Tasks
ArXiv ID: 2608.03794 | Сгенерировано: 2026-08-05 06:32

Проблемы LLM

ПроблемаСутьКак обойти
Модель теряет условия в многоусловных задачахКогда задачу с 5+ условиями нужно решить одним шагом, модель упускает часть логики. Естественный язык сжимает условия в одну фразу, а итоговый результат требует держать всё сразу "в голове". Чем больше условий — тем выше шанс что одно из них потеряется или зависимость между условиями будет проигнорированаРазбей задачу на узлы-подзадачи с явными зависимостями между ними. Попроси модель сначала построить граф шагов, потом собрать результат по порядку зависимостей, а не выдавать готовый ответ сразу

Методы

МетодСуть
Граф зависимых подзадач для сложных запросовРаздели задачу на узлы: у каждого — короткое описание на простом языке и локальный результат. Явно укажи зависимости между узлами — что нужно сделать раньше, что позже. Собери финальный результат, проходя граф по порядку зависимостей, а не угадывая всё сразу. Раздели на узлы укажи зависимости собери результат по графу. Работает потому что маленький понятный шаг модель обрабатывает надёжно, а зависимости заставляют думать о порядке, а не просто перечислять действия. Работает: сложные запросы с 3+ условиями, многошаговые расчёты, документы со связанными правилами. Не работает: короткие однозначные задачи — разбивка не даёт прироста точности

Тезисы

ТезисКомментарий
Граф зависимостей сильнее линейного списка шаговПросто список шагов ("сначала это, потом то") не заставляет модель думать о том, что зависит от чего. Требование явно указать зависимости превращает список в граф — часть шагов можно делать параллельно, часть обязательно после других. Это точнее отражает реальную структуру сложной задачи, чем линейная цепочка. Применяй: в запросе пиши не "распиши шаги", а "укажи, какой шаг должен быть готов раньше другого"
📖 Простыми словами

EvaluatingLLMsin Database Scenarios: A Lifecycle Benchmark for Assessing Their Potential in Core Database Tasks

arXiv: 2608.03794

Проблема в том, что современные нейронки работают с базами данных не как гениальные программисты, а как перегруженные операторы. Корень беды в информационной плотности: когда ты просишь модель выгрузить данные с пятью условиями, она спотыкается о разрыв между коротким человеческим языком и громоздким SQL-кодом. Модель просто не может удержать в «голове» всю логику запроса за один проход, потому что естественный язык слишком сжат, а финальный код требует филигранной точности в каждом символе.

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

Чтобы это реально работало, исследователи предлагают прогонять задачи через жизненный цикл базы данных, а не надеяться на магию одного промпта. Эффективнее всего себя показывает пошаговая декомпозиция (разбиение сложного запроса на мелкие подзадачи) и проверка схемы данных (когда модель сначала изучает структуру таблиц, а не пишет код вслепую). Если нужно посчитать выручку по регионам с учетом возвратов и динамики к прошлому году, модель должна сначала «проговорить» каждый этап, иначе 10 из 15 условий просто вылетят из её оперативной памяти.

Тестировали всё это на суровых серверных задачах, но принцип универсален для любого сложного инструмента, будь то Google Sheets, Airtable или Notion. Везде, где есть структура и зависимости, нейронка ведет себя одинаково: чем больше «этажей» в твоем запросе, тем выше шанс, что логика схлопнется. Это не просто проблема перевода с русского на программный, это фундаментальный лимит того, как AI обрабатывает контекст.

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

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

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

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