Как сделать вашего нейро-сотрудника адаптивным к вашим бизнес-данным.

Большие языковые модели, такие как chatGPT, уже успели произвести революцию в нашем восприятии информации, поразив своими возможностями многих. Однако, несмотря на их впечатляющий потенциал, у них есть определенные ограничения. Возникает вопрос: как интегрировать такие модели в существующие бизнес-процессы? Основной проблемой является то, что, хотя LLM обладают знаниями об огромном количестве информации, на которой они были обучены, они не осведомлены о конкретике вашего бизнеса и данных.

Именно для решения этой проблемы были разработаны приложения LLM на основе расширенного поиска (RAG). Они значительно улучшают адаптивность моделей, позволяя им работать с нашими уникальными источниками данных.

Что такое Retrieval Augmented Generation?

Retrieval Augmented Generation (Генерация с расширенным поиском) – это процесс дополнения ввода пользователя в большую языковую модель дополнительной информацией, которая извлекается из другого источника. Эта дополнительная информация затем используется для улучшения сгенерированного ответа.

Как это работает на практике?

1. Пользователь задаёт вопрос: Например, “Как мне сделать <что-то>?”
2. Шаг извлечения: Этот процесс берет вопрос пользователя и ищет наиболее релевантное содержимое из базы знаний, которое может на него ответить. Этот шаг является, пожалуй, самой важной и сложной частью RAG. Если говорить упрощенно, представьте себе “черный ящик”, который умеет извлекать наиболее релевантные блоки информации, относящиеся к запросу пользователя.
3. Шаг генерации: После того как мы извлекли релевантную информацию из нашей базы знаний, мы отправляем ее, вместе с вопросом пользователя, в большую языковую модель. LLM, чаще всего это ChatGPT, затем “читает” предоставленную информацию и отвечает на вопрос.

Возможный вопрос: Почему бы просто не отправить всю базу знаний LLM?
– Ограничения модели: Модели имеют встроенные ограничения на объем текста, который они могут обработать за раз.
– Стоимость: Отправка больших объемов текста может быть дорогостоящей.
– Качество ответов: Есть свидетельства того, что отправка небольших объемов релевантной информации приводит к более качественным ответам.

RAG делает LLM гораздо более полезными, предоставляя им фактический контекст, который можно использовать при ответах на запросы. Этот процесс можно назвать дообучением.

Как эффективно использовать LLM (Large Language Models) для получения контекстно-специфических ответов

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

1. Системный промт: основа вашего задания

Первым шагом является формулировка системного промта. Этот промт дает модели общие указания. Например, для ChatGPT системный запрос может выглядеть так: “Вы – полезный ассистент”.

Если вы хотите дать модели более конкретные указания, это также возможно. Пример короткого системного запроса:

“_Вы – Бот-Знаток. Вы получите выдержки из базы знаний (помеченные как DOCUMENT) и вопрос. Ответь на вопрос, используя информацию из базы знаний._”

2. Предоставление источников информации

После того как вы определились с системным запросом, следующим шагом является предоставление источников информации. Пример формата представления документов для LLM:

– ———– DOCUMENT 1 ———–

– Этот документ описывает такое-то содержание…

– ———– DOCUMENT 2 ———–

– Этот документ – другой пример использования x, y и z…

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

3. Формулировка Вопроса и получение ответа

После того как у вас есть системный промт и предоставленные документы, вы просто отправляете свой вопрос LLM. Таким образом, с помощью пользовательских системных инструкций и двух сообщений вы получаете ответы, специфические для вашего контекста!

Это был лишь один из способов использования LLM для получения точных ответов на ваши вопросы. Вы также можете инструктировать LLM, что делать, если ответ в источниках не найден, или использовать другие тактики для улучшения работы вашего нейро-сотрудника.

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

Иногда наша цель – не просто найти ответ на вопрос, но правильно интерпретировать и использовать данные, которые у нас уже есть. Как мы можем достать нужные нам фрагменты знаний из базы данных на основе вопроса пользователя? Давайте погрузимся в этот процесс.

Что такое извлечение?

Извлечение, в своей сути, является операцией поиска. Наша цель – найти наиболее релевантную информацию на основе ввода пользователя. И, как и в любом поиске, здесь два основных элемента:

1. Индексирование
Этот этап сводится к преобразованию вашей базы знаний в нечто, что можно было бы искать или запрашивать.

2. Запрос
На этом этапе происходит извлечение наиболее релевантных частей знаний из поискового запроса.

Стоит отметить, что для извлечения можно использовать любой поисковый процесс. Любой метод, который принимает ввод пользователя и возвращает некоторые результаты, подойдет. Например, вы можете просто попытаться найти текст, который соответствует вопросу пользователя, и отправить его LLM или вы можете задать вопрос в Google и отправить верхние результаты. К слову, примерно так работает чат-бот Bing.

Однако большинство систем RAG сегодня опираются на семантический поиск, который использует еще один основной элемент технологии ИИ: векторные представления или “embeddings“.

Векторные Представления (Embeddings) и их роль в извлечении знаний

Когда речь заходит о том, как модели языка понимают язык, вопросы становятся сложными. Но посреди этой сложности выделяется одно ключевое понятие: векторные представления, или “embeddings”.

Что такое Векторные Представления (Embeddings)?

Для большинства из нас понимание языка — это естественный и интуитивный процесс. Мы просто “знаем”, что слова “ребенок” и “малыш” обозначают одно и то же, а “красный” и “зеленый” — это цвета. Но как же это работает?

В то время как у людей есть сложные мозговые структуры для понимания языка, у языковых моделей есть численные представления. В мире языковых моделей любой фрагмент человеческого языка может быть представлен в виде вектора чисел. Этот вектор чисел и есть “embedding” или векторное представление.

