📱

Get Our Mobile App

Take your business learning on the go!

Download on the App StoreGet it on Google Play

Local Agentic RAG without API - Langchain and Agno

AI With Tarun10:47

Transcription

Хотите запустить локальное приложение RAG без использования API-ключей? Тогда этот видеоролик для вас! В прошлых видео я рассказывал о многомодальных агентах и RAG, но использовал Gemini LLM. Многие из вас хотели запустить весь пайплайн локально, и второе требование — видео о LangChain. Я вас услышал! В этом видео мы создадим приложение RAG, используя LangChain и компонент Agentic с Agno. Для локальной работы будем использовать модели больших языков с открытым исходным кодом, модель для эмбеддингов и векторную базу данных. Начнём!

Первый шаг — разберём архитектурную диаграмму. Как я упоминал, приложение RAG будет зависеть от LangChain. У меня уже есть 10 видео о создании RAG-пайплайна с помощью LangChain. Можете посмотреть их. Первое требование — собственные данные. Это могут быть PDF, Excel, CSV, видео YouTube — что угодно. Подготовив данные, нужно использовать соответствующий загрузчик. В нашем случае — веб-страница, значит, загрузчик веб-базированный. После получения необработанных документов, следующий шаг — разбить их на чанки. Для этого используем `recursive character text splitter`, чтобы данные подходили под контекстное окно модели.

Разбив документ на чанки, нужно преобразовать их в эмбеддинги. Здесь используем Fast Embed от Quadrant. Почему Fast Embed, а не Hugging Face? Потому что он преобразует веса модели в ONNX Runtime, что делает его быстрым и лёгким. Вторая причина — поддержка Data Parallelism, дополнительная функциональность от команды Quadrant. Не забудьте поддержать репозиторий, чтобы помочь команде в разработке новых функций.

Преобразовав данные в эмбеддинги, нужно сохранить их в векторной базе данных. Мы используем Quadrant Vector Store — он тоже с открытым исходным кодом. Есть три способа сохранения данных: в памяти, локальный хост (с клиентом Quadrant в Docker) и облачные сервисы Quadrant. Мы воспользуемся вариантом «в памяти», сохраняя векторы в указанной директории.

Теперь, когда база знаний (LangChain) готова, нужно подключить её к Agentic workflow. Для этого используем Agno Agent (ранее FData; предыдущие видео о многомодальных агентах тоже были с FData). Для создания пайплайна сначала нужна база знаний для взаимодействия с запросами пользователя. База знаний готова, теперь нужна модель LLM. Мы используем открытую модель LLM от Ollama.

После подготовки LLM и базы знаний, нужно интегрировать агента: передаём ему запрос пользователя и получаем ответ. Вот весь пайплайн создания Agentic RAG с LangChain и Agno. Перейдём к реализации кода.

Если вы новичок в LangChain, не волнуйтесь! У меня есть целый плейлист — от основ до продвинутого уровня. Ссылка в описании. Пора писать код! Сначала установим библиотеки. Для Agentic pipeline — Agno. Для открытых LLM и эмбеддингов — Ollama и Fast Embed от Quadrant. Для базы знаний — компоненты LangChain (LangChain Community и LangChain). Для векторного хранилища — Quadrant. Библиотеки установлены, перейдём к импорту.

Импортируем загрузчики документов (веб-загрузчик), функции для чанкинга, модель для эмбеддингов и векторное хранилище. Так как данные будем читать из памяти Quadrant, несколько импортных строк из клиента Quadrant. Пайплайн извлечения (база знаний LangChain) готов, нужен Agentic workflow. Используем Agno: `from ago.agent import agent`. Для базы знаний LangChain — `from ago.knowledge.langchain import LangchainKnowledgeBase`. И LLM — Ollama. Для Ollama нужно локальная установка (инструкции в документации Ollama). Поддерживаемые модели Ollama указаны там же. Мы используем Llama 3.1. Для запуска: `ollama run llama-3.1`. У меня уже установлено (покажу в терминале). Если запустить `ollama ls`, увидите установленные модели (Llama 3.1 и т.д.).

Установка завершена, создадим пайплайн извлечения. Возьмём URL из документации Quadrant. Передадим его веб-загрузчику, он вернёт необработанные документы. Разделим их на чанки, указав размер чанка и перекрытие (1024 и 50). Далее — модель эмбеддингов из Fast Embed (я всегда её использую, она отлично подходит для RAG). Настроим базу данных Quadrant. Для Quadrant in-memory нужно указать путь для сохранения эмбеддингов и имя коллекции. Имя должно быть уникальным для каждого набора данных. Если данные меняются, нужно новое имя коллекции. Это важно, чтобы избежать повторной индексации. Если имя уже есть, возникнет исключение, и будет создана новая коллекция. Это нужно сделать только один раз. Определим `QuadrantVectorStore` из LangChain: укажем клиента, уникальное имя коллекции и модель эмбеддингов (Fast Embed). Добавим все чанки в векторное хранилище (`vector_store.add_documents`).

Теперь определим извлекатель — нашу базу знаний. При пользовательском запросе нужно получать релевантные документы. Определим базу знаний из LangChain и подключим её к Agno. `retriever = vector_store.as_retriever`. Это синтаксис LangChain. Теперь база знаний из Agno: `from ago.knowledge.langchain import LangchainKnowledgeBase`. Передадим туда извлекатель. Пайплайн извлечения готов, создадим Agentic workflow (три строки кода): указываем модель (Ollama, локальная), базу знаний (LangChain RAG), описание (ответ на вопрос пользователя из базы знаний) и параметр `search_knowledge=True`.

Теперь запустим Agentic RAG, передав пользовательский запрос. Например: «Какие метрики расстояния чаще всего используются, согласно документу?». Запустим агента: `agent.print_response(user_query, stream=True)` (первый способ) или `response = agent.run(user_query); print(response)` (второй способ). Проверим результат. В документации указаны три метрики: косинусное сходство, скалярное произведение и расстояние Юкава. Запустим приложение. Результат: скалярное произведение, косинусное сходство и расстояние Юкава. Всё как в базе знаний.

В этом видео мы создали Agentic RAG без API-ключей, используя открытые модели эмбеддингов, LLM и векторную базу данных. Это было для сообщества, которое этого просило. Не забудьте подписаться!