Авито перевела 65 витрин данных с Vertica на Trino: локальные LLM справились без облака
Команда BI-разработчиков Авито поделилась инженерным решением, которое позволило перевести около 65 витрин данных с Vertica SQL на Trino SQL при помощи локальной LLM, обойдя типичные проблемы галлюцинаций и потери контекста.
Локальные LLM (модели, которые работают на ваших серверах, а не в облаке) дают контроль над данными и экономят бюджет, но уступают облачным в качестве. Опыт Авито показывает: слабую модель можно сделать рабочей, если построить вокруг неё правильный процесс.
Алексей Дубинец и Павел Беспалов из коммерческого департамента Авито описали проект миграции SQL-витрин между двумя базами данных. Каждая витрина содержала от 500 до 4000 строк кода с временными таблицами, преобразованиями и бизнес-логикой. Ручной перевод был дорогим и нестабильным, существующие инструменты вроде SQL Glot и регулярных выражений задачу не решали, а облачные LLM требовали передачи внутренних данных компании наружу и быстро упирались в лимиты.
Почему нельзя просто скормить SQL модели целиком?
Первая попытка выглядела логично: загрузить весь SQL-файл в локальную LLM с промптом (текстовой инструкцией для модели) «переведи из Vertica в Trino без ошибок». Результат оказался непригодным.
Проблема называется «контекстное гниение» (context rot). Модели с открытыми весами размером около 30 миллиардов параметров начинают терять качество уже после 30 тысяч токенов (условных единиц текста, примерно 20 тысяч слов). Модель забывает правила из промпта, теряет структуру запроса и подставляет синтаксис из других диалектов SQL.
Дело в самом принципе работы: LLM выбирает наиболее вероятный ответ из нескольких вариантов. У неё нет варианта «я не знаю». Если в обучающих данных мало примеров Trino SQL, модель выдаст похожий, но неверный синтаксис из другого диалекта. Это и есть галлюцинация (когда ИИ уверенно выдумывает то, чего не было).
Модульный конвейер вместо одного промпта
Команда Авито перестала искать «идеальный промпт» и построила инженерную систему из десяти стадий. Вот ключевые:
- Split. Большой SQL-файл разбивается на мелкие блоки. Каждый блок переводится отдельно, что уменьшает контекст и снижает вероятность галлюцинаций. Это решение, по словам авторов, задало ритм всего процесса.
- Translate. Перевод каждого блока через скомпилированный модуль DSPy. Даже на небольшом фрагменте простого кода модель вносила до 9 правок.
- Pattern guard. После перевода regexp-фильтр отлавливает заведомо запрещённые конструкции Vertica, которые модель могла пропустить. Набор паттернов хранится в отдельном файле и легко расширяется.
- Assemble. Сборка итогового файла из последних версий всех частей.
- Api validate. Проверка платформенных правил и применение известных сценариев исправлений.
- Trino test. Запуск SQL в Trino с возможным циклом автоматических исправлений.
- Compare. Сверка результата с эталонной витриной.
- Finalize. Перенос результата в папку готовых или на ручную доработку.
Отдельно стоит упомянуть формат: модуль форматирования через sqlfluff авторы отключили по умолчанию, потому что он вносил больше проблем, чем решал.
Метаданные как память системы
Файл metadata.json начинался как обычный лог, но быстро стал операционной памятью всего конвейера. В нём хранятся зависимости между частями, история исправлений, диагностика по стадиям, данные для повторного запуска и артефакты для дашборда.
Именно метаданные превратили перевод из одноразового сеанса с LLM в воспроизводимый процесс. Можно увидеть статус каждого блока, продолжить работу с нужного места, локализовать ошибку.
Что делать с этим прямо сейчас?
Автору Дзена и копирайтеру. Принцип «разбей задачу на мелкие части и проверяй каждую» работает и с текстами. Если вы генерируете длинные статьи через локальные LLM, отправляйте не весь план разом, а по разделам. Это снизит количество галлюцинаций и упростит проверку.
Маркетологу и аналитику. Если в вашей компании есть SQL-витрины и стоит задача миграции, подход Авито показывает, что это можно автоматизировать без передачи бизнес-логики в облако. Локальные LLM решают вопрос конфиденциальности.
Предпринимателю в РФ. Локальные LLM доступны без ограничений и не зависят от зарубежных сервисов. Модели с открытыми весами (open weights) можно развернуть на своих серверах. Из российских альтернатив для текстовых задач есть YandexGPT и GigaChat, но для специализированной работы с кодом команда Авито использовала именно локальную модель на собственной инфраструктуре.
Витрина на 2000 строк Vertica SQL поступает на вход конвейера. Стадия Split разбивает её, допустим, на 15 блоков. Каждый блок переводится отдельно, проходит проверку regexp-фильтром на запрещённые паттерны, собирается обратно. Затем результат проверяется запуском в Trino и сравнивается с эталоном. В metadata.json фиксируется, какой блок прошёл, какой требует доработки. Если на одном блоке модель сгаллюцинировала, вы исправляете только его, а не перезапускаете перевод всего файла.
Подход «один большой промпт решит всё» не работает с локальными LLM на реальных задачах. Контекстное гниение начинается раньше, чем вы ожидаете. Не полагайтесь на промпт как единственный контроль качества: модель может проигнорировать инструкцию, особенно к концу длинного контекста. Модуль форматирования (sqlfluff в данном случае) может испортить рабочий код: тестируйте каждый компонент конвейера по отдельности. Проверка результата через regexp и запуск в целевой базе обязательна, иначе неявные ошибки уедут в продакшен.
По моим наблюдениям, большинство тех, кто пробует локальные LLM, разочаровываются именно потому, что ждут от них качества ChatGPT. Опыт Авито ценен не конкретным SQL-переводчиком, а самим подходом: разбить задачу, ограничить ответственность модели, проверить каждый шаг, сохранить историю. Это работает для любых задач с локальными LLM, будь то генерация текстов, обработка документов или анализ данных. Честная оговорка: такой конвейер требует инженерных навыков для настройки. Если вы не работаете с кодом, вам понадобится разработчик. Но сам принцип «не ищи идеальную модель, построй систему вокруг слабой» стоит запомнить всем, кто работает с ИИ.
Главный вывод из опыта Авито прост и применим далеко за пределами SQL: локальные LLM становятся полезными не тогда, когда вы находите правильный промпт, а когда перестаёте ждать от модели универсальности и выстраиваете процесс, который компенсирует её слабости.
Попробуйте ИИ-инструменты dzen.guru
Разбираем практические приёмы работы с нейросетями для авторов и маркетологов
Узнать больше
Основатель dzen.guru. Эксперт по монетизации и продвижению на Дзен. Автор курса «Старт на Дзен 2026».
Читайте также

Circleback обнулил цену входа: инструменты для заметок с ИИ теряют платный порог
Circleback, стартап из программы Y Combinator, 10 июня открыл бесплатный тариф для своего ИИ-блокнота встреч, чтобы перехватить пользователей на фоне резко…

Gemini 3.7 Flash решил 7 открытых математических задач, работая без человека сутками
Google Antigravity в связке с Gemini 3.7 Flash доказала, что команда ИИ-агентов способна решать открытые математические задачи, проектировать процессоры и…
Автоматизация 1С нейросетями: агент уже правит код, но галлюцинации ломают конфигурации
Нейросети в 1С пока придумывают несуществующие процедуры, но уже правят конфигурации сами: пять свежих инструментов из «Базы знаний» Платформа Infostart.ru…
Комментарии