Создание продвинутых приложений с дополненной извлечением генерацией (RAG) с помощью LlamaIndex
Введение
На недавнем Unstructured Data Meetup, организованном Zilliz (Сан-Франциско), Лори Восс, вице-президент по связям с разработчиками в LlamaIndex, выступил с докладом на тему "Building Advanced RAG Apps with LlamaIndex. Он поделился своими знаниями о том, как сделать фреймворки Retrieval Augmented Generation (RAG) проще и готовыми к продакшену с помощью LlamaIndex.
Давайте углубимся в концепции RAG и посмотрим, как LlamaIndex 🦙 помогает в разработке RAG-приложений. Чтобы дать краткую справку о LlamaIndex (ранее известном как GPTIndex), значительная часть их ранних работ была выполнена с использованием надежных закрытых технологий, таких как OpenAI. Однако по мере того как модели с открытым исходным кодом начали догонять их, они стали интегрироваться с open-source альтернативами. Будь то LLM, модели эмбеддингов или технологии повторного ранжирования, теперь они охватывают ряд вариантов, позволяющих пользователю использовать свои собственные данные для создания RAG-приложения.
Что такое Retrieval Augmented Generation (RAG)?
Систематический рабочий процесс RAG
RAG — это фреймворк, предназначенный для преодоления ограничений LLM путем предоставления им возможностей извлечения. Главный недостаток LLM заключается в том, что у них ограниченные контекстные окна и они могут одновременно обрабатывать только часть данных организации (не более миллиона токенов за раз). RAG решает эту проблему, выборочно извлекая только наиболее релевантный текст/данные, чтобы предоставить максимально точные ответы.
Ключевые преимущества RAG:
Точность: когда релевантные и краткие данные извлекаются с помощью реализованных методов поиска и отправляются в LLM, это обеспечивает точные ответы.
Актуальность: некоторые могут спросить, почему компании не обучают LLM на своих данных. Проблема с дообучением заключается в том, что загрузка LLM в любую среду, особенно высококачественных моделей, уже обходится дорого. С другой стороны, Retrieval Augmented Generation (RAG) позволяет легко обновлять данные в реальном времени. Это делает RAG практичным решением для динамичных сред данных, например в крупных частных юридических фирмах или промышленных компаниях.
Происхождение: RAG может отслеживать узкоспециализированные источники информации, что крайне важно для приложений, требующих проверяемых данных.
Проще говоря, помните тесты на понимание текста, которые вы сдавали в детстве? RAG очень похож на них. Извлеченные фрагменты текста выступают в роли текста для понимания, по которому ребенок (LLM) должен отвечать на вопросы. Всё так просто ;-)
Продвинутые техники RAG
Для поиска информации широко используются две техники.
Поиск по ключевым словам: традиционные методы поиска по ключевым словам по-прежнему эффективны для извлечения данных на основе конкретных терминов.
Векторный поиск(самый мощный), также известный как поиск по векторному сходству: представьте векторный поиск как нечто, что превращает слова в числовые списки, называемые векторами. Эти векторы отражают суть значения каждого слова. Мы можем находить похожие слова, сравнивая эти векторы на основе их числовой близости (измеряемой в основном с помощью косинусного сходства или скалярного произведения). Векторный поиск помогает нам извлекать данные гораздо более эффективно и надежно. После выполнения векторного поиска LLM может получить доступ к наиболее релевантному тексту, чтобы ответить на запрос.
Поисковые системы используются в системах RAG для извлечения документов из различных источников, улучшая получение релевантной информации и повышая общую отзывчивость AI-инструментов.
Когда вы думаете о векторном поиске, представьте свой Оксфордский словарь. Однако группируйте слова по их буквенным последовательностям, а не по их значению. Модели векторных эмбеддингов делают то же самое в многомерном пространстве.
Многомерная и семантическая группировка терминов с использованием векторного поиска
Кроме того, open-source векторные базы данных, такие как Milvus, можно использовать для бесплатной настройки векторных хранилищ! Посмотрите здесь.
LlamaIndex: упрощение реализации RAG
LlamaIndex — это open-source фреймворк, который соединяет ваши данные с LLM и доступен на Python и TypeScript. Он упрощает создание RAG-приложений, позволяя разработчикам создавать функциональные RAG-системы с минимальным количеством кода. Чтобы реализовать базовую функциональность RAG, вам нужно всего пять строк кода на Python благодаря LlamaIndex.
from llama_index.core import VectorStoreIndex, SimpleDirectoryReader
documents = SimpleDirectoryReader("data").load_data()
index = VectorStoreIndex.from_documents(documents)
query_engine = index.as_query_engine()
response = query_engine.query("What did the author do growing up?")
Расширенные возможности RAG для загрузки данных и выполнения запросов с LlamaIndex
LlamaIndex также предоставляет широкий набор расширенных возможностей загрузки данных и выполнения запросов для ваших RAG-приложений.
Загрузка данных
Коннекторы данных: LlamaHub от LlamaIndex предоставляет коннекторы для различных источников данных, включая Google Drive, Notion, Slack, а также базы данных, такие как Postgres и MongoDB.
Парсинг PDF: LlamaIndex предлагает расширенные возможности парсинга PDF, преобразуя сложные PDF-файлы в Markdown для лучшего понимания LLM, поскольку LLM обучаются на большом объеме данных Markdown.
Модели эмбеддингов: LlamaIndex поддерживает различные open-source и closed-source модели эмбеддингов, позволяя настраивать их в зависимости от предметной области.
Векторные хранилища: LlamaIndex интегрируется с несколькими векторными базами данных — опять же, как open-source, так и closed-source, включая Milvus и Zilliz Cloud, для эффективного хранения и извлечения.
Выполнение запросов
- Механизм запросов с подвопросами
Для сложных вопросов, требующих нескольких простых запросов, механизм запросов с подвопросами разбивает основной запрос на более мелкие части, извлекает ответы из разных источников и объединяет их в единый ответ.
Разбиение запроса для лучшего извлечения
Разбиение запроса для лучшего извлечения
Сбор отдельных ответов
Сбор отдельных ответов
Итоговый скомпилированный ответ
Итоговый скомпилированный ответ
Смотрите код здесь.
- Извлечение от малого к большому
Эта методология включает преобразование в векторы чрезвычайно маленьких фрагментов текста (предложений, которые с высокой вероятностью релевантны пользовательскому запросу) и извлечение окна векторов вокруг этого предложения как вверх, так и вниз.
Визуализация методологии извлечения от малого к большому
Визуализация методологии извлечения от малого к большому
Реальная реализация
Реальная реализация
Смотрите код здесь.
Предварительная разметка документов метаданными (например, год, пользователь, компания, ключевые слова), как в примере ниже, позволяет выполнять более точную фильтрацию и извлечение, повышая точность ответов LLM. Эта функция может помочь с Keyword Search. Думайте о метаданных как о пользовательских свойствах для текста.
Реклама футболки
Реклама футболки
Комбинируя поиск по ключевым словам и векторный поиск, гибридный поиск выполняет запросы через указанные методы. Он объединяет результаты на основе оценок уверенности, обеспечивая извлечение наиболее релевантных данных — подробный пример с Code here.
- Agents
LlamaIndex Agents — это полуавтономные программные компоненты, которые используют различные инструменты для достижения цели. Они могут сочетать несколько стратегий извлечения и инструментов, чтобы эффективно отвечать на сложные запросы.
Подумайте об этом так: инструмент — это заранее определенная пользовательская функция, для которой пользователь может задать описание того, что она делает, а Agent — это инженер, который работает с этими инструментами. Если пользователь напрямую спросит LLM, каким будет результат умножения двух огромных чисел, она, скорее всего, даст ответ, близкий к фактическому истинному ответу, но не тот же самый. Но если мы дадим ей инструмент умножения, который она может вызывать на основе заданного описания, она будет стабильно получать правильный ответ независимо от размера чисел.
Простой агентный рабочий процесс
Простой агентный рабочий процесс
Аналогично пользователь может построить рабочий процесс Agentic RAG, предоставив LLM инструменты и их описания и позволив ей решить, какой использовать для конкретного RAG-запроса.
Краткое изложение Advanced RAG
Презентация Laurie демонстрирует базовые и продвинутые фреймворки приложений для RAG, которые мы можем создавать с минимальным количеством строк кода с помощью LlamaIndex. LlamaIndex также предоставляет нам LlamaParse, который может помочь индексировать наши данные в наши любимые векторные базы данных, такие как Milvus, локально или в облаке. В конечном счете пользователь сам выбирает, что лучше всего подходит для его сценариев использования. В этой презентации также были показаны различные стратегии RAG, которые можно выбрать для оптимизации Retrieval и Generation.
Цитаты
Liu, Jerry. “Llamahub.” Llamahub, 2023, https://cloud.llamaindex.ai/parse.
Liu, Jerry. “Starter Tutorial (OpenAI).” LlamaIndex, 2023, https://docs.llamaindex.ai/en/stable/getting_started/starter_example/.
“Llama Hub.” Llama Hub, 2023, https://llamahub.ai/.
LlamaIndex. “Hybrid Search.” LlamaIndex, 2023, https://docs.llamaindex.ai/en/stable/examples/vector_stores/MilvusHybridIndexDemo/.
LlamaIndex. “LLM based Agents.” LlamaIndex, 2023, https://docs.llamaindex.ai/en/stable/use_cases/agents/.
LlamaIndex. “Metadata Replacement + Node Sentence Window.” LlamaIndex, 2023, https://docs.llamaindex.ai/en/stable/examples/node_postprocessor/MetadataReplacementDemo/.
LlamaIndex. “Sub Question Query Engine.” LlamaIndex, 2023, https://docs.llamaindex.ai/en/stable/examples/query_engine/sub_question_query_engine/.
Milvus. “Milvus.” Milvus: Vector database, 2019, https://milvus.io/.
Milvus. “Milvus Vector Datbases.” Milvus: Vector database, 2023, https://milvus.io/.
Milvus. “Quickstart Milvus documentation.” Milvus, 5 May 2024, https://milvus.io/docs/quickstart.md.
Читать далее

Why Teams Are Migrating from Weaviate to Zilliz Cloud — and How to Do It Seamlessly
Explore how Milvus scales for large datasets and complex queries with advanced features, and discover how to migrate from Weaviate to Zilliz Cloud.

What Exactly Are AI Agents? Why OpenAI and LangChain Are Fighting Over Their Definition?
AI agents are software programs powered by AI that can perceive their environment, make decisions, and take actions to achieve a goal—often autonomously.

DeepSeek-VL2: Mixture-of-Experts Vision-Language Models for Advanced Multimodal Understanding
Explore DeepSeek-VL2, the open-source MoE vision-language model. Discover its architecture, efficient training pipeline, and top-tier performance.


