Как настроить RAG-систему с Ollama и Hugging Face для локального AI-агента в Python: гайд 2026
-

RAG-системы позволяют локальным AI-агентам давать точные ответы на основе ваших документов, без облачных сервисов. В этом гайде разберём настройку с Ollama и моделями Hugging Face в Python. Это решает проблему галлюцинаций LLM и работает полностью оффлайн.
Вы получите готовый пайплайн: от индексации текстов до запросов агента. Подходит для чат-ботов, анализа документов или внутренних инструментов. Всё на Python, с открытыми моделями - никаких API-ключей.
Что такое RAG и зачем локальная настройка
RAG расшифровывается как Retrieval-Augmented Generation. Это подход, где LLM не полагается только на свои знания, а сначала ищет релевантные фрагменты в базе данных. Затем генерирует ответ на основе этого контекста. В отличие от файнтюнинга, RAG не меняет модель - просто добавляет внешние данные.
Локальная настройка с Ollama и Hugging Face идеальна для приватности. Ollama запускает LLM на вашем GPU или CPU, Hugging Face даёт эмбеддинги. Нет затрат на облако, данные не уходят наружу. Пример: агент для анализа PDF-инструкций по бухгалтерии ищет нужный раздел и отвечает точно, без выдумок.
Это особенно полезно в 2026 году, когда модели стали мощнее, но галлюцинации никуда не делись. Гибридный поиск сочетает семантику и ключевые слова, реранкинг отсеивает шум. В итоге качество ответов растёт на 30-50% по тестам.
Вот ключевые компоненты RAG:
- Эмбеддинги: Преобразование текста в векторы (Hugging Face).
- Векторная база: Хранение и поиск (ChromaDB или FAISS).
- LLM: Генерация (Ollama).
- Пайплайн: Связка через LangChain.
Компонент Модель/Инструмент Преимущество Эмбеддинги sentence-transformers/all-MiniLM-L6-v2 Быстрые, точные для русского/английского LLM Llama3 via Ollama Полностью локальная, мощная База ChromaDB Простая, persistent Подготовка окружения и установка зависимостей
Сначала создаём виртуальное окружение. Это изолирует проект и упрощает деплой. Используем Python 3.11 или 3.12 - они оптимальны для новых моделей. Установим Ollama отдельно, оно тянет модели автоматически.
Далее пакеты через pip. LangChain упрощает пайплайн, sentence-transformers от Hugging Face генерирует векторы. ChromaDB - векторная база, лёгкая в использовании. Pypdf или unstructured помогут с загрузкой документов.
Важно: Убедитесь, что GPU с CUDA доступен для ускорения. Без него всё равно работает, но медленнее. Тестируйте на небольшом датасете сначала.
Установка шаг за шагом:
python -m venv rag_env && source rag_env/bin/activate(Linux/Mac) илиrag_env\Scripts\activate(Windows).pip install langchain langchain-community langchain-ollama chromadb sentence-transformers pypdf unstructured.- Скачайте модель в Ollama:
ollama pull llama3.2(или llama3 для мощности). - Проверьте:
ollama list.
Подготовьте данные: Соберите PDF, TXT или Markdown в папку
docs/. Они станут базой знаний агента.Создание векторной базы и индексация данных
Индексация - сердце RAG. Текст разбивается на чанки по 500-1000 символов, чтобы избежать переполнения контекста. Каждый чанк превращается в вектор через эмбеддер. Затем сохраняется в ChromaDB с метаданными (источник, страница).
Пример: Документ по Git разбивается на фрагменты о коммитах, ветках. По запросу “минимальный хэш коммита” система находит чанк с ответом и передаёт LLM. Без разбиения поиск был бы неточным.
В 2026 добавьте гибридный поиск: семантический + BM25 для ключевых слов. Это ловит коды ошибок или имена, которые эмбеддинги пропускают.
Процесс индексации:
- Загрузка файлов (PDFLoader).
- Разбивка (RecursiveCharacterTextSplitter).
- Эмбеддинги (HuggingFaceEmbeddings).
- Сохранение (Chroma.from_documents).
from langchain_community.document_loaders import PyPDFDirectoryLoader from langchain_text_splitters import RecursiveCharacterTextSplitter from langchain_community.embeddings import HuggingFaceEmbeddings from langchain_community.vectorstores import Chroma loader = PyPDFDirectoryLoader('docs/') docs = loader.load() splitter = RecursiveCharacterTextSplitter(chunk_size=1000, chunk_overlap=200) chunks = splitter.split_documents(docs) embeddings = HuggingFaceEmbeddings(model_name='sentence-transformers/all-MiniLM-L6-v2') db = Chroma.from_documents(chunks, embeddings, persist_directory='./chroma_db') print('База готова!')Нюанс: Установите chunk_overlap=200, чтобы контекст не терялся на границах.
Настройка пайплайна и локального AI-агента
Пайплайн связывает retriever, промпт и LLM. Retriever берёт top-4 чанка, форматирует в контекст. Промпт говорит модели: “Отвечай только на основе контекста”. Ollama интегрируется через LangChainOllama.
Для агента добавьте цикл запросов. Агент может вызывать поиск, уточнять. Пример: сначала поиск политики, потом инструмент на основе неё. Реранкер (из Hugging Face) улучшит топ-результаты.
Соберём chain:
from langchain_ollama import OllamaLLM from langchain_core.prompts import ChatPromptTemplate from langchain_core.runnables import RunnablePassthrough llm = OllamaLLM(model='llama3.2') prompt = ChatPromptTemplate.from_template('Контекст: {context}\nВопрос: {question}\nОтвет:') rag_chain = ({"context": db.as_retriever(), "question": RunnablePassthrough()} | prompt | llm) response = rag_chain.invoke('Что в документах о RAG?') print(response)Оптимизации:
- Добавьте реранкер: CrossEncoder(‘BAAI/bge-reranker-v2-m3’).
- Фильтр: Только чанки с score > 0.8.
- Агент: LangGraph для multi-step логики.
Тестирование и продвинутые приёмы оптимизации
Тестируйте на holdout-датасете: 20% документов для запросов. Метрики - точность retrieval (nDCG) и end-to-end ответов. Если контекст шумный, сократите k=3 или добавьте summary.
В продакшене мониторьте: обновляйте базу при новых файлах. Используйте watcher для автоиндексации. Для агентов - tool calling в Ollama.
Проблема Решение Эффект Галлюцинации Строгий промпт + цитаты -70% ошибок Медленный поиск GPU reranker x2 скорость Устаревшие данные PathWatcher Автообновление Готовый агент готов к вопросам. Расширьте на мультимодальность - изображения через CLIP из Hugging Face.
Пайплайн готов - масштабируйте осознанно
Теперь у вас локальный RAG-агент на Ollama и Hugging Face. Он индексирует документы, ищет точно и отвечает без облака. Базовый пайплайн покрывает 80% задач, но остаётся место для тонкой настройки.
Дальше думайте о мультимодальном RAG или интеграции с базами вроде Pinecone для кластера. Тестируйте на реальных сценариях - качество вырастет с практикой.
Здравствуйте! Похоже, вас заинтересовала эта беседа, но у вас ещё нет аккаунта.
Надоело каждый раз пролистывать одни и те же посты? Зарегистрировав аккаунт, вы всегда будете возвращаться на ту же страницу, где были раньше, и сможете выбирать, получать ли уведомления о новых ответах (по электронной почте или в виде push-уведомлений). Вы также сможете сохранять закладки и ставить лайки постам, чтобы выразить свою благодарность другим участникам сообщества.
С вашими комментариями этот пост мог бы стать ещё лучше 💗
Зарегистрироваться Войти© 2024 - 2026 ExLends, Inc. Все права защищены.