В библиотеке искусственного интеллекта для 1С появилась поддержка RAG (Retrieval Augmented Generation). Что такое библиотека искусственного интеллекта для 1С, что такое RAG и как этим пользоваться совместно
Библиотека искусственного интеллекта для 1С представляет собой коллекцию методов доступа к большим языковым моделям разных провайдеров через API. Несмотря на то, что у ведущих провайдеров сейчас все плюс-минус одинаково, а иногда прямо заявляется, что будет использоваться схема API от OpenAI, есть много существенных нюансов, отличающих одного провайдера от другого. Библиотека приводит все к “общему знаменателю” и сильно упрощает жизнь разработчикам 1С. Она распространяется бесплатно и вы можете использовать ее для создания своих коммерческих продуктов. Скачать можно здесь https://infostart.ru/1c/tools/2059795/ или здесь https://t.me/braingurd
Когда клиенты заводят разговор о RAG, довольно часто приходится слышать об “обучении нейросетей”. Дескать, давайте обучим нейросеть нашими данными с помощью RAG. Строго говоря, это неправильно. Обучение нейросетей, это отдельная сложная тема, а с RAG все несколько проще.
Представим, что мы хотим давать ответы на вопросы клиентов, задействовав для этого искусственный интеллект. Мы берем большую и умную нейросеть. Ее уже обучили всему, чему надо и она может поддерживать непринужденный разговор. Но вот конкретно про нас она не знает ничего, или почти ничего. Клиент приходит с простым вопросом: какой у вас график работы? Нам нужно сделать что-то, чтобы нейросеть смогла ответить на него. Для этого ее не надо обучать. Можно поступить проще. Добавить ответ в вопрос. Это и будет тем самым augment, т.е. расширением.
Вопрос клиента:
Какой у вас график работы?
Наше расширение:
Мы работаем по будням, с 9:00 до 18:00
Что получает на вход нейросеть:
Мы работаем по будням, с 9:00 до 18:00 Какой у вас график работы?
Понятно, что получив такой вопрос, нейросеть даст на него верный ответ. Разумеется, мы не станем ограничивать себя ответом на один-единственный вопрос. В наше расширение мы загрузим вообще все, что посчитаем нужным так или иначе сообщать клиенту: перечень товаров и услуг, порядок работы, инструкции и т.д.
Здесь и проявляется сила нейросети. Она без проблем найдет в этой массе информации именно то, что нужно для ответа на конкретный вопрос. Но есть одна техническая сложность. Размер этой самой “массы” сильно ограничен.
Во-первых, есть размер контекста. У разных моделей он разный. У gpt-4o от OpenAI это 128К токенов. У Claude Sonnet 3.7 от Anthropic 200K. У Gemini 2.5 pro от Google 1 миллион токенов и обещают 2 вскорости. Миллион токенов, это достаточно много. Практически “Война и мир” (на английском языке около 700К токенов). Но существует мнение, что с увеличением контекста качество ответов падает. Так что, миллион токенов, это только в теории. На практике и 32К уже многовато. Потому еще, что во-вторых, есть плата за входящие токены. У gpt-4o сейчас 2.5$ за миллион токенов, у Sonnet 3.7 это 3$. Платить по 10 рублей за каждую реплику в диалоге с клиентом может оказаться накладным.
И вот тут возникает идея подмешивать в запрос пользователя не все-все-все, а только то, что имеет отношение к этому запросу. Как определить, что имеет отношение к запросу пользователя? И тут на помощь приходит нейросеть. Она умеет превращать текст в вектор (embedding). Вектор, это много чисел, например 512. А по сути, точка в 512-мерном пространстве. Теперь мы можем разделить наш большой текст, в котором все-все-все, на маленькие части. Для каждой части получим вектор или точку в 512-мерном пространстве. Далее, получив от пользователя запрос, мы и для него рассчитаем точку и определим к какой из ранее рассчитанных точек она ближе всего. Так мы получим ту самую часть большого текста, которую надо добавить в запрос.
Конечно, трудно себе представить 512-мерное пространство, но работает это прекрасно. А еще более прекрасно то, что в Response API от OpenAI (как и в скоропостижно устаревшем Assistant API) вся эта сложная работа с векторной базой скрыта “под капотом”. Вы создаете векторную базу одной простой командой, загружаете туда файл или файлы (это не важно, все равно все будет порезано на кусочки неким оптимальным способом). И все готово к работе. Все что нам нужно для того, чтобы заработало “подмешивание”, это указать id векторной базы в специально выделенной для этого опции.
В библиотеке искусственного интеллекта для 1С, начиная с версии 19, появились функции: СоздатьВекторнуюБазу(), ЗагрузитьФайл(), РазместитьФайл()

