Ну что, те кто хотел сделали каминг аут, поэтому давайте двигаться дальше.
Что такое RAG?
RAG (Retrieval Augmented Generation) – переводится букально как генерация с дополнением извлечением. Чего извлекается, дополняется и генерируется давайте раскидаем.
Самая дефолтная задача для RAG это сделать ИИ бота который например отвечает по документации вашего продукта. Базовая LLM очень хорошо умеет работать с текстом, выдавать суть генерить примеры и не огрызается. Однако есть проблема, LLM ничего не знает о нашем продукте. Есть два путя как решить эту проблему:
1. Дообучить модель
2. Взять вообще всю доку по нашему проекту и отправлять ее на каждый запрос
Как сказал бы солист группы Бредорс, шо то очень хорошо, шо это не то чтобы круто. В первом это просто прям дорого, во втором случае зависит от размеров доки, но даже если дока небольшая точность ответов скорее всего будет так себе. Поэтому на сцену выходит RAG.
Что если не отправлять нейронке не всю доку, а только релевантные страницы? И LLM будет отвечать точнее, и мы не потратим кучу токенов и деняк на дообучение. Как это сделать?
Берем нашу доку, режем на части, затем отправяем в embedder. Embedder – модель которая из текста нашей доки сделает числовые вектора, грубо говоря вектора смыслов. Далее эти вектора мы кладем в специальную векторную базу, которая умеет круто их индексировать.
Далее происходит следующее, мы получаем запрос от пользователя, преобразуем вопрос в вектора при помощи того же Embedder'а затем используя этот вектор запроса находим ближайшие вектора в нашей векторной базе. Так как речь идет именно о смысловых векторах, но вероятнее всего полученные вектора будут ближе к тому о чем спрашивает пользователь. Векторая база рядом с векторами также хранит и текст из которых этот вектор был получен, поэтому мы в итоге получаем части текста нашей доки – чанки.
Далее из текста запроса и чанков мы генерим промпт для LLM. При обновлении доки мы должны опять нарезать ее на части и отправить в Embedder, т.е проиндексировать короче. Таким образом убиваем двух зайцев и модель не нужно дообучать и токенов много не тратится.
Разумеется в теории все просто но на практике начинаются приколы: как подобрать Embedder, какую базу выбрать, какие параметры для базы подобрать, какую модель выбрать и еще куча всего. Также желательно иметь свой бенчмарк с запросами ответами чтобы от версии к версии проверять не ухудшилась ли выдача системы.
Post #585
2.09K
- 🔥 21
- ❤ 3