Запустите локальную настройку 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, чтобы поделиться своим опытом и идеями!
Читать далее

Introducing Zilliz CLI and Agent Skills for Zilliz Cloud
Manage your vector database from your terminal or AI coding agent. Zilliz CLI and Agent Skills work with Claude Code, Cursor, Codex, and Copilot.

Introducing Functions and Model Inference on Zilliz Cloud: Automatic Embedding and Reranking with Hosted Models
Zilliz Cloud Functions auto-generate embeddings via OpenAI, Voyage AI, Cohere, or Zilliz Hosted Models. Built-in reranking — just insert text and search.

Context Engineering Strategies for AI Agents: A Developer’s Guide
Learn practical context engineering strategies for AI agents. Explore frameworks, tools, and techniques to improve reliability, efficiency, and cost.



