Запустите локальную настройку RAG: Руководство для начинающих по использованию Llama 3 LangChain с Ollama и Milvus
С появлением таких 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 является индексирование данных.
- Начните с получения данных из вашего 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()
- Разделение данных
Разбейте загруженные данные на управляемые фрагменты с помощью RecursiveCharacterTextSplitter.
from langchain.text_splitter import RecursiveCharacterTextSplitter
text_splitter = RecursiveCharacterTextSplitter(chunk_size=500, chunk_overlap=0)
all_splits = text_splitter.split_documents(data)
- Получение вкраплений и хранение данных в 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)
- Загрузите ваш 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|>"],
)
- Постройте цепочку 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, поддерживает расширенную функциональность с такими возможностями, как многоролевое взаимодействие и настраиваемые системные подсказки.
Процесс настройки включает в себя основные этапы:
Пререквизиты: Установка Docker, Milvus Standalone, Ollama и необходимых библиотек Python.
Индексирование данных: Использование таких инструментов, как PyPDFLoader и RecursiveCharacterTextSplitter, для загрузки, разбиения и векторизации данных.
Хранение вкраплений: Преобразование текста в эмбеддинги с помощью модели Jina AI и хранение их в векторном хранилище Milvus.
Построение цепочки контроля качества: Интеграция векторного хранилища с Llama 3 через LangChain, настройка специализированных системных подсказок для обработки и ответа на запросы пользователей.
Запустив приложение, пользователи могут взаимодействовать с локальным чатботом для получения точных, контекстуально релевантных ответов из определенных наборов данных. После получения релевантных документов они передаются в LLM для генерации ответов - проверенный эффективный метод. В руководстве сделан акцент на практичности, обеспечивающей доступность как для новичков, так и для экспертов. Помните, что для оптимального поиска может потребоваться тонкая настройка параметров в зависимости от специфики приложения.
Учитывая растущую популярность LLM с открытым исходным кодом, эта установка подчеркивает, как локализованные реализации снижают затраты, повышают безопасность и предлагают масштабируемые решения для информационного поиска и генерации. Изучите репозиторий GitHub и присоединяйтесь к нашему сообществу Discord, чтобы поделиться своим опытом и идеями!
Читать далее

Vector Databases vs. Document Databases
Use a vector database for similarity search and AI-powered applications; use a document database for flexible schema and JSON-like data storage.

Milvus WebUI: A Visual Management Tool for Your Vector Database
Milvus WebUI is a built-in GUI introduced in Milvus v2.5 for system observability. WebUI comes pre-installed with your Milvus instance and offers immediate access to critical system metrics and management features.

Proactive Monitoring for Vector Database: Zilliz Cloud Integrates with Datadog
we're excited to announce Zilliz Cloud's integration with Datadog, enabling comprehensive monitoring and observability for your vector database deployments with your favorite monitoring tool.
