3,583 papers
arXiv:2510.09014 70 10 окт. 2025 г. FREE

Execution-Guided Self-Correction: исправление через реальные ошибки выполнения

КЛЮЧЕВАЯ СУТЬ
Модель плохо находит ошибки в своём коде, но отлично их исправляет — если видит конкретное сообщение об ошибке. Фишка: одна итерация «запусти и получи error» эффективнее пяти попыток «проверь себя сам». Метод позволяет генерировать рабочий код через цикл: сгенерировал → запустил → получил ошибку → исправил конкретную проблему → повторил. Модель движется от грубых ошибок к точному решению пошагово, с объективной обратной связью на каждом шаге. Работает в ChatGPT/Claude с Code Interpreter — промпт управляет циклом исправлений автоматически.
Адаптировать под запрос

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, Южная Корея.


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

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

Модель плохо находит ошибки в своём коде, но отлично их исправляет — если видит конкретное сообщение об ошибке. Фишка: одна итерация «запусти и получи error» эффективнее пяти попыток «проверь себя сам». Метод позволяет генерировать рабочий код через цикл: сгенерировал → запустил → получил ошибку → исправил конкретную проблему → повторил. Модель движется от грубых ошибок к точному решению пошагово, с объективной обратной связью на каждом шаге. Работает в ChatGPT/Claude с Code Interpreter — промпт управляет циклом исправлений автоматически.

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

Вынеси проверку за пределы модели — в реальную среду выполнения. Цикл: генерация кода → запуск в интерпретаторе → если ошибка, скорми модели error message + исходный код → модель исправляет конкретную проблему → повтор до успеха. Интерпретатор находит ошибки объективно (опечатки в именах переменных, несоответствия типов данных, edge cases). Модель получает точную инструкцию ЧТО сломалось и ГДЕ — это узкая задача исправления, с которой LLM справляется отлично.

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

Когда модель проверяет код «в голове», она опирается на тот же механизм предсказания токенов, который создал ошибку. Это как проверять собственное сочинение — пропускаешь опечатки которые сам написал. Error message из интерпретатора — это внешний объективный сигнал, который модель не могла получить при самопроверке. Вместо абстрактного «проверь правильность» модель видит «на строке 15 переменная X не определена» — конкретная точка исправления. Каждая итерация сужает пространство ошибок: сначала ловим синтаксис, потом логику, потом граничные случаи. Одна итерация с реальной ошибкой > множественная генерация без обратной связи — в исследовании это дало +2-7% точности SQL-генерации.

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

Задачи с Code Interpreter → анализ данных (CSV/Excel обработка), генерация скриптов автоматизации, Python-код для расчётов. Особенно когда задача сложная и вероятны ошибки на первой попытке (работа с API, обработка нестандартных форматов данных, многошаговые вычисления). НЕ подходит для обычного чата без Code Interpreter — нужна реальная среда выполнения кода.

Мини-рецепт

1. Сформулируй задачу с инструкцией цикла: Напиши Python код для [задача]. Сразу запусти в Code Interpreter. Если ошибка — проанализируй error message, исправь конкретную проблему, запусти снова. Продолжай до успеха.
2. Укажи лимит итераций (опционально): для простых задач 2-3 попытки, для сложных до 5-7 — …продолжай до успеха или максимум 5 попыток
3. Добавь детализацию для сложных багов: Перед исправлением объясни ошибку простыми словами, потом исправь — помогает модели не пропустить логические проблемы
4. Проверь результат: модель либо выдаст финальный результат, либо покажет последнюю версию кода после исчерпания попыток

Примеры

[ПЛОХО] : Напиши код для анализа продаж по категориям из CSV — модель сгенерирует код, но вероятны ошибки в именах колонок, формате дат. Получишь нерабочий код.
[ХОРОШО] : У меня CSV с колонками: order_id, date, category, price, quantity. Напиши Python код: загрузи данные, отфильтруй последний квартал, посчитай выручку по категориям (price × quantity), выведи топ-5. Сразу запусти код. Если ошибка — исправь на основе error message и запусти снова. Продолжай до успеха. — модель запустит, увидит конкретную ошибку (например KeyError: 'Price' — колонка называется price), исправит именно её, повторит. Получишь рабочий результат через 2-3 итерации.
Источник: LitE-SQL: A Lightweight and Efficient Text-to-SQL Framework with Vector-based Schema Linking and Execution-Guided Self-Correction
ArXiv ID: 2510.09014 | Сгенерировано: 2026-01-12 01:12

