Данные и контекст: RAG, поиск, векторные базы и 1С-справочники
Как эта тема продолжает курс
В предыдущих статьях мы:
выбрали сценарии применения LLM в 1С и научились ставить задачи через входы/выходы, ограничения, KPI и границы ответственности
разобрали архитектуру (облако, on-prem, гибрид) и объяснили, почему почти всегда нужен LLM-шлюз
рассмотрели интеграцию 1С с LLM через HTTP, очереди, прокси и базовые ограничения (таймауты, rate limit, идемпотентность)Теперь переходим к ключевому вопросу, который чаще всего отличает демо от промышленного решения: откуда модель берет факты и как мы контролируем эти факты.
В терминах LLM это называется контекст. В корпоративной 1С-среде контекст почти всегда состоит из двух слоев:
знания и документы (регламенты, инструкции, переписка, тикеты, договоры)
структурированные данные 1С (НСИ и справочники, документы, статусы, реквизиты)Если не управлять контекстом, вы получите нестабильные ответы, галлюцинации, утечки и конфликт прав доступа. Эта статья дает практическую картину того, как строятся RAG-контуры и как “подружить” их со справочниками 1С.
!Общий процесс RAG и место 1С и шлюза
Контекст: что это и почему без него ответы “плывут”
Контекст — это данные, которые вы передаете модели вместе с запросом пользователя, чтобы модель опиралась на ваши факты, а не на “общие знания”.
В 1С контекст обычно включает:
текст вопроса пользователя
роль и подразделение (для учета прав)
фрагменты корпоративных документов (регламенты, инструкции)
факты из 1С (например, статус заказа, сумма, реквизиты контрагента)
правила и ограничения сценария (например, “отвечай только с источниками”)Проблема: модель не читает вашу базу 1С сама по себе. Если вы не подали нужные факты и не ограничили поведение, модель начнет:
уверенно “додумывать” недостающие детали
ссылаться на несуществующие документы
игнорировать внутренние правила, которые важны именно для вашей компанииОтсюда практический вывод: управление контекстом — это часть архитектуры и безопасности, а не “просто подготовка текста”.
RAG: что это такое и чем отличается от “просто спросить у модели”
RAG (Retrieval Augmented Generation) — подход “сначала найди, потом ответь”.
Схема простая:
система ищет релевантные фрагменты в вашей базе знаний
найденные фрагменты добавляются в контекст
модель формирует ответ, опираясь на эти фрагментыВ 1С RAG особенно полезен там, где требования “меняются по версии регламента” и где нужны ссылки на источники: бухгалтерия, закупки, кадровые процессы, методология, поддержка.
Отличие RAG от других подходов:
Не обучение модели: вы не дообучаете LLM на своих данных, вы подкладываете ей нужные фрагменты “на лету”.
Быстрее обновления: поменялся регламент — вы переиндексировали документ, и ответы сразу стали актуальнее.
Проще контроль: можно требовать цитаты и ссылки на источники.Базовое описание подхода можно посмотреть в руководстве по retrieval:
Руководство OpenAI по RetrievalИсточники данных в 1С-проектах: что реально идет в RAG и контекст
Документы и знания
Типовые источники для RAG:
регламенты и инструкции (Word/PDF/Wiki)
база знаний поддержки (статьи, FAQ)
переписка и комментарии по обращениям
типовые ошибки и решения (например, из ServiceDesk)Ключевое правило: RAG лучше всего работает на текстах, где есть ответы, а не на “сырой базе транзакций”.
Структурированные данные 1С
Структурированный слой обычно не “скармливают целиком” в LLM, потому что:
это дорого по объему
это риск утечки
это плохо контролируется по правамВместо этого используют два практичных механизма:
точечные факты в контекст: например, реквизиты контрагента, статус документа, суммы, даты
справочники как слой нормализации: чтобы правильно распознавать сущности (номенклатура, контрагенты) и снижать неоднозначностьПоиск в RAG: полнотекстовый, векторный и гибридный
RAG начинается с поиска. На практике почти всегда используют комбинацию.
Полнотекстовый поиск
Полнотекстовый поиск хорошо работает, когда:
в запросе есть точные термины (номер формы, код операции, название документа)
важны совпадения слов и фразПримеры технологий: Elasticsearch, PostgreSQL full-text search.
Ограничение: если пользователь формулирует вопрос “человечески” и без терминов, полнотекстовый поиск может не найти нужный фрагмент.
Векторный поиск
Векторный поиск нужен, когда вопрос задан “по смыслу”, а не совпадающими словами.
Для этого тексты превращают в эмбеддинги.
Эмбеддинг — это числовое представление текста, где тексты с похожим смыслом оказываются “близко” друг к другу. Дальше можно искать “самые близкие” фрагменты к вопросу.
Векторный поиск полезен для:
вопросов в свободной форме
синонимов и разных формулировок
поиска по длинным документам, где термины могут отличатьсяГибридный поиск
Гибридный поиск объединяет:
полнотекстовый (точность по терминам)
векторный (похожесть по смыслу)Практика для корпоративной 1С-среды: начинать сразу с гибрида, потому что пользователи в 1С часто задают вопросы одновременно и “по смыслу”, и с внутренними терминами.
Векторные базы: зачем нужны и какие варианты встречаются
Векторная база хранит:
фрагменты текста (чанки)
их эмбеддинги
метаданные (источник, версия, подразделение, права, теги)И позволяет быстро искать похожие фрагменты.
Популярные варианты в проектах:
pgvector (расширение PostgreSQL)
Qdrant
Milvus
WeaviateКак выбрать прагматично:
если у вас уже стандарт на PostgreSQL и объемы умеренные, часто начинают с PostgreSQL + pgvector
если нужен отдельный специализированный контур, масштабирование и удобные фильтры по метаданным, часто берут Qdrant/Milvus/WeaviateВажно: выбор векторной базы почти никогда не решает проблему качества сам по себе. Качество чаще ломается на подготовке данных и правильной сборке контекста.
Подготовка базы знаний: чанки, метаданные, версии
Разбиение на фрагменты (chunking)
Большие документы нельзя просто “передать целиком” модели: контекст ограничен, а еще это дорого и медленно.
Поэтому документ режут на фрагменты — чанки.
Практические рекомендации:
чанк должен быть достаточно малым, чтобы его можно было вставить в контекст вместе с другими фрагментами
чанк должен быть достаточно целостным, чтобы не терялся смысл (например, “порядок действий” лучше держать одним блоком)
полезно делать небольшое перекрытие (overlap) между чанками, чтобы не разрывать важные определенияТипичные ошибки:
резать “по 1000 символов” без учета структуры (заголовки, списки, шаги)
смешивать в одном чанке разные темыМетаданные: то, что делает RAG управляемым
Метаданные — это поля, которые хранятся рядом с каждым чанком и позволяют:
фильтровать по подразделению и типу документа
учитывать актуальность и версии
применять права доступа
объяснять пользователю “откуда взялся ответ”Минимальный набор метаданных, который окупается почти всегда:
source_id (идентификатор документа)
source_title (название)
source_type (регламент, инструкция, FAQ)
source_version или дата актуальности
department или область применения
access_level или список ролей
ссылка на оригинал (URL или путь в системе документов)Версии и актуальность
В реальной компании регламенты меняются. Если RAG не учитывает актуальность, вы получите:
правильные ответы “по прошлому году”
конфликты между разными редакциямиПрактика:
хранить версии документов как отдельные источники
в метаданных указывать период действия или дату публикации
при поиске отдавать приоритет более свежим версиямСборка контекста: как превратить найденные фрагменты в безопасный запрос к LLM
После поиска RAG-система должна собрать итоговый контекст.
Ключевые принципы:
инструкции отдельно от данных: найденные фрагменты должны быть помечены как “источники”, а не как команды
минимально необходимое: в контекст попадает только то, что нужно для ответа
обязательные цитаты: для чувствительных сценариев ответ должен содержать ссылки/цитаты
учет прав: нельзя отдавать пользователю источники, к которым у него нет доступаЭто напрямую связано с риском prompt injection: вредоносный текст может попасть в базу знаний (например, в комментарий или в документ) и попытаться “переопределить” инструкции.
Рекомендуемый ориентир по классу угроз:
OWASP Top 10 for LLM Applications!Как отделять инструкции от найденных фрагментов и требовать источники
Как связать RAG с 1С: контракты и поведение в интерфейсе
Связка обычно выглядит так:
1С отправляет в LLM-шлюз: question, user_id, roles, scenario, иногда object_ref (например, ссылка на документ)
шлюз:
- решает, нужен ли RAG
- делает поиск с учетом ролей
- собирает контекст
- вызывает модель
1С получает:
- ответ
- массив источников (название, версия, ссылка, цитата)
- предупреждения (например, “источников недостаточно”)
Важно для UX в 1С:
показывать источники рядом с ответом
давать пользователю быстрый переход к документу-источнику
явно помечать ответы “без источников” как рискованные или запрещать их для отдельных сценариев1С-справочники (НСИ) как слой “приземления” смысла
В 1С справочники — это основной механизм НСИ: контрагенты, номенклатура, договоры, склады, статьи затрат, подразделения. Для LLM-сценариев они важны не как “текст для чтения”, а как:
словарь допустимых значений
источник идентификаторов и связей
механизм устранения неоднозначностиЗачем LLM знать про справочники
Проблема, с которой сталкиваются почти все:
пользователь пишет “оформи счет на Ромашку”
в справочнике 10 “Ромашек”
модель может выбрать “красиво звучащий” вариант и ошибитьсяПоэтому правильный паттерн:
LLM не “выбирает запись справочника сама”, если цена ошибки высокая
LLM помогает сформировать критерии поиска и уточняющие вопросы
фактический подбор делается детерминированно по базе 1СПаттерн “LLM как нормализатор + 1С как источник истины”
Такой паттерн хорошо работает для извлечения реквизитов и заполнения черновиков:
LLM извлекает из письма сущности и признаки:
-
название контрагента,
ИНН,
город,
номер договора,
номенклатура,
количество
1С (или сервисный слой) делает детерминированный поиск:
- по ИНН находит контрагента
- по артикулу/штрихкоду ищет номенклатуру
Если найдено несколько вариантов, 1С возвращает список для выбора пользователемПреимущества:
меньше галлюцинаций “про справочники”
прозрачная трассировка, почему выбрали именно эту запись
проще соблюсти права: 1С сама знает, что пользователю разрешеноПрактика для номенклатуры и контрагентов
Что помогает повысить качество:
хранить и поддерживать синонимы и альтернативные наименования
нормализовать строки для поиска (регистр, кавычки, “ООО/ОБЩЕСТВО”, пробелы)
использовать “сильные ключи”, когда возможно:
- ИНН/КПП для контрагентов
- артикул/штрихкод для номенклатуры
- номер договора + контрагент для договоров
Совмещение RAG и справочников: типовые сценарии
Ассистент по регламентам с подстановкой фактов из 1С
Пример вопроса: “Как оформить возврат по ЭДО по этому заказу?”
Корректная сборка контекста:
RAG находит актуальный регламент “Возвраты по ЭДО” и вставляет нужные пункты
из 1С добавляются факты:
- организация
- тип договора
- статус отгрузки
- наличие ЭДО
Дальше модель формирует ответ, который:
ссылается на конкретные пункты регламента
учитывает факты по текущему заказу
не придумывает шаги, которых нет в источникеИзвлечение реквизитов из письма с привязкой к НСИ
Пример: письмо “выставьте счет на ООО Ромашка, договор 12/24, 50 штук товара X”.
Правильный поток:
LLM извлекает структуру (кто, что, сколько, по какому договору)
1С ищет:
- контрагента по ИНН или по набору признаков
- договор по номеру и контрагенту
- номенклатуру по артикулу/названию с подсказками
создается документ черновик, без проведенияКонтроль качества RAG в корпоративной среде
Чтобы RAG был промышленным, нужны измерения и правила:
доля ответов с источниками
доля ответов, где источники действительно релевантны (проверяется выборочной разметкой)
доля случаев “источников недостаточно” и как часто это приводит к эскалации на методолога
время поиска и сборки контекстаПрактики улучшения качества:
добавлять в метаданные “тип документа” и “область” и фильтровать ими
вводить требование: “если нет источников, скажи, что не знаешь”
использовать гибридный поиск и (при необходимости) reranking
следить за “загрязнением” базы знаний (устаревшие документы, дубли)Безопасность данных: что важно именно для RAG и справочников
Типовые риски:
утечка чувствительных данных через контекст
выдача пользователю фрагментов, к которым у него нет прав
prompt injection через документы или комментарииБазовые меры:
доступ к источникам только через контур, который знает роли и права
фильтрация источников по roles/access_level до попадания в контекст
маскирование ПДн до логирования и до передачи во внешний контур (в гибриде)
жесткое разделение “инструкция системы” и “найденные тексты”Итог
Промышленная LLM-функция в 1С почти всегда держится на двух опорах:
RAG и поиск, чтобы отвечать по корпоративным документам с источниками и контролируемой актуальностью
справочники 1С (НСИ) как слой детерминированной истины, который устраняет неоднозначность и защищает от “придуманных” сущностейЕсли в предыдущих статьях мы “соединили 1С и LLM” через шлюз, HTTP и очереди, то здесь мы сделали следующий шаг: научились проектировать контекст как управляемый продуктовый компонент.
Дальше по логике курса обычно переходят к промышленным аспектам: наблюдаемость, тестирование качества, безопасность (включая prompt injection), а также к управлению жизненным циклом базы знаний и версий промптов.