Субагенты на дешёвой модели: как проверять цитаты BSL и отсекать галлюцинации

20.10.26

Разработка - Инструментарий разработчика

Дешёвые модели-субагенты собирают из выгрузки 1С цитаты и имена процедур, но иногда выдумывают процедуры и искажают код. Скрипт quote_fact_checker.py сверяет отчёт субагента с файлами выгрузки BSL: файл, процедуру, флаг Экспорт, цитату и номера строк; при отказе печатает unified diff и возвращает код 1. На тестовом модуле отловлены четыре типичных дефекта, семь автотестов проходят из распакованного архива. Экономию на токенах не замеряла, это указано в тексте.

Файлы

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование Скачано Купить файл
Скрипт сверки цитат BSL: детектор галлюцинаций ИИ-субагентов и тестовый стенд
.zip 14,98Kb
1 2 500 руб. Купить

Подписка PRO — скачивайте любые файлы со скидкой до 85% из Базы знаний

Оформите подписку на компанию для решения рабочих задач

Оформить подписку и скачать решение со скидкой

Вы можете заказать платную доработку или адаптацию этой разработки под вашу конфигурацию на «Бирже заказов».

  • 0% комиссии — оплата напрямую исполнителю;
  • Исполнители любого масштаба — от отдельных специалистов до команд под проект;
  • Прямой обмен контактами между заказчиком и исполнителем;
  • Безопасная сделка — при необходимости;
  • Рейтинги, кейсы и прозрачная система откликов.
Инженерия 1С • ИИ-субагенты • Проверка цитат BSL

Ситуация: выгрузка конфигурации 1С занимает сотни мегабайт. Читать её целиком дорогой моделью накладно, поэтому сбор цитат и имён процедур поручают дешёвым субагентам. Они иногда придумывают процедуры, которых нет, и «улучшают» цитаты. Проверять каждую ссылку глазами долго, а цитата, похожая на правду, пройдёт незамеченной.

О чём это (в трёх тезисах):

- Скрипт quote_fact_checker.py сверяет отчёт субагента с выгрузкой BSL: есть ли файл, есть ли процедура, совпадает ли флаг Экспорт, входит ли цитата в тело метода, не уехали ли номера строк.

- Четыре типичных дефекта (выдуманная процедура, искажённая цитата, подмена видимости, дрейф строк) на тестовом модуле отловлены; при отказе скрипт печатает unified diff и возвращает код 1.

- Семь автотестов проходят из распакованного архива за 0,57 с; экономию на токенах и скорость конвейера я не замеряла.

Отчёт о тестировании файла-компаньона:

17.10.2026, Windows 11 Pro, Python 3.12.7, запуск из распакованного архива subagent-quote-checker-companion.zip (15 КБ: quote_fact_checker.py, test_quote_checker.py, fixtures/, README.md) во временном каталоге. Команда: python -X utf8 -m unittest test_quote_checker.py -v. Результат: 7 тестов, ошибок нет, 0,57 с. Не проверялось: работа с реальной выгрузкой конфигурации, модули в формате EDT, нагрузка.

Суть статьи:

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

Для кого: разработчики 1С и тимлиды, которые поручают ИИ-субагентам первичный разбор выгрузок и хотят автоматически отсекать выдуманные процедуры и искажённые цитаты.

Субагент возвращает отчёт: модуль, имя процедуры, номера строк, дословная цитата. Верить ему на слово нельзя, а сверять цитаты руками дольше, чем найти их в файле. Скрипт делает эту сверку за полсекунды без обращения к модели. Дальше по порядку: как разделены роли, как устроен разбор BSL, что скрипт ловит и чего не умеет.

Роли в связке моделей

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

Этап Участник Что делает
1 Ведущая модель Ставит задачи, проектирует доработку, выдвигает гипотезы
2 Дешёвые субагенты Ищут методы в CommonModules, собирают цитаты, пишут отчёт в JSON
3 Скрипт quote_fact_checker.py Проверяет файл, сигнатуру, флаг Экспорт, цитату и номера строк; локальный Python, без LLM
4 Человек Принимает только то, что прошло сверку, и решает, что внедрять

Если отчёт получил REJECT, его возвращают субагенту с текстом отказа, а человеку он не попадает. Сколько это экономит денег, я не считала: цена зависит от выбранных моделей и объёма выгрузки.

