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 для точных и надёжных запросов к большим таблицам.