В этой статье я расскажу, что такое RAG и как сделать так, что бы нейросеть отвечала используя вашу базу знаний без дорогостоящего оборудования для обучения нейросетевой модели на основании ваших накопленных знаний.
Что такое RAG
RAG (англ. Retrieval-Augmented Generation) - это метод повышения точности и надежности генеративных моделей искусственного интеллекта с фактами, полученными из внешних источников, например из базы знаний или интернета.
Другими словами языковая модель не знает ничего о данных на которых не обучалась или которые обновились с момента ее обучения. Что бы решить эту проблему, мы можем добавить к запросу необходимые данные.
Термин был впервые введен Патриком Льюисом в рамках статьи в которой объяснен этот метод.
О RAG на понятных примерах
Играем в Манчикин по новым правилам
Предположим вышла новая версия правил для игры в настольную игру Манчкин и вы позвали друзей классно провести время. Некоторые из ваших друзей ни разу не играли в эту настолку, а другие знают только старые правила. Тем более правила Манчкин достаточно сложные для понимания, поэтому проще.
Вы решили воспользоваться силой нейросетей, что бы друзья могли задать вопрос по правилам игры нейросети и получить понятный и конкретный ответ.
С какой проблемой вы столкнетесь
Если просто спросить нейросеть какой либо вопрос по правилам Манчикин, то скорее всего, вы получите ответ, но ответ будет содержать данные на момент обучения языковой модели, при условии, что языковая модель вообще обучалась этим правилам.
Но у вас новая версия правил, о которой нейросеть пока ничего не знает.
В итоге вы получите или неактуальные, или выдуманные (галлюцинации) нейросетью данные.
Долгие и дорогие способы решить проблему
Решение проблемы состоит в том, что необходимо предоставить нейросети актуальные данные для генерации ответа. Можно обучить самому вашу нейросеть (для этого потребуются огромные вычислительные мощности) или дождаться, когда кто-то, например OpenAI, обучат нейросеть на актуальных данных. Но ни времени не мощностей у вас нет, а друзья придут уже вечером.
Как решить проблему с помощью RAG
Шаг первый. Готовим базу знаний
Правила игры могут состоять как из 10 страниц, так из 1000. Что бы получить ответ на конкретный вопрос мы не будем передавать нейросети целую инструкцию, так как количество информации на вход у нейросети ограничено.
Для оптимизации нашего запроса к нейросети необходимо взять наши правила, поделить на мелкие кусочки (chunks или чанки) и добавить в запрос только те, что соответствуют вашему вопросу.
Что бы найти самые релевантные чанки, нужно предварительно все их проанализровать с помощью языковой модели и преобразовать в векторное представление (embeddings) и положить в векторную базу данных.
Векторная база данных позволяет хранить данные в специальном формате, который легко обрабатывается компьютером, а так же позволяет выполнять контекстный поиск по ним.
Если очень грубо объяснять, то каждое слово имеет свое числовое представление в виде вектора. Расстояние между векторами у слов, зависят от того, как часто они используются в текстах рядом друг с другом.
Например, если мы будем искать в такой базе данных слова, близкие к слову "Статистика", то первыми в поисковой выдаче будут "Математика", "Анализ" и "Процент", поскольку они часто находятся рядом в тектстах. Поскольку нейросеть обучена на огромном количестве текстов, она помогает нам в этом.
Шаг второй. Формируем запрос к нейросети
Теперь, когда мы хотим получить ответ на вопрос "Что такое Бродячая тварь" мы можем с помощью векторной базы данных найти чанки, которые содержат наиболее подходящие данные и передать на вход нейросети. Наш запрос будет выглядеть следующим образом
Ответь на вопрос, базируясь только на этом контексте:
Чанк #1: печально знаменитая «Бродячая тварь») позволяют соперникам бросить против тебя в бой новых монстров. Чтобы победить в таком бою, тебе надо превзойти суммарную бое - вую силу всех врагов. Любые особые свой - ства (например, требование победить мон - стра только уровнем) распространяются на весь бой в целом. Есть карты, позволяющие прогнать одного монстра из боя и сразиться с остальными, но нельзя биться с одним и смываться от других. Даже если изба - вишься от одного врага с помощью карты либо за счёт свойства класса или расы, но потом смоешься от его выжившего напар - ника, ты не получишь
Чанк #2: Андеды В этой игре есть монстры- андеды. Любого андеда можно сыграть с руки в бой, где есть другой андед, без помощи карты «Бродячая тварь» . Если у тебя есть карта, которая делает монстра андедом, можешь сыграть её в паре с любым монстром по этому правилу. Усилители монстров Несмотря на их название, такие карты могут не только увеличить, но и уменьшить боевую силу монстра. Любой игрок может сыграть уси - литель монстра в любой бой. Усилители, сыгранные на одного мон - стра, суммируются. Если в бою участвует несколько монстров, хозяин усилителя дол - жен указать, на кого из них играет
Чанк #3 а также все сыгранные в ходе боя усилители и разовые шмотки, а потом возьми сокровища. Следи за соперниками: они могут применить карты или особые свойства, чтобы изменить итог сражения. Когда по - беждаешь монстра, дай соперникам шанс вмешаться — выжди примерно 2,6 секун - ды. Если никто не воспользовался твоей терпеливостью, теперь ты точно убиваешь монстра, переходишь на новый уровень, получаешь сокровища и наслаждаешься зу - бовным скрежетом завистников. Бой с несколькими монстрами Некоторые карты (и прежде всего печально знаменитая «Бродячая тварь») позво - ляют соперникам бросить против тебя в бой новых монстров. Чтобы победить в таком бою
Ответь на вопрос, используя только контекст: Что такое бродячая тварь?"
Таким образом нейросеть не будет пытаться придумать или использовать устаревшие данные из неактуальных правил, а ответит основываясь на актуальных данных.
После описанных выше манипуляций ответ нейросети будет следующим
"Бродячая тварь - это особенная карта в игре, которая позволяет соперникам бросить против тебя новых монстров."
Ответ, соответствующий запросу на основе данных из нашей базы знаний.
Прикладное использование RAG
Чат-бот поддержки для вашего бизнеса
Например, вы хотите создать чат-бота поддержки, который будет отвечать на основании накопленной у вас базы знаний с решенными обращениями или данными о вашем продукте.
Обучение сотрудников
Предположим, вы подключаете нового сотрудника к большому проекту в рамках которого накоплено много знаний и нужно дать возможность быстро найти необходимую информацию новичку не заставляя перечитывать его всю документацию.
О программной реализации этого метода можно почитать в моей статье
😇 Если вам интересна тема нейросетей, то подписывайтесь на мой канал telegram.