Рис. 1. Файловая структура стенда: каталог выгрузки BSL и исходный код модуля в Windows PowerShell

Стенд проверки

Компонент Версия Назначение
Операционная система Windows 11 Pro, 64 бита Запуск скрипта и тестов
Python 3.12.7 Среда скрипта и автотестов
Платформа 1С 8.3.27.2130 Версия, на которую рассчитан формат выгрузки; в автотестах не участвует
Формат исходников XML/BSL, каталог CommonModules Выгрузка модулей
Тесты unittest из стандартной библиотеки Модульные тесты и проверка автономности архива

Тестовый общий модуль РаботаСЗаказамиСервер.bsl с экспортными методами проверки, блокировки и служебными процедурами лежит в архиве, поэтому для запуска тестов платформа не нужна.

Как устроен разбор BSL

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

  • вид: Процедура или Функция;
  • директиву компиляции: &НаСервере, &НаКлиенте, &НаСервереБезКонтекста;
  • видимость: есть ли ключевое слово Экспорт.

Класс BslModuleIndex разбирает файл построчно; кодировки UTF-8, UTF-8 с BOM и Windows-1251. Заголовок метода ищет регулярное выражение:

Python UTF-8 Открыть файл
1
2
3
4
5
RE_PROC_START = re.compile(
    r"^(?P<directive>&\w+[\w\s]*\n)?\s*(?P<kind>Процедура|Функция|Procedure|Function)\s+"
    r"(?P<name>[A-Za-zА-Яа-я_0-9]+)\s*\((?P<params>[^\)]*)\)(?:\s+(?P<export>Экспорт|Export))?",
    re.IGNORECASE | re.MULTILINE,
)

Каждый найденный метод хранится как BslMethod: диапазон строк line_start и line_end, параметры и список строк тела. По этой структуре сразу видно, есть ли метод в модуле и можно ли вызвать его снаружи.

Сверка цитат

Субагент отдаёт утверждения в структурированном виде: модуль, символ, флаг экспорта, строки и дословная цитата.

JSON UTF-8 Открыть файл
1
2
3
4
5
6
7
8
9
{
  "claim_id": "CLM-BSL-001",
  "module": "РаботаСЗаказамиСервер",
  "symbol": "ПроверитьЗаполнениеЗаказа",
  "is_export": true,
  "line_start": 14,
  "line_end": 35,
  "quote": "Если Не ЗначениеЗаполнено(ЗаказКлиента.Контрагент) И Не Отказ Тогда\n\tОтказ = Истина;\nКонецЕсли;"
}

Скрипт проходит по цепочке:

  1. Есть ли файл модуля в каталоге выгрузки.
  2. Есть ли символ symbol в индексе.
  3. Совпадает ли is_export. Если метод внутренний, а субагент назвал его экспортным, статус EXPORT_FLAG_MISMATCH.
  4. Входит ли нормализованная цитата в тело метода. Пробелы и табуляции приводятся к одному виду, поэтому разные отступы проверку не ломают.

Запуск на корректном отчёте:

Powershell UTF-8 Открыть файл
1
2
3
python -X utf8 quote_fact_checker.py `
  --sources .\fixtures\sources `
  --report .\fixtures\subagent_report_valid.json
Рис. 2. Корректный отчёт: 3 утверждения из 3 подтверждены, код возврата 0
[PASS] EXACT_MATCH       CLM-BSL-001: РаботаСЗаказамиСервер.ПроверитьЗаполнениеЗаказа
  Детали: Цитата верифицирована в теле метода 'ПроверитьЗаполнениеЗаказа' (EXACT_MATCH).

[PASS] EXACT_MATCH       CLM-BSL-002: РаботаСЗаказамиСервер.РассчитатьИтогиЗаказа
  Детали: Цитата верифицирована в теле метода 'РассчитатьИтогиЗаказа' (EXACT_MATCH).

[PASS] EXACT_MATCH       CLM-BSL-003: РаботаСЗаказамиСервер.ЗаблокироватьЗаказДляОбработки
  Детали: Цитата верифицирована в теле метода 'ЗаблокироватьЗаказДляОбработки' (EXACT_MATCH).

ИТОГ: Всего утверждений: 3 | Подтверждено: 3 | Отклонено: 0
РЕШЕНИЕ ГЕЙТА ФАКТОВ: PASS (Все факты и цитаты подтверждены)

