<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[RAG-агент на Python с Ollama и LangGraph: гайд по семантическому поиску в микросервисах 2026]]></title><description><![CDATA[<p dir="auto"><img src="/assets/uploads/files/bb/cc/f1/1773849429316-generated_1773849145816-resized.webp" alt="Обложка: Как построить RAG-агента на Python с Ollama и LangGraph для семантического поиска в микросервисной архитектуре: гайд 2026" class=" img-fluid img-markdown" /></p>
<p dir="auto">В этой статье разберем, как собрать RAG-агента на Python с использованием Ollama и LangGraph. Это поможет реализовать семантический поиск в микросервисной архитектуре. Такой подход упрощает обработку запросов и повышает точность поиска по большим объемам данных.</p>
<p dir="auto">RAG-агент комбинирует ретривер и генератор, чтобы находить релевантные документы и генерировать ответы. В микросервисах это решает проблемы масштабирования и изоляции данных. Вы получите готовый гайд с кодом для быстрого старта.</p>
<h2>Что такое RAG и зачем его интегрировать в микросервисы</h2>
<p dir="auto">RAG - Retrieval-Augmented Generation - это метод, где агент сначала извлекает релевантные фрагменты из базы знаний, а потом генерирует ответ на их основе. В отличие от чистых LLM, RAG снижает галлюцинации и работает с актуальными данными. В микросервисной архитектуре каждый сервис может иметь свой векторный стор, что упрощает деплой и обновления.</p>
<p dir="auto">Представьте сценарий: сервис пользователей ищет профили по семантике, сервис заказов - историю транзакций. Без RAG поиск ограничен ключевыми словами, что приводит к ошибкам. С Ollama для локальных моделей и LangGraph для оркестрации графов потоков задача решается элегантно. Это масштабируется на кластеры Kubernetes.</p>
<p dir="auto">Вот ключевые преимущества RAG в микросервисах:</p>
<ul>
<li><strong>Семантический поиск</strong> вместо строкового матчинга;</li>
<li><em>Локальные модели</em> Ollama без облачных затрат;</li>
<li>Графы LangGraph для сложной логики ветвлений;</li>
<li>Интеграция с векторными БД вроде Qdrant или Pinecone.</li>
</ul>
<table class="table table-bordered table-striped">
<thead>
<tr>
<th>Компонент</th>
<th>Описание</th>
<th>Преимущества</th>
</tr>
</thead>
<tbody>
<tr>
<td>Ollama</td>
<td>Локальный inference LLM</td>
<td>Конфиденциальность, скорость</td>
</tr>
<tr>
<td>LangGraph</td>
<td>Оркестрация агентов</td>
<td>Управление состоянием, retry</td>
</tr>
<tr>
<td>Vector DB</td>
<td>Хранение эмбеддингов</td>
<td>Быстрый семантический поиск</td>
</tr>
</tbody>
</table>
<h2>Подготовка окружения и установка зависимостей</h2>
<p dir="auto">Сначала настройте Python 3.11+ и виртуальное окружение. Ollama требует Docker или нативной установки для моделей вроде Llama3. LangGraph от LangChain упрощает создание состояний агента. В микросервисах каждый сервис запускается в отдельном контейнере с volume для моделей.</p>
<p dir="auto">Установите пакеты: <code>pip install langchain langgraph ollama qdrant-client chromadb sentence-transformers</code>. Запустите Ollama: <code>ollama pull llama3</code>. Для векторного стора подойдет Qdrant в Docker. Это базовый стек, готовый к продакшену с мониторингом через Prometheus.</p>
<p dir="auto">Шаги установки:</p>
<ol>
<li>Создайте <code>requirements.txt</code> с версиями: langchain==0.1.0, langgraph==0.0.20;</li>
<li><em>Инициализируйте Qdrant</em>: <code>docker run -p 6333:6333 qdrant/qdrant</code>;</li>
<li>Загрузите эмбеддер: <code>from sentence_transformers import SentenceTransformer; model = SentenceTransformer('all-MiniLM-L6-v2')</code>;</li>
<li>Тестируйте Ollama API: <code>ollama run llama3 'test query'</code>.</li>
</ol>
<p dir="auto"><strong>Важно</strong>: Укажите <code>OLLAMA_BASE_URL</code> для удаленного сервера в микросервисах.</p>
<h2>Архитектура RAG-агента в микросервисах с LangGraph</h2>
<p dir="auto">В микросервисах RAG-агент разбивается на ноды: ретривер, ранкер, генератор. LangGraph строит граф, где ноды - функции Python, ребра - условия переходов. Центральный API-гейтвей маршрутизирует запросы к сервисам. Каждый сервис имеет свой RAG для локальных данных.</p>
<p dir="auto">Пример: сервис поиска документов использует RAG для семантики, сервис рекомендаций - для похожих items. Ollama обрабатывает генерацию локально. Это снижает latency до 200мс и избегает vendor lock-in.</p>
<p dir="auto">Структура графа LangGraph:</p>
<ul>
<li><strong>Retriever node</strong>: Поиск top-k документов по cosine similarity;</li>
<li><em>Reranker node</em>: Переранжировка с cross-encoder;</li>
<li>Generator node: Промпт с контекстом в Ollama;</li>
<li>Router: Условия для fallback или multi-hop поиска.</li>
</ul>
<pre><code class="language-python">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")
</code></pre>
<table class="table table-bordered table-striped">
<thead>
<tr>
<th>Сервис</th>
<th>RAG-роль</th>
<th>Vector DB</th>
</tr>
</thead>
<tbody>
<tr>
<td>Users</td>
<td>Профили</td>
<td>Qdrant</td>
</tr>
<tr>
<td>Orders</td>
<td>Транзакции</td>
<td>Chroma</td>
</tr>
<tr>
<td>Catalog</td>
<td>Товары</td>
<td>Pinecone</td>
</tr>
</tbody>
</table>
<h2>Реализация кода: от ретривера до полного агента</h2>
<p dir="auto">Начните с загрузки документов в векторный стор. Используйте LangChain loaders для PDF/CSV. Эмбеддинги генерируйте батчами. В LangGraph определите состояние: <code>class AgentState(TypedDict): messages: list; context: str</code>.</p>
<p dir="auto">Для микросервисов оберните в FastAPI: эндпоинт <code>/query</code> принимает текст, возвращает JSON с источниками. Добавьте кэш Redis для частых запросов. Тестируйте на датасете MS MARCO для метрик recall@10.</p>
<p dir="auto">Полный пайплайн в коде:</p>
<ol>
<li><code>def retrieve(state): docs = qdrant.similarity_search(state['query'], k=5); return {'context': docs}</code>;</li>
<li><em>Генерация</em>: <code>prompt = f"Context: {{context}} Question: {{query}}"; llm.invoke(prompt)</code>;</li>
<li>Сборка графа: <code>app = graph.compile(); result = app.invoke({'query': user_input})</code>;</li>
<li>Деплой: Docker Compose с Ollama и Qdrant.</li>
</ol>
<p dir="auto"><strong>Нюанс</strong>: Нормализуйте эмбеддинги для точности cosine.</p>
<pre><code class="language-python">from fastapi import FastAPI
app = FastAPI()
@app.post('/search')
def search(query: str):
    return rag_agent.invoke({'query': query})
</code></pre>
<h2>Готовый стек для продакшена и оптимизации</h2>
<p dir="auto">Собранный RAG-агент готов к микросервисам: масштабируйте через Kubernetes, мониторьте с Grafana. Оптимизируйте индексацию HNSW в Qdrant для скорости. Тестируйте на production-like нагрузке с Locust.</p>
<p dir="auto">Остается доработать мультиязычность эмбеддеров и hybrid search (семантика + ключевые слова). Подумайте о fine-tuning Ollama под домен для еще большей точности. Такой стек актуален в 2026 для enterprise AI.</p>
]]></description><link>https://forum.exlends.ru/topic/1739/rag-agent-na-python-s-ollama-i-langgraph-gajd-po-semanticheskomu-poisku-v-mikroservisah-2026</link><generator>RSS for Node</generator><lastBuildDate>Wed, 20 May 2026 10:04:22 GMT</lastBuildDate><atom:link href="https://forum.exlends.ru/topic/1739.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 18 Mar 2026 15:57:09 GMT</pubDate><ttl>60</ttl></channel></rss>