46.6kЗаказать демоВойтиНачать бесплатно

Запустите локальную настройку RAG: Руководство для начинающих по использованию Llama 3 LangChain с Ollama и Milvus

Apr 20, 20246 min read

С появлением таких Open-Source LLM, как Llama 3, Mistral, Gemma и других, стало очевидно, что большие языковые модели (LLM) могут быть полезны даже при локальном запуске. Такой подход не только практичен, но и необходим, поскольку при масштабировании коммерческих LLM, таких как GPT-3 или GPT-4, затраты могут резко возрасти.

В этом практическом руководстве мы рассмотрим, как развернуть Retrieval Augmented Generation (RAG) для создания чатбота, отвечающего на вопросы (Q&A), который может отвечать на вопросы о конкретной информации. В качестве хранилища векторов будут использоваться Ollama и Llama 3, работающие на базе Milvus. Типичная реализация включает в себя настройку конвейера генерации текста для Llama 3.

Различные инструменты для создания этой системы генерации с расширенным поиском (rag) включают в себя:

  • Ollama: Ollama - это инструмент с открытым исходным кодом, который позволяет управлять Llama 3 на локальных машинах. Он переносит мощь LLM на ваш ноутбук, упрощая локальную работу.

  • LangChain LangChain - это фреймворк, который упрощает разработку приложений на базе LLM. С его помощью мы создаем агента и взаимодействуем с нашими данными.

    • это векторная база данных, которую мы используем для эффективного хранения и извлечения нужных данных.
  • Llama 3 - это большая языковая модель с открытым исходным кодом, разработанная компанией Meta и являющаяся последней итерацией линейки LLM. Она предоставляет сложный формат подсказок для взаимодействия с пользователем и поддерживает несколько ролей пользователей, включая "систему", "пользователя" и "помощника".

Вопросы и ответы с RAG

Мы создадим сложный чатбот, отвечающий на вопросы (Q&A), используя RAG (Retrieval Augmented Generation). Это позволит нам отвечать на вопросы о конкретной информации.

Что такое расширенный поиск?

RAG, или Retrieval Augmented Generation, - это техника, которая улучшает LLM за счет интеграции дополнительных источников данных. Типичное применение RAG включает в себя:

  • Индексирование - конвейер для получения данных из источника и их индексирования, который обычно состоит из загрузки, разделения и хранения данных в Milvus. Данные, хранящиеся в Milvus, представляют собой представление данных в виде векторных вкраплений. Эмбендинги отражают суть контента, что позволяет получить более релевантные результаты поиска по сравнению с поиском по ключевым словам.

  • Поиск и генерация - Системы дополненного поиска улучшают качество ответов, извлекая релевантный контекст из векторной базы данных и передавая его LLM перед генерацией ответов. При получении контекста LLM будет избегать генерации галлюцинаций. Более конкретно, во время выполнения RAG обрабатывает запрос пользователя, извлекает релевантные данные из индекса, хранящегося в Milvus, и LLM генерирует ответ на основе этого обогащенного контекста.

Это руководство разработано для практического применения и показывает, как можно использовать локальные LLM для создания приложения RAG. Это руководство предназначено не только для экспертов - даже новички могут погрузиться в него и начать создавать свой собственный чатбот для вопросов и ответов. Давайте начнем!

Предварительные условия

Прежде чем приступить к настройке различных компонентов нашего учебника, убедитесь, что в вашей системе есть все необходимое:

  • Docker & Docker-Compose - Убедитесь, что Docker и Docker-Compose установлены в вашей системе.
  • Milvus Standalone - Для наших целей мы будем использовать Milvus Standalone, которым легко управлять через Docker Compose; как его установить, смотрите в нашей документации
  • Ollama - Установите Ollama на свою систему; посетите их веб-сайт для получения последнего руководства по установке.

##Установка лангчейна

После установки всех необходимых условий вы можете приступать к настройке приложения RAG:

  • Запустите экземпляр Milvus Standalone с помощью: docker-compose up -d.
  • Эта команда запускает ваш экземпляр Milvus в автономном режиме, тихо работая в фоновом режиме.
  • Получение LLM-модели с помощью: ollama pull <имя_модели>.
    • Просмотр списка доступных моделей через их библиотеку
    • Например, ollama pull llama3.
  • Эта команда загружает версию модели по умолчанию (обычно самую последнюю и самую маленькую).
  • Чтобы напрямую пообщаться с моделью из командной строки, используйте ollama run <имя модели>.

Установка зависимостей для векторного хранилища

Чтобы запустить это приложение, вам нужно установить библиотеки Python. Вы можете использовать Poetry, если используете код на Github напрямую, или установить их с помощью pip, если вы предпочитаете.

pip install langchain pymilvus ollama pypdf langchainhub langchain-community langchain-experimental

Приложение RAG для приложений на базе llm

Как уже говорилось, одним из основных компонентов RAG является индексирование данных.

  1. Начните с получения данных из вашего PDF с помощью PyPDFLoader.
from langchain_community.document_loaders import PyPDFLoader
loader = PyPDFLoader(
"https://d18rn0p25nwr6d.cloudfront.net/CIK-0001813756/975b3e9b-268e-4798-a9e4-2a9a7c92dc10.pdf"
)
data = loader.load()

  1. Разделение данных

Разбейте загруженные данные на управляемые фрагменты с помощью RecursiveCharacterTextSplitter.

from langchain.text_splitter import RecursiveCharacterTextSplitter

