Код-ревью в 1С с помощью ИИ: как собрать RAG-ассистента без Git, Sonar и EDT
Суть метода: RAG для локальной базы 1С
Retrieval-Augmented Generation (RAG) — это техника, где:
- Исходники разбиваются на фрагменты и индексируются
- По запросу выбираются релевантные участки кода
- LLM анализирует их в контексте конкретной задачи
Для 1С это означает обход ограничений IDE и анализ кода без полного экспорта в Git.
Пошаговая сборка
1. Выгрузка модулей
Удобный вариант без лишних зависимостей — выгрузка через командную строку конфигуратора (при условии, что база не заблокирована активными сеансами):
1cv8c DESIGNER /F "C:\bases\mybase" /DumpCfg "C:\export\config.cf"
После этого config.cf распаковывается утилитой v8Reader (open-source, GitHub; поддерживает форматы 8.2–8.3.x — для новых релизов платформы проверьте актуальность) в папку с отдельными файлами .bsl — по одному на каждый модуль.
Если работаете в облачной 1С:Fresh или без shell-доступа к серверу, DumpCfg недоступен — тогда используйте ручную выгрузку через меню конфигуратора или EDT-экспорт, если он есть. Для файловых баз v8Reader читает бинарный формат напрямую, без запуска платформы.
2. Подготовка чанков
- Разделяем модули на процедуры/функции с заголовками
- Сохраняем метаданные: имя модуля, тип (серверный/клиентский)
- Помечаем предопределённые обработчики форм (например,
ПриСозданииНаСервере,ПриОткрытии) — в типичных конфигурациях на управляемых формах там часто живут инициализирующие запросы; в проектах с выраженным разделением слоёв начинать стоит с серверных менеджеров и общих модулей
3. Запрос к LLM
Пример структуры промпта:
Проанализируй код 1С на типовые проблемы:
1. COM-объекты без явного вызова глобальной функцииОсвободитьОбъект(ОбъектCOM)
2. Отсутствие обработки ошибок в транзакциях (НачатьТранзакцию без Попытка)
3. Запросы внутри циклов (потенциальный N+1)
Тип модуля: {клиентский/серверный/общий}
Код: {релевантный_фрагмент}
Подводные камни
Размер контекста
Большие модули (500+ строк) не помещаются в контекстное окно LLM. Решение:
- Анализировать по процедурам, а не целиком
- Добавлять "заглушки" для глобальных переменных
Кириллица в именах
Старые или количественно сжатые (quantized) модели — особенно локальные через Ollama — иногда путают кириллические идентификаторы с ключевыми словами. Варианты:
- Транслитерировать имена перед анализом
- Явно указывать в промпте: «Кириллические идентификаторы — имена процедур и переменных, не ключевые слова»
Типы модулей
Ошибки в клиентском модуле формы (например, вызов серверного метода без &НаСервере) требуют понимания контекста. Поможет явное указание в промпте:
// Модуль: Обработка.Форма.ОсновнаяФорма (клиентский)
Практический вывод
RAG-подход даёт точку входа в автоматический анализ кода даже без CI/CD — при условии, что команда самостоятельно настраивает чанкинг и проверяет качество выводов LLM на своём кодовом примере. Достаточно:
- Выгружать конфигурацию перед анализом
- Дробить код на осмысленные фрагменты
- Формулировать конкретные критерии проверки
Это не замена ручному ревью, но фильтр для очевидных ошибок — когда других инструментов просто нет.
Перейти в каталог решений →