Какие галлюцинации скрипт ловит

Опаснее всего искажения, которые меняют смысл BSL, но выглядят правдоподобно. В эксперименте на тестовом модуле я собрала четыре типичных дефекта:

  • Выдуманный метод: субагент заявил экспортную процедуру ПересчитатьСкидкиВДокументе, в модуле её нет.
  • Мутация условия: в проверке Если Не ЗначениеЗаполнено(...) И Не Отказ Тогда субагент потерял И Не Отказ. Такой фрагмент, перенесённый в код, затрёт предыдущие ошибки проведения.
  • Подмена видимости: внутренняя процедура ЗаписатьЛогИзмененияСтатуса названа экспортной.
  • Дрейф строк: номера строк смещены на 134 позиции относительно файла.

Запуск на отчёте с этими дефектами:

Powershell UTF-8 Открыть файл
1
2
3
python -X utf8 quote_fact_checker.py `
  --sources .\fixtures\sources `
  --report .\fixtures\subagent_report_hallucinated.json
Рис. 3. Выдуманная процедура и unified diff искажённой цитаты
[FAIL] HALLUCINATED_SYMBOL CLM-HALLUC-001: РаботаСЗаказамиСервер.ПересчитатьСкидкиВДокументе
  Детали: Галлюцинация субагента: метод отсутствует в модуле 'РаботаСЗаказамиСервер'.

[FAIL] MUTATED_QUOTE     CLM-MUTATE-002: РаботаСЗаказамиСервер.ПроверитьЗаполнениеЗаказа
  Детали: Искажение цитаты субагентом: приведённый код не совпадает с реальным телом метода.
  Различия (unified diff):
    --- Субагент (цитата)
    +++ Исходник 1C BSL
    @@ -1,4 +1,9 @@
    -Если Не ЗначениеЗаполнено(ЗаказКлиента.Контрагент) Тогда
    -ОбщегоНазначенияКлиентСервер.СообщитьПользователю("Нет контрагента!");
    +Если Не ЗначениеЗаполнено(ЗаказКлиента.Контрагент) И Не Отказ Тогда
    +ОбщегоНазначенияКлиентСервер.СообщитьПользователю(
    +НСтр("ru = 'В заказе клиента не указан контрагент!'"),
    +ЗаказКлиента,
    +"Контрагент",
    +"Объект"
    +);
     Отказ = Истина;

[FAIL] EXPORT_FLAG_MISMATCH CLM-FLAG-003: РаботаСЗаказамиСервер.ЗаписатьЛогИзмененияСтатуса
  Детали: Искажение сигнатуры: метод заявлен как Экспорт, но объявлен как Внутренний.

[FAIL] LINE_DRIFT        CLM-DRIFT-004: РаботаСЗаказамиСервер.РассчитатьИтогиЗаказа
  Детали: Смещение строк: агент указал строки 180..195, реальный метод на 46..58 (дрейф 134 строк).

РЕШЕНИЕ ГЕЙТА ФАКТОВ: REJECT (Обнаружены галлюцинации или искажения!)

Скрипт завершается кодом 1, поэтому его можно поставить шагом в CI или в конвейер подготовки отчётов.

Автотесты

Архив должен запускаться сам: распаковать в каталог вне репозитория и выполнить стандартным unittest. Набор test_quote_checker.py состоит из семи тестов:

  • разбор конструкций BSL;
  • успешная сверка эталонного отчёта;
  • выдуманный символ;
  • diff искажённой цитаты;
  • флаг Экспорт;
  • дрейф строк;
  • создание ZIP, распаковка во временный каталог и запуск через subprocess.run.
Рис. 4. Вывод unittest: 7 тестов за 0,57 с
test_01_parse_bsl_module_symbols ... ok
test_02_valid_report_passes_gate ... ok
test_03_detect_hallucinated_symbol ... ok
test_04_detect_mutated_quote_with_diff ... ok
test_05_detect_export_flag_mismatch ... ok
test_06_detect_line_drift ... ok
test_07_unpack_archive_and_standalone_run ... ok

----------------------------------------------------------------------
Ran 7 tests in 0.570s

OK

Диагностика отказов

Если скрипт вернул REJECT на вашем отчёте, сверьтесь с таблицей. Причины в среднем столбце вероятные, их нужно проверять по конкретному отчёту.

