LLM и 1С: Как использовать TextToSQL и Pandas для точных запросов к большим таблицам

LLM и большие контексты: почему «Войну и мир» не всегда удобно хранить в памяти модели

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

TextToSQL как решение для 1С

В мире 1С чаще всего применяют подход TextToSQL: пользователь задаёт вопрос, LLM, зная структуру SQL‑базы, генерирует запрос, извлекает данные и возвращает ответ. Это работает отлично при небольшом количестве таблиц, но при росте объёма становится настоящей наукой.

Проблемы с языком запросов 1С

Большие LLM обычно хорошо понимают SQL, но язык запросов 1С почти не знают. В реальной практике часто встречаются отчёты, построенные на множестве вложенных запросов и временных таблицах, что усложняет задачу.

Гипотетический подход к решению задачи

Ниже описана моя гипотеза, которую стоит проверить на практике.

1. Используем типовые отчёты СКД

Инструмент СКД (Система Контроля Данных) очень мощный: в нём уже есть множество готовых отчётов, которые можно формировать программно и использовать предустановки фильтров.

2. Создаём MCP‑сервер в 1С

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

3. Подбираем подходящие инструменты перед запросом

Перед тем как LLM сформирует запрос, сначала выбираем подходящие инструменты, чтобы не запутать модель и не тратить лишние токены. Это особенно важно для современных LLM, которые легко «потерялись» в большом наборе возможных отчётов.

4. Запрашиваем фильтры у пользователя

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

5. Возвращаем данные в виде таблицы Pandas

После вызова инструмента MCP‑сервер возвращает большую таблицу с данными. Чтобы избежать галлюцинаций, преобразуем её в DataFrame Pandas (похожий на Excel, но в Python). Зная структуру таблицы и библиотеку Pandas, LLM без проблем сформирует запрос к DataFrame, получит нужные итоги и выдаст корректный ответ пользователю.

6. Обеспечиваем безопасность и эффективность

  • Кэширование повторных запросов к одних и тем же данным.
  • Песочница для обработки Pandas‑таблиц.
  • Защита от вредоносных запросов.
  • Разделение на субагентов с сложной структурой памяти и сжатием контекста, чтобы основной диалог не «переполнялся» большим объёмом данных.

Вывод

Задача интересная и перспективная. Это больше заметка для себя, чтобы позже попробовать реализовать такой подход. Если вы работаете с 1С и LLM, стоит обратить внимание на комбинацию TextToSQL, MCP‑серверов и Pandas для точных и надёжных запросов к большим таблицам.