Машина Представлений: Переводчик между людьми и ИИ

В основе технологии языковых моделей лежит “машина представлений”, которую можно представить как API. Человеческий язык вводится в эту машину, и на выходе мы получаем числовое представление. Но что означают эти числа? Для человека они могут не иметь смысла, но для ИИ они жизненно важны. Они играют роль “языка” для модели, позволяя ей “читать” и “говорить”.

Понимание Embeddings на практике

Представьте, что у нас есть график, на котором разные фразы представлены точками. Фразы, близкие по смыслу, будут расположены ближе друг к другу. Например, “Привет, как дела?” и “Эй, как ты?” будут очень близко друг к другу, в то время как “Доброе утро” будет немного дальше, но все равно рядом, а “Мне нравятся пирожные” вообще в другом месте.

Тем не менее, стоит помнить, что наш график — это лишь упрощенное представление. На практике векторные представления имеют гораздо больше координат. Например, модель OpenAI использует 1 536 координат для своих представлений.

Ключ к семантическому поиску

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

Подпишитесь на нашу рассылку.

Для получения уведомлений о появлении новых статей

Поиск лучших фрагментов знаний с использованием векторных представлений

Как работает поиск с использованием векторных представлений? Прежде всего, давайте создадим общую картину того, как происходит этап извлечения информации.

Индексирование

На этапе индексирования мы начинаем с разделения нашей базы знаний на фрагменты текста. Этот процесс сам по себе представляет собой задачу оптимизации. Мы обсудим его позднее, но пока предположим, что мы уже знаем, как это делать.

Разделение знаний

После того как мы разделили нашу базу на фрагменты, каждый фрагмент пропускается через машину для создания векторных представлений (например, через API OpenAI) и мы получаем векторное представление этого текста. Затем мы сохраняем этот фрагмент, вместе с его векторным представлением, в векторной базе данных. Эта база данных оптимизирована для работы с векторами чисел.

Векторизация фрагментов знаний

Теперь у нас есть база данных с векторными представлениями всего нашего контента. Концептуально вы можете представить её как график нашей базы знаний на графе “языка”.

Запросы

Теперь, когда у нас есть график нашей базы знаний, мы можем обработать запросы. Сначала мы получаем векторное представление ввода пользователя. Затем мы отображаем его в том же векторном пространстве и находим ближайшие к нему фрагменты.

Магия векторных представлений

Эти ближайшие фрагменты, по мнению нашей машины, являются наиболее релевантными ответами на заданный вопрос. Именно их мы выбираем для отправки пользователю!

На практике вопрос “какие точки ближе всего?” решается с помощью запроса к нашей векторной базе данных. Для этого часто используется математический метод под названием косинусное расстояние, хотя существуют и другие способы его вычисления.

Индексация Вашей базы знаний: Путь к Эффективному Чат-боту

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

Основные Этапы Индексации

Индексация базы знаний включает в себя два основных этапа:

1. Загрузка: Извлечение содержимого вашей базы знаний из места ее хранения.

2. Разделение (splitting): Разбиение знаний на фрагменты (чанки), которые хорошо подходят для поиска с использованием вложений.

После получения коллекции документов, каждый документ разбивается на меньшие фрагменты. Этот процесс, известный как “разделение” (splitting), позволяет создавать фрагменты, которые лучше подходят для поиска с использованием вложений. Большие документы могут охватывать много тем, что делает их вложения “неспецифичными”, маленькие будут слишком узкими -это будет затруднять поиск. Помимо разделения, необходимо удалять избыточное содержимое, переводить текст и добавлять метаданные. Существует множество способов разделения документов: определение оптимального размера фрагментов, методы разделения (например, по заголовкам) и так далее.

Индексация базы знаний – ключевой этап в создании мощной системы поиска. Это сложный процесс, который включает в себя извлечение и разделение документов, чтобы создать эффективные и поисковые фрагменты. индексация – это ключевой этап в создании мощной системы поиска.

Детализация всего процесса RAG

Наконец, мы можем полностью детализировать наш конвейер RAG:

Шаг 1: Индексация базы знаний

1. Загрузка данных: Сначала мы индексируем нашу базу знаний. Это может быть огромный объем информации, который мы преобразуем в индивидуальные документы с помощью загрузчика.
2. Разделение на фрагменты: Затем используем делитель, чтобы преобразовать эту информацию в маленькие, удобоваримые фрагменты (чанки).
3. Преобразование в векторы: Эти чанки передаются нашей машине для встраивания, которая превращает их в векторы. Эти векторы позволяют проводить семантический поиск.
4. Сохранение в базе данных: После этого мы сохраняем эти векторные представления вместе с их текстовыми сниппетами в нашей векторной базе данных.

Шаг 2: Извлечение данных

1. Формулировка вопроса: Все начинается с вопроса, который затем проходит через ту же машину для встраивания.
2. Поиск соответствий: Этот вопрос передается в нашу векторную базу данных для определения наиболее подходящих сниппетов, которые будут использованы для ответа на вопрос.

Шаг 3: Генерация ответа

1. Форматирование: Мы берем чанки/фрагменты знаний, форматируем их вместе с нашим пользовательским запросом и вопросом.
2. Получение ответа: И, наконец, получаем наш ответ, который соответствует контексту вопроса.

Теперь у вас есть базовое понимание того, как работает генерация с предварительным извлечением данных. Данный процесс лежит в основе многих из наших нейро-сотрудников. Если вы хотите попробовать его на своей базе знаний, то обращайтесь к нам!

Подпишитесь на нашу рассылку.

Для получения уведомлений о появлении новых статей