Статус Вероятная причина Что сделать
MODULE_NOT_FOUND Субагент сократил имя общего модуля или ошибся в префиксе подсистемы Передать в промпт точный список каталогов из CommonModules
HALLUCINATED_SYMBOL Модель назвала метод по аналогии с типовой конфигурацией Потребовать цитировать только процедуры из исходника
MUTATED_QUOTE Модель перефразировала код или заменила кавычки и операторы Поставить temperature=0 и запретить форматирование цитат
LINE_DRIFT Выгрузка обновилась, либо агент читал старый файл Обновить выгрузку DumpConfigToFiles и повторить сбор
EXPORT_FLAG_MISMATCH Модель решила, что вспомогательную процедуру можно вызвать снаружи Проверить объявление; добавить Экспорт, если вызов нужен

Ограничения

  • Регулярные выражения вместо компилятора BSL. Парсер рассчитан на обычное оформление исходников: директива компиляции на отдельной строке, стандартные ключевые слова. Вложенные процедуры внутри препроцессорных блоков #Если ... #Тогда требуют предварительной нормализации.
  • Формат выгрузки. Нужна иерархия каталогов выгрузки Конфигуратора или 1C:EDT (CommonModules, DataProcessors, Documents).
  • Кодировки. Поддерживаются UTF-8, UTF-8 с BOM и Windows-1251, остальные нужно перекодировать.
  • Смысл цитаты. Скрипт проверяет, что код есть в файле. Верен ли вывод, который субагент сделал по этому коду, он не знает.
  • Не проверялось: реальная выгрузка конфигурации в сотни мегабайт, время сверки на ней, влияние на расход токенов.

Источники

  • Документация 1С:ИТС: выгрузка конфигурации в файлы и параметры командной строки Конфигуратора.
  • Синтакс-помощник платформы 1С:Предприятие 8.3: директивы компиляции и модули.
  • Модуль difflib - документация Python 3.12.
  • Предшественники на Infostart: разборы статического анализа BSL через BSL Language Server и SonarQube. Здесь решается узкая задача: сверить цитаты субагента с файлом, не разворачивая сервер анализа.

Файл к статье

В архиве subagent-quote-checker-companion.zip:

  • quote_fact_checker.py: скрипт сверки;
  • test_quote_checker.py: семь автотестов;
  • тестовый общий модуль РаботаСЗаказамиСервер.bsl;
  • примеры отчётов субагента, корректный и с дефектами (fixtures/);
  • README.md с запуском и подключением к конвейеру.

Архив лежит в блоке файлов публикации.

Итог

Дешёвые субагенты годятся для первичного разбора больших выгрузок, если их отчёты проходят машинную сверку. Скрипт отловил на тестовом модуле выдуманную процедуру, потерянное условие, неверный флаг Экспорт и дрейф строк на 134 позиции; семь автотестов прошли за 0,57 с. Скрипт проверяет цитаты и имена, а выводы по ним и экономию на токенах нужно оценивать отдельно, на вашей выгрузке.

 
Нинель Адольевна Щербакова
Нинель Адольевна Щербакова (Ninel_S)
Архитектор • SRE & DevOps инженер • HighLoad 1С
Автор 70 публикаций на Infostart. Разработчик NOPik, SRE-Suite-for-1C и мультиагентных ассистентов для экосистемы 1С:Предприятие.

Вступайте в нашу телеграмм-группу Инфостарт

1С:Предприятие ИИ-агенты Субагенты BSL Тестирование 1С Разработка 1С LLM Качество кода

См. также

Разработка Инструментарий разработчика Групповая разработка (Git, хранилище) Разработчик Платные (руб)

Практический курс по работе с AI-агентами для разработчиков 1С уровня middle и senior, а также тимлидов команд: от постановки задач и передачи контекста до создания расширений, интеграций, MCP-инструментов, тестов и проверки готового решения.

50000 руб.

10.09.2026    13211    104    0    

78

Инструментарий разработчика Чистка данных Свертка базы Инструменты администратора БД Системный администратор Разработчик Руководитель проекта 1С:Предприятие 8 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 Россия Платные (руб)

Инструмент представляет собой обработку для проведения свёртки или обрезки баз данных. Работает на ЛЮБЫХ конфигурациях (УТ, БП, ERP, УНФ, КА и т.д.). Поддерживаются серверные и файловые базы, управляемые и обычные формы, интерфейс 8.5. Может выполнять свертку одновременно в несколько потоков, а также без непосредственного участия пользователя. Решение в Реестре отечественного ПО.