В результате мы получаем подготовленную векторную базу с неким id. Этот id мы передаем в опции “vector_store_id” и получаем RAG.
Вы можете самостоятельно поэкспериментировать с этим, пользуясь обработкой БИИ_Пример, которая входит в состав библиотеки.

Скрытый текст
Жили-были старик со старухой. Однажды просит старик:
— Испеки, старуха, колобок.
— Из чего испечь-то? Муки нет.
— Эх, старуха! По коробу поскреби, по сусеку помети; авось муки и наберется.
Старуха по коробу поскребла, по сусеку помела, и набралось муки две пригоршни. Замесила на сметане, пожарила в масле и положила на окошечко остудить.
Колобок полежал-полежал, да вдруг и покатился — с окна на лавку, с лавки на пол, по полу да к дверям, перепрыгнул через порог в сени, из сеней на крыльцо, с крыльца на двор, со двора за ворота, дальше и дальше.
Катится колобок по дороге, а навстречу ему заяц:
— Колобок, колобок! Я тебя съем!
— Не ешь меня, косой зайчик! Я тебе песенку спою, — сказал колобок и запел:
Я по коробу скребен,
По сусеку метен,
На сметане мешон
Да в масле пряжон,
На окошке стужон;
Я от дедушки ушел,
Я от бабушки ушел,
От тебя, зайца, не хитро уйти!
И покатился себе дальше; только заяц его и видел!..
Катится колобок, а навстречу ему волк:
— Колобок, колобок! Я тебя съем!
— Не ешь меня, серый волк! Я тебе песенку спою!
Я по коробу скребен,
По сусеку метен,
На сметане мешон
Да в масле пряжон,
На окошке стужон;
Я от дедушки ушел,
Я от бабушки ушел,
Я от зайца ушел,
От тебя, волка, не хитро уйти!
И покатился себе дальше; только волк его и видел!..
Катится колобок, а навстречу ему динозавр:
— Колобок, колобок! Я тебя съем.
— Где тебе, хвостатому, съесть меня!
Я по коробу скребен,
По сусеку метен,
На сметане мешон
Да в масле пряжон,
На окошке стужон;
Я от дедушки ушел,
Я от бабушки ушел,
Я от зайца ушел,
Я от волка ушел,
От тебя, динозавр, не хитро уйти!
И опять укатился; только динозавр его и видел!..
Катится, катится колобок, а навстречу ему лиса:
— Здравствуй, колобок! Какой ты хорошенький!
А колобок запел:
Я по коробу скребен,
По сусеку метен,
На сметане мешон
Да в масле пряжон,
На окошке стужон;
Я от дедушки ушел,
Я от бабушки ушел,
Я от зайца ушел,
Я от волка ушел,
От динозавра ушел,
От тебя, лиса, и подавно уйду!
— Какая славная песенка! — сказала лиса. — Но ведь я, колобок, стара стала, плохо слышу; сядь-ка на мою мордочку да пропой еще разок погромче.
Колобок вскочил лисе на мордочку и запел ту же песню.
— Спасибо, колобок! Славная песенка, еще бы послушала! Сядь-ка на мой язычок да пропой в последний разок, — сказала лиса и высунула свой язык.
Колобок прыг ей на язык, а лиса — ам его! — и скушала.
Как видите, RAG относительно простая вещь. А с библиотекой искусственного интеллекта для 1С это становится просто, как раз-два-три.
Автор: exwill