TL;DR
LitE-SQL — система для генерации SQL-запросов из текста, которая состоит из Schema Retriever (находит нужные колонки БД через векторный поиск) и SQL Generator (генерирует и исправляет SQL). Основной принцип: модель генерирует запрос → выполняет на реальной БД → если ошибка, получает error message → исправляет с учётом ошибки → повторяет до успеха. Сама система требует программирования (векторная БД, fine-tuning), но принцип самокоррекции через выполнение работает в обычных чатах с Code Interpreter.
Проблема: когда LLM генерирует SQL (или код), она часто делает синтаксические или логические ошибки. Стандартные методы борются с этим через генерацию множества вариантов и выбор лучшего (self-consistency), но это дорого — много запросов к модели. Другой подход — попросить модель проверить себя, но она может пропустить ошибки, которые видны только при реальном выполнении. Реальная ошибка из интерпретатора точнее, чем воображаемая проверка модели.
Решение: после генерации кода запускай его в среде выполнения (Code Interpreter, реальная БД, терминал). Если получил ошибку — скормить модели error message + исходный код + задачу. Модель видит конкретную ошибку и исправляет целенаправленно. Повторяй цикл до успеха или лимита попыток. Одна итерация с реальной ошибкой эффективнее пяти попыток "проверь сам себя".
Схема метода
ШАГ 1: Генерация
Модель создаёт SQL/код по задаче
ШАГ 2: Выполнение
Запуск в реальной среде (БД, интерпретатор)
ШАГ 3: Проверка результата
- Успех → готово
- Ошибка → следующий шаг
ШАГ 4: Сбор feedback
Собрать: error message + исходный код + задача
ШАГ 5: Исправление
Модель генерирует новую версию с учётом ошибки
ЦИКЛ: Повтор шагов 2-5 до успеха или лимита итераций
В исследовании всё это встроено в fine-tuned модель через reinforcement learning. В обычном чате ты управляешь циклом вручную или промптом.
Пример применения
Задача: Анализ продаж для маркетплейса — загрузи CSV с заказами Wildberries и найди топ-5 категорий по выручке за последний квартал.
Промпт:
У меня есть CSV файл с данными заказов (колонки: order_id, date, category, price, quantity).
Напиши Python код, который:
1. Загрузит данные
2. Отфильтрует последний квартал
3. Посчитает выручку по категориям (price × quantity)
4. Выведет топ-5
Сразу запусти код. Если будет ошибка — исправь на основе error message и запусти снова. Продолжай до успешного выполнения.
Результат:
Модель сгенерирует код и запустит в Code Interpreter. Часто в первой попытке возникают ошибки:
- Неправильный формат дат
- Опечатка в названии колонки
- Неверный синтаксис pandas
Модель увидит конкретный error message (например: KeyError: 'Price' — колонка называется 'price', не 'Price'), исправит именно эту ошибку, запустит снова. Цикл продолжается автоматически — ты получишь либо результат, либо финальную версию кода после нескольких итераций.
Почему это работает
Слабость LLM: Модель предсказывает следующий токен на основе паттернов, но не "видит" как код работает на практике. Ошибки типа опечаток в именах переменных, несоответствия типов данных, edge cases — всё это проявляется только при выполнении. Когда модель проверяет код "в голове", она опирается на тот же механизм предсказания, который создал ошибку. Это как проверять собственное сочинение — пропускаешь опечатки, которые сам написал.
Сильная сторона LLM: Модель отлично исправляет код, когда видит конкретную ошибку. Error message — это точная инструкция ЧТО сломалось и ГДЕ. Вместо абстрактного "проверь правильность" модель получает "на строке 15 переменная X не определена" — это узкая задача исправления, с которой LLM справляется хорошо.
Как метод использует это: Вынеси проверку за пределы модели — в реальную среду выполнения. Интерпретатор/БД находит ошибки объективно. Error message становится внешним сигналом, который модель не могла получить при самопроверке. Каждая итерация уменьшает пространство ошибок: сначала ловим синтаксис, потом логику, потом edge cases. Модель движется от грубых ошибок к точным решениям пошагово, с объективной обратной связью на каждом шаге.
Рычаги управления: - Лимит итераций — для простых задач хватает 2-3 попыток, для сложных увеличь до 5-7 - Детализация error — можешь попросить модель вывести промежуточные значения перед исправлением - Стратегия исправления — добавь "объясни ошибку простыми словами, потом исправь" для сложных багов
Шаблон промпта
У меня есть задача: {описание задачи}.
Данные: {формат данных, источник}.
Напиши {язык программирования} код, который {что должен делать}.
Сразу запусти код в Code Interpreter.
Если получишь ошибку:
1. Проанализируй error message
2. Исправь конкретную проблему
3. Запусти исправленную версию
Продолжай цикл исправлений до успешного выполнения или пока не упрёшься в принципиальное ограничение.
В конце выведи финальный результат.
Плейсхолдеры:
- {описание задачи} — что нужно получить (например: "найти топ-10 клиентов по сумме покупок")
- {формат данных} — CSV, JSON, Excel; колонки, структура
- {язык программирования} — Python (для ChatGPT/Claude Code Interpreter)
- {что должен делать} — конкретные шаги обработки
Ограничения
⚠️ Требует среду выполнения: Метод работает только если есть возможность реально запустить код — Code Interpreter в ChatGPT/Claude, доступ к БД, терминал. В обычном чате без Code Interpreter это не работает.
⚠️ Не для всех языков: Code Interpreter поддерживает Python (иногда bash). Для SQL нужен доступ к реальной БД. Для JavaScript/TypeScript — нужен отдельный runtime.
⚠️ Может зациклиться: Если задача сформулирована нечётко или требует данных, которых нет, модель может генерировать разные версии с одинаковыми ошибками. Установи лимит итераций явно (3-5 для простых задач).
⚠️ Дороже по токенам: Каждая итерация — новый запрос с предыдущим кодом + ошибка + новая генерация. Для сложных задач может быть 5-7 итераций. Это эффективнее по качеству, но дороже чем one-shot генерация.
Ресурсы
LitE-SQL: A Lightweight and Efficient Text-to-SQL Framework with Vector-based Schema Linking and Execution-Guided Self-Correction Исследование показывает, что execution-guided самокоррекция через DPO (Direct Preference Optimization) улучшает точность SQL-генерации на 2-7% за счёт обучения модели исправлять ошибки на основе реальных error messages.
Shengmin Piao, Jieun Lee, Sanghyun Park — Yonsei University, Южная Корея.