24900 руб.

20.08.2024    83146    431    171    

361

Инструментарий разработчика Роли и права Запросы СКД Разработчик Руководитель проекта 1С:Предприятие 8 Платные (руб)

Инструменты для разработчиков 1С 8.3 и 8.5: Infostart Toolkit. Автоматизация и ускорение разработки на управляемых формах. Легкость работы с 1С.

16500 руб.

02.09.2020    285450    1606    423    

1219

Нейросети Системный администратор Разработчик Аналитик Бухгалтер Пользователь Руководитель проекта 1С 8.3 1С:Документооборот 1С:Бухгалтерия 3.0 1С:Зарплата и Управление Персоналом 3.x Россия Платные (руб)

Подключите ИИ к 1С и решайте рабочие задачи обычными словами. От работы с данными до доработки конфигурации через расширения, всё в привычном чате с ИИ-помощником. Теперь с поддержкой DeepSeek Harness, Kimi Code и Kimi Work, доступных в России без VPN.

15990 руб.

30.07.2026    19309    40    4    

36

Инструментарий разработчика Разработка Администрирование веб-серверов Системный администратор Разработчик Аналитик Руководитель проекта 1С 8.3 Платные (руб)

Analyzer 1C сводит выгрузку 1С — основную конфигурацию и все расширения — в единый граф знаний. Любой запрос по связям за доли секунды, с пометками «Доб.» / «Заимств.» / «Переопределено». Новое в 2.0 — обновление поставки: сравнение и объединение версий деревом «как в Конфигураторе» с выгрузкой плана решений; поиск конфликтов из-за перехватов расширений и висячих ссылок; загрузка из бинарных .cf/.cfe; циклические зависимости. Плюс анализ влияния, запросы BSL, роли и RLS, граф вызовов. Минута на развёртывание через Docker без необходимости подключения к Интернет. Любая 1С:Предприятие 8.3+.

14000 руб.

17.04.2026    16653    63    62    

73

SALE! %

Банковские операции Обмен с интернет-банком Мастера заполнения Нейросети Разработчик Бухгалтер Пользователь 1С:Предприятие 8 1C:ERP 1С:Бухгалтерия 3.0 1С:ERP Управление предприятием 2 1С:Управление холдингом 1С:ERP. Управление холдингом 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 1С:Управление торговлей 11 1С:Розница 3.0 Платные (руб)

Корректируйте банковские документы быстро и легко! Создайте правило обработки — и оно автоматически применится при загрузке выписки (отбор по любому реквизиту или регулярному выражению). Решение заполняет расшифровку платежа, комиссию эквайринга, подбирает ведомости на выплату зарплаты, помечает дубли из банка на удаление и многое другое. Доплачивать за алгоритмы не нужно — они включены в решение. Обработка работает при загрузке из файлов клиент-банка и через DirectBank. Новое — искусственный интеллект: модель приводит нестандартные назначения платежа к виду, понятному алгоритмам, а ИИ-ассистент прямо в 1С консультирует по решению и разбирает код правил и алгоритмов. Поддерживаются локальные и облачные OpenAI-совместимые модели — данные могут не покидать ваш контур.

17500 руб.

20.12.2024    21423    104    32    

90

Пакетная печать Печатные формы Инструментарий разработчика Разработчик 1С:Предприятие 8 Платные (руб)

Расширение для создания и редактирования печатных форм в системе 1С:Предприятие 8.3. Благодаря конструктору можно значительно снизить затраты времени на разработку печатных форм, повысить качество и прозрачность разработки, а также навести порядок в многообразии корпоративных печатных форм. Обновление версии от 21.04.26

22570 руб.

06.10.2023    44109    122    54    

135

Инструментарий разработчика Нейросети Платные (руб)

Первые попытки разработки на 1С с использованием больших языковых моделей (LLM) могут разочаровать. LLMки сильно галлюцинируют, потому что не знают устройства конфигураций 1С, не знают нюансов синтаксиса. Но если дать им подсказки с помощью MCP, то результат получается кардинально лучше. Далее в публикации: MCP для поиска по метаданным 1С, справке синтакс-помощника и проверки синтаксиса.

15250 руб.

25.08.2025    76694    147    41    

154
Для отправки сообщения требуется регистрация/авторизация