Проблемы LLM

ПроблемаСутьКак обойти
Самопроверка кода использует тот же механизм, что создал ошибкуМодель генерирует код через предсказание токенов. Когда просишь "проверь себя" — она снова предсказывает токены. Опечатки в именах переменных, несовпадения типов, крайние случаи — всё это она пропускает. Как человек пропускает опечатки в собственном тексте. Модель не "видит" как код работает, она только угадывает правдоподобный текстЗапусти код в реальной среде. Code Interpreter в ChatGPT/Claude, терминал, база данных. Интерпретатор найдёт ошибку объективно. Покажи модели error message — она исправит конкретную проблему. Повтори цикл: выполнение ошибка исправление выполнение

Методы

МетодСуть
Цикл исправлений через выполнениеСхема: Модель генерирует код запускаешь в реальной среде если ошибка, даёшь модели error message + исходный код модель исправляет запускаешь снова повторяешь до успеха. Промпт: "Напиши код для {задача}. Сразу запусти в Code Interpreter. Если ошибка — исправь на основе error message и запусти снова. Продолжай до успеха". Почему работает: Error message показывает ЧТО сломалось и ГДЕ. Это конкретная инструкция, не абстрактная самопроверка. Модель хорошо исправляет когда видит точную ошибку. Применяй: анализ данных, скрипты, SQL-запросы. Не работает: без среды выполнения (обычный чат), для задач без объективной проверки. Лимит: 3-5 итераций для простых задач, до 7 для сложных
📖 Простыми словами

Execution-Guided Self-Correction: исправление через реальные ошибки выполнения

arXiv: 2510.09014

Проблема в том, что обычные нейронки тупеют, когда им скармливают огромные базы данных. Если в твоей БД сотни таблиц и тысячи колонок, модель просто захлебывается в этом информационном шуме. Она начинает либо пихать в запрос лишний мусор, либо вообще забывает про нужные данные. LitE-SQL решает это радикально: вместо того чтобы заставлять модель учить всю карту базы, он превращает поиск нужных колонок в умный фильтр, который отсекает всё лишнее еще до начала работы.

Это как если бы ты пришел в огромную библиотеку и вместо того, чтобы перерывать все полки вручную, просто крикнул: "Где тут книги про ремонт кранов?". И тут же из воздуха перед тобой вылетают три нужные страницы. Тебе не нужно знать, где стоят остальные десять тысяч томов — ты работаешь только с тем, что релевантно здесь и сейчас. В этом и суть Schema Retriever: он ищет совпадения по смыслу через векторную базу и выдает модели только тот узкий набор данных, который реально нужен для ответа.

Работает всё в два этапа: сначала векторный поиск выцепляет нужные колонки по косинусной близости, а потом специально обученная мелкая модель SQL Generator собирает из них запрос. Но самое крутое — это самокоррекция. Если запрос выдал ошибку или пустой результат, модель не сдается, а смотрит на лог ошибки и пробует переписать код. Это позволяет даже легким моделям на 7 миллиардов параметров обходить тяжеловесов, потому что они не гадают на кофейной гуще, а итеративно исправляют свои косяки.

Хотя тестировали это на SQL, принцип векторного линкинга и самопроверки через исполнение — это база для любого сложного AI-инструмента. Будь то генерация кода на Python, работа с API или анализ гигантских Excel-таблиц. Вместо того чтобы пихать в контекстное окно модели всё подряд, мы даем ей только точечные фрагменты знаний. Это экономит токены, ускоряет работу и, что важнее всего, избавляет от галлюцинаций, когда модель начинает выдумывать несуществующие колонки.

Главный вывод: будущее не за гигантскими моделями, которые знают всё, а за умными связками, где маленькая модель работает в паре с эффективным поисковиком. LitE-SQL доказывает, что можно не раздувать бюджет на железо, а просто перестать кормить нейронку мусором. Если хочешь, чтобы AI перестал лажать в аналитике — начни с фильтрации схемы, а не с покупки более дорогой подписки на ChatGPT.

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

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

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