RAG-агент на Python с Ollama и LangGraph: гайд по семантическому поиску в микросервисах 2026
-

В этой статье разберем, как собрать RAG-агента на Python с использованием Ollama и LangGraph. Это поможет реализовать семантический поиск в микросервисной архитектуре. Такой подход упрощает обработку запросов и повышает точность поиска по большим объемам данных.
RAG-агент комбинирует ретривер и генератор, чтобы находить релевантные документы и генерировать ответы. В микросервисах это решает проблемы масштабирования и изоляции данных. Вы получите готовый гайд с кодом для быстрого старта.
Что такое RAG и зачем его интегрировать в микросервисы
RAG - Retrieval-Augmented Generation - это метод, где агент сначала извлекает релевантные фрагменты из базы знаний, а потом генерирует ответ на их основе. В отличие от чистых LLM, RAG снижает галлюцинации и работает с актуальными данными. В микросервисной архитектуре каждый сервис может иметь свой векторный стор, что упрощает деплой и обновления.
Представьте сценарий: сервис пользователей ищет профили по семантике, сервис заказов - историю транзакций. Без RAG поиск ограничен ключевыми словами, что приводит к ошибкам. С Ollama для локальных моделей и LangGraph для оркестрации графов потоков задача решается элегантно. Это масштабируется на кластеры Kubernetes.
Вот ключевые преимущества RAG в микросервисах:
- Семантический поиск вместо строкового матчинга;
- Локальные модели Ollama без облачных затрат;
- Графы LangGraph для сложной логики ветвлений;
- Интеграция с векторными БД вроде Qdrant или Pinecone.
Компонент Описание Преимущества Ollama Локальный inference LLM Конфиденциальность, скорость LangGraph Оркестрация агентов Управление состоянием, retry Vector DB Хранение эмбеддингов Быстрый семантический поиск Подготовка окружения и установка зависимостей
Сначала настройте Python 3.11+ и виртуальное окружение. Ollama требует Docker или нативной установки для моделей вроде Llama3. LangGraph от LangChain упрощает создание состояний агента. В микросервисах каждый сервис запускается в отдельном контейнере с volume для моделей.
Установите пакеты:
pip install langchain langgraph ollama qdrant-client chromadb sentence-transformers. Запустите Ollama:ollama pull llama3. Для векторного стора подойдет Qdrant в Docker. Это базовый стек, готовый к продакшену с мониторингом через Prometheus.Шаги установки:
- Создайте
requirements.txtс версиями: langchain==0.1.0, langgraph==0.0.20; - Инициализируйте Qdrant:
docker run -p 6333:6333 qdrant/qdrant; - Загрузите эмбеддер:
from sentence_transformers import SentenceTransformer; model = SentenceTransformer('all-MiniLM-L6-v2'); - Тестируйте Ollama API:
ollama run llama3 'test query'.
Важно: Укажите
OLLAMA_BASE_URLдля удаленного сервера в микросервисах.Архитектура RAG-агента в микросервисах с LangGraph
В микросервисах RAG-агент разбивается на ноды: ретривер, ранкер, генератор. LangGraph строит граф, где ноды - функции Python, ребра - условия переходов. Центральный API-гейтвей маршрутизирует запросы к сервисам. Каждый сервис имеет свой RAG для локальных данных.
Пример: сервис поиска документов использует RAG для семантики, сервис рекомендаций - для похожих items. Ollama обрабатывает генерацию локально. Это снижает latency до 200мс и избегает vendor lock-in.
Структура графа LangGraph:
- Retriever node: Поиск top-k документов по cosine similarity;
- Reranker node: Переранжировка с cross-encoder;
- Generator node: Промпт с контекстом в Ollama;
- Router: Условия для fallback или multi-hop поиска.
import langgraph from langchain_ollama import OllamaLLM llm = OllamaLLM(model="llama3") graph = langgraph.StateGraph() # Добавляем ноды и ребра graph.add_node("retrieve", retriever_func) graph.set_entry_point("retrieve")Сервис RAG-роль Vector DB Users Профили Qdrant Orders Транзакции Chroma Catalog Товары Pinecone Реализация кода: от ретривера до полного агента
Начните с загрузки документов в векторный стор. Используйте LangChain loaders для PDF/CSV. Эмбеддинги генерируйте батчами. В LangGraph определите состояние:
class AgentState(TypedDict): messages: list; context: str.Для микросервисов оберните в FastAPI: эндпоинт
/queryпринимает текст, возвращает JSON с источниками. Добавьте кэш Redis для частых запросов. Тестируйте на датасете MS MARCO для метрик recall@10.Полный пайплайн в коде:
def retrieve(state): docs = qdrant.similarity_search(state['query'], k=5); return {'context': docs};- Генерация:
prompt = f"Context: {{context}} Question: {{query}}"; llm.invoke(prompt); - Сборка графа:
app = graph.compile(); result = app.invoke({'query': user_input}); - Деплой: Docker Compose с Ollama и Qdrant.
Нюанс: Нормализуйте эмбеддинги для точности cosine.
from fastapi import FastAPI app = FastAPI() @app.post('/search') def search(query: str): return rag_agent.invoke({'query': query})Готовый стек для продакшена и оптимизации
Собранный RAG-агент готов к микросервисам: масштабируйте через Kubernetes, мониторьте с Grafana. Оптимизируйте индексацию HNSW в Qdrant для скорости. Тестируйте на production-like нагрузке с Locust.
Остается доработать мультиязычность эмбеддеров и hybrid search (семантика + ключевые слова). Подумайте о fine-tuning Ollama под домен для еще большей точности. Такой стек актуален в 2026 для enterprise AI.
Здравствуйте! Похоже, вас заинтересовала эта беседа, но у вас ещё нет аккаунта.
Надоело каждый раз пролистывать одни и те же посты? Зарегистрировав аккаунт, вы всегда будете возвращаться на ту же страницу, где были раньше, и сможете выбирать, получать ли уведомления о новых ответах (по электронной почте или в виде push-уведомлений). Вы также сможете сохранять закладки и ставить лайки постам, чтобы выразить свою благодарность другим участникам сообщества.
С вашими комментариями этот пост мог бы стать ещё лучше 💗
Зарегистрироваться Войти© 2024 - 2026 ExLends, Inc. Все права защищены.