Введение в RAG
1. Используемые данные
1.1. Какие данные
Система использует 2 корпуса данных: рецепты и советы
- Рецепты структурированы в виде JSON-документов с названием, описанием, перечнем ингредиентов, кухонной утвари, шагов приготовления и дополнительными советами.
- Советы также будут структурированны в виде JSON-документов с данными о категории совета и содержанием.
1.2. Объем данных
Объем данных в данной системе может быть потенциально крупным, поскольку:
- Число рецептов на различных кулинарных порталах варьируется от 1 000 до 100 000 штук
1.3. Динамика изменения
Сами рецепты и советы вряд ли будут подвергаться изменению. Основные изменения будут связаны с добавлением новых и удалением старых документов. Однако и эти добавления/удаления будут происходить не очень часто.
2. Стратегия доступа к знаниям
2.1. Доступ к рецептам
Для работы с рецептами предусмотрим следующую стратегрию:
- Выберем характеристики, которые наиболее полно отражают тот или иной рецепт:
- Название
- Описание
- Ингредиенты
- Кухонная утварь
- Агрегацию этих характеристик представим в виде эмбеддинга. Шаги и советы включать в эмбеддинг не будем, поскольку они составляют основную часть описания рецепта, но при этом несут меньше полезной информации, что может создавать лишний шум и снизить качество
- Для каждого рецепта выполним такое представление и сохраним результаты в базу знаний в виде пар соответствия вектор <=> рецепт
- При поступлении запроса пользователя, создаем его векторное представление
- Осуществляем поиск наиболее схожих векторов по нашему хранилищу
- Возвращаем исходные тексты рецептов, исходя из заданных соотвествий вектор <=> рецепт
- Отдаем эти тексты дальше по цепочке
2.2. Доступ к советам
Работа с советами имеет аналогичную стуктуру:
- Представить совет с дополнительными характеристиками (например, категория) и представить вектором
- Задать соответствия вектор <=> совет
- Осуществалять сравнение вектора представления запроса пользователя и векторов из базы знаний
- Вернуть оригиналы наиболее релевантных советов через соотвествение вектор <=> совет
3. Архитектурные решения
3.1. Необходимость изменений
Элементы RAG-системы уже были предусмотрены на первом этапе построение системы, однако требуется внести уточнения связанные c названиями, а также с компонентами, взаимодейтсвующими с поисковой составляющией. Компоненты извлечения метаданных и сущностей были удалены как отдельные этапы, поскольку их функциональность может быть реализована внутри Retriever через методы улучшения поиска.
Теперь схема работы системы примет следующий вид:
3.2. Расчет эффективности RAG по сравнению с полным контекстом
- Примем размер базы рецептов за 1000. Размер одного рецепта ~ 600 токенов. В таком случае размер контекста составит 600 000 токенов, что уже не поместится в контекстное окно используемой gpt-oss-120b.
- Примем размер базы рецептоа за 200. Размер одного рецепта ~ 600 токенов. В таком случае размер контекста составит более 120 000 токенов, что еще поместится в контекстное окно. Если взять стоимость 1000 входных токенов за 0,3 руб. (по данным Yandex AI Studio), то цена только входной части запроса составит: 120 000 / 1 000 * 0,3 = 36 (руб), что достаточно дорого.
- Примем, что используется RAG, в рамках которой возвращается 5 документов. Размер одного рецепта ~ 600 токенов. Размер шаблона промпта ~ 250 токенов. В этом случае размер входного контекста: 5 * 600 + 250 = 3250. Стоимость входной части запроса: 3250 / 1000 * 0,3 = 0.975 (руб), что 37 раз выгоднее. Размер обрабатываемого контекста также меньше в 37 раз
3.3. Последствия изменений
- +Упрощение архитектуры без изменения внешнего контура системы, как следствие, меньше действий, меньше временных и ресурных затрат.
- +Меньше стоимость по сравнению с полным контектом.
- -Введение RAG ставит новые задачи по корректному ранжированию и применению техник улушения работы ретривера.
- -Качество работы ретривера имеет существенное влияние на результат работы по двум ветвям намерения (рецепты, советы).