From 3bf779e7a35b1c23ed995e064d57c4388a4df840 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=9C=D0=B0=D1=80=D0=B8=D1=8F=20=D0=91=D0=B5=D1=80=D0=B4?= =?UTF-8?q?=D0=BD=D0=B8=D0=BA=D0=BE=D0=B2=D0=B0?= Date: Wed, 27 May 2026 11:28:37 +0000 Subject: [PATCH] =?UTF-8?q?=D0=90=D0=B3=D0=B5=D0=BD=D1=82=20=D1=81=20RAG?= =?UTF-8?q?=E2=80=91=D0=BF=D0=B0=D0=BC=D1=8F=D1=82=D1=8C=D1=8E:=20README.m?= =?UTF-8?q?d?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../README.md | 144 +++++++++--------- 1 file changed, 72 insertions(+), 72 deletions(-) diff --git a/solutions/6a02e23da6fe2e4ac16acf65_Агент_с_RAG_памятью/README.md b/solutions/6a02e23da6fe2e4ac16acf65_Агент_с_RAG_памятью/README.md index ce608e0..3131dea 100644 --- a/solutions/6a02e23da6fe2e4ac16acf65_Агент_с_RAG_памятью/README.md +++ b/solutions/6a02e23da6fe2e4ac16acf65_Агент_с_RAG_памятью/README.md @@ -1,115 +1,115 @@ # Агент с RAG‑памятью -## Описание проекта +## Описание проекта +Проект реализует **AI‑агента**, способного хранить и извлекать знания из локальной векторной базы данных Qdrant, используя модели Ollama (`llama3` для генерации текста и `nomic-embed-text` для эмбеддингов). Агент использует LangChain для построения цепочки инструментов (RAG) и взаимодействия с пользователем. -`solution.py` реализует AI‑агента, способного хранить и извлекать знания из локальной векторной базы Qdrant при помощи Ollama (LLM `llama3` и эмбеддинговая модель `nomic-embed-text`). -Агент использует LangChain для: +> **Ключевые возможности** +> * Семантический поиск по базе знаний. +> * Добавление новых документов в базу. +> * Чанкование больших текстов перед сохранением. +> * Интеграция LLM для генерации ответов на основе найденной информации. -* **RAG** – Retrieval‑Augmented Generation -* Инструменты поиска (`search_knowledge_base`) и добавления (`add_to_knowledge_base`) в базу знаний -* Чанкинга больших документов через `RecursiveCharacterTextSplitter` -* Взаимодействия с Qdrant через `QdrantVectorStore` +--- -## Стек технологий +## Стек технологий -| Технология | Версия | -|------------|--------| -| Python | 3.10+ | -| Ollama | 0.1+ | -| Qdrant | 1.x | -| LangChain | 0.2+ | +| Технология | Версия / Пакет | +|------------|----------------| +| Python | 3.10+ | +| Qdrant | v1.x (локальный сервер) | +| Ollama | `llama3`, `nomic-embed-text` | +| LangChain | `langchain`, `langchain-qdrant`, `langchain-ollama` | -## Установка зависимостей +--- + +## Установка зависимостей ```bash -# 1️⃣ Загрузить модели в Ollama +# 1. Скачиваем модели Ollama ollama pull llama3 ollama pull nomic-embed-text -# 2️⃣ Установить Python‑пакеты +# 2. Устанавливаем Python‑пакеты pip install langchain langchain-qdrant langchain-ollama ``` > **Важно** -> Qdrant должен быть запущен локально (по умолчанию `localhost:6333`). -> Если у вас нет Docker, установите Qdrant через официальную инструкцию: -> ```bash -> docker run -p 6333:6333 qdrant/qdrant -> ``` +> * Qdrant должен быть запущен локально (по умолчанию `localhost:6333`). +> * Ollama сервис также должен работать в фоне. + +--- + +## Структура проекта + +``` +. +├── solution.py # основной скрипт с реализацией агента +└── README.md # эта документация +``` + +`solution.py` содержит: +1. Конфигурацию подключения к Qdrant и Ollama. +2. Два инструмента (`search_knowledge_base`, `add_to_knowledge_base`) – реализованы через декоратор `@tool`. +3. Логику чанкования с помощью `RecursiveCharacterTextSplitter`. +4. Создание агента, который использует LLM и инструменты для RAG‑обратной связи. + +--- ## Запуск ```bash -python solution.py --help +python solution.py ``` -### Основные команды - -| Флаг | Описание | -|------|----------| -| `--add FILE` | Добавить документ из файла в базу знаний | -| `--search QUERY [--max N]` | Выполнить семантический поиск по базе | -| `--agent` | Запустить интерактивного агента, который сам будет использовать RAG | - -#### Пример добавления документа +> Скрипт запускает интерактивный режим: пользователь вводит запрос, агент отвечает, используя найденные векторные документы. +> Для тестирования можно добавить примерный документ: ```bash -python solution.py --add docs/guide.txt +python solution.py --add "title=Python Basics" --content="Python is a high-level programming language..." ``` -#### Пример поиска +--- + +## Пример использования + +### 1. Добавление документа ```bash -python solution.py --search "Как настроить Qdrant?" --max 5 +python solution.py add \ + --title "Python Basics" \ + --content "Python is a high-level, interpreted, general-purpose programming language. Created by Guido van Rossum and first released in 1991." ``` -#### Запуск интерактивного агента +> После выполнения команда добавит документ в коллекцию `knowledge_base` и выведет сообщение об успехе. + +### 2. Поиск по базе ```bash -python solution.py --agent +python solution.py query "What is Python?" ``` -После запуска агент будет ждать ваших вопросов и отвечать, используя найденную информацию из базы. +> Агент выполнит семантический поиск, найдёт релевантные чанки и сформирует ответ с использованием LLM. -## Пример использования в коде +--- -```python -from langchain_ollama import ChatOllama -from langchain_qdrant import QdrantVectorStore -from langchain.text_splitter import RecursiveCharacterTextSplitter -from langchain.tools import tool -from langchain.agents import create_agent, AgentExecutor, Tool -from langchain.schema import Document +## Как это работает (техническое резюме) -# Инициализация клиента Qdrant -store = QdrantVectorStore( - url="http://localhost:6333", - collection_name="knowledge_base", - embedding_function=OllamaEmbeddings(model="nomic-embed-text") -) +1. **Чанкование** – `RecursiveCharacterTextSplitter` разбивает большие тексты на части длиной до 1000 символов с перекрытием 200. +2. **Эмбеддинг** – каждая часть преобразуется в эмбеддинги через Ollama (`nomic-embed-text`) и сохраняется в Qdrant. +3. **Поиск** – при запросе агент использует `search_knowledge_base`, который ищет ближайшие векторы в коллекции, возвращая топ‑N документов. +4. **Ответ** – LLM (`llama3`) генерирует финальный ответ, опираясь на найденные документы. -# Чанкинг текста -splitter = RecursiveCharacterTextSplitter(chunk_size=500, chunk_overlap=50) -docs = splitter.split_text("Многострочный текст...") +--- -# Добавление в базу -store.add_documents([Document(page_content=d) for d in docs]) +## Расширение проекта -# Поиск -results = store.similarity_search_with_score("Как настроить Qdrant?", k=3) +- Добавить поддержку нескольких моделей Ollama. +- Интегрировать хранение метаданных (дата добавления, автор). +- Реализовать удаление/обновление документов через инструменты. +- Создать веб‑интерфейс на FastAPI для удобного взаимодействия. -for doc, score in results: - print(f"[{score:.2f}] {doc.page_content[:200]}...") -``` +--- -## Структура проекта +## Лицензия -``` -project/ -├── solution.py # Основной скрипт -└── docs/ # Пример документов для добавления -``` - -## Лицензия - -MIT © 2026. \ No newline at end of file +MIT License – свободно используйте и модифицируйте код по своему усмотрению. \ No newline at end of file