text_splitter = RecursiveCharacterTextSplitter(chunk_size=500, chunk_overlap=0)
all_splits = text_splitter.split_documents(data)
  1. Получение вкраплений и хранение данных в Milvus

Далее преобразуем текстовые данные в векторные вкрапления, используя Jina AI's Small English embeddings, и сохраняем их в Milvus.

from langchain_community.embeddings.jina import JinaEmbeddings
from langchain.vectorstores.milvus import Milvus

embeddings = JinaEmbeddings(
   jina_api_key=JINA_AI_API_KEY, model_name="jina-embeddings-v2-small-en"
)
vector_store = Milvus.from_documents(documents=all_splits, embedding=embeddings)
  1. Загрузите ваш LLM

Ollama позволяет легко загрузить и использовать LLM локально. В нашем примере мы будем использовать Llama 3 by Meta, вот как ее загрузить:

from langchain_community.llms import Ollama
from langchain.callbacks.manager import CallbackManager
from langchain.callbacks.streaming_stdout import StreamingStdOutCallbackHandler

llm = Ollama(
model="llama3",
callback_manager=CallbackManager(
            [StreamingStdOutCallbackHandler()]
),
stop=["<|eot_id|>"],
)
  1. Постройте цепочку QA с помощью Langchain

Наконец, постройте цепочку QA для обработки и ответа на запросы пользователей:

from langchain import hub
from langchain.chains import RetrievalQA

query = input("\nQuery: ")
prompt = hub.pull("rlm/rag-prompt")
    
qa_chain = RetrievalQA.from_chain_type(
    llm, retriever=vectorstore.as_retriever(), chain_type_kwargs={"prompt": prompt}
)

result = qa_chain({"query": query})
print(result)

Запустите ваше приложение

Выполните ваше приложение RAG по последней ячейке с переменной result.

Выполните приложение RAG, запустив: python rag_ollama.py.

Пример взаимодействия с QA:

Запрос: О чем этот документ?

Этот документ, по-видимому, представляет собой интерактивный файл данных 104 Cover Page для заявки в Комиссию по ценным бумагам и биржам США. Он содержит информацию о финансовых отчетах и сертификатах компании.{'query':'What is this document about?','result': "Документ, по-видимому, является интерактивным файлом данных 104 Cover Page для подачи заявки в Комиссию по ценным бумагам и биржам. Он содержит информацию о финансовой отчетности и сертификации компании."}

Вот и все! Вы только что создали сложный локальный LLM, используя Ollama с Llama 3, Langchain и Milvus. Такая настройка не только позволяет эффективно обрабатывать большие массивы данных, но и обеспечивает высокую скорость реакции локальной системы ответов на вопросы.

Не стесняйтесь знакомиться с Milvus, кодом на Github и делиться своим опытом с сообществом, присоединившись к нашему Discord.

Обзор извлеченного контекста

В этом руководстве мы рассмотрели процесс создания приложения Retrieval Augmented Generation (RAG) с использованием локальных больших языковых моделей (LLM). Используя такие инструменты, как Ollama, Llama 3, LangChain и Milvus, мы показали, как создать мощный чат-бот, способный обрабатывать конкретные информационные запросы с помощью контекста, извлеченного из векторного хранилища.

Основные выводы:

  • ** Обзор RAG**: RAG расширяет возможности LLM за счет интеграции внешних источников данных. Он включает индексацию данных в векторные вкрапления с помощью Milvus и извлечение соответствующего контекста при обработке запросов для создания точных и обоснованных ответов.

  • Основные инструменты:

    • Ollama упрощает управление и запуск моделей Llama 3 локально.

    • LangChain предоставляет интуитивно понятный фреймворк для разработки приложений на основе LLM.

    Milvus, как векторное хранилище, эффективно хранит и извлекает векторизованные данные, обеспечивая точную обработку запросов.

    Llama 3, разработанная компанией Meta, поддерживает расширенную функциональность с такими возможностями, как многоролевое взаимодействие и настраиваемые системные подсказки.

Процесс настройки включает в себя основные этапы:

  1. Пререквизиты: Установка Docker, Milvus Standalone, Ollama и необходимых библиотек Python.

  2. Индексирование данных: Использование таких инструментов, как PyPDFLoader и RecursiveCharacterTextSplitter, для загрузки, разбиения и векторизации данных.

  3. Хранение вкраплений: Преобразование текста в эмбеддинги с помощью модели Jina AI и хранение их в векторном хранилище Milvus.

  4. Построение цепочки контроля качества: Интеграция векторного хранилища с Llama 3 через LangChain, настройка специализированных системных подсказок для обработки и ответа на запросы пользователей.

Запустив приложение, пользователи могут взаимодействовать с локальным чатботом для получения точных, контекстуально релевантных ответов из определенных наборов данных. После получения релевантных документов они передаются в LLM для генерации ответов - проверенный эффективный метод. В руководстве сделан акцент на практичности, обеспечивающей доступность как для новичков, так и для экспертов. Помните, что для оптимального поиска может потребоваться тонкая настройка параметров в зависимости от специфики приложения.

Учитывая растущую популярность LLM с открытым исходным кодом, эта установка подчеркивает, как локализованные реализации снижают затраты, повышают безопасность и предлагают масштабируемые решения для информационного поиска и генерации. Изучите репозиторий GitHub и присоединяйтесь к нашему сообществу Discord, чтобы поделиться своим опытом и идеями!

Обновлено Apr 24, 2026