From 1e35458d138c3ffc8aa2a525422f8b7355386969 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:16:10 +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 | 228 +++++++----------- 1 file changed, 87 insertions(+), 141 deletions(-) diff --git a/solutions/6a02e23da6fe2e4ac16acf65_Агент_с_RAG_памятью/README.md b/solutions/6a02e23da6fe2e4ac16acf65_Агент_с_RAG_памятью/README.md index 82bd021..ce608e0 100644 --- a/solutions/6a02e23da6fe2e4ac16acf65_Агент_с_RAG_памятью/README.md +++ b/solutions/6a02e23da6fe2e4ac16acf65_Агент_с_RAG_памятью/README.md @@ -1,169 +1,115 @@ # Агент с RAG‑памятью ## Описание проекта -Проект реализует **AI‑агента**, способного хранить и извлекать знания из локальной векторной базы Qdrant при помощи Ollama (LLM + эмбеддинги). -Основные возможности: -- Семантический поиск по базе знаний (`search_knowledge_base`). -- Добавление новых документов в базу (`add_to_knowledge_base`). -- Автоматическое разбиение больших текстов на чанки. -- Интеграция с LangChain для создания агента, использующего RAG‑память. +`solution.py` реализует AI‑агента, способного хранить и извлекать знания из локальной векторной базы Qdrant при помощи Ollama (LLM `llama3` и эмбеддинговая модель `nomic-embed-text`). +Агент использует LangChain для: + +* **RAG** – Retrieval‑Augmented Generation +* Инструменты поиска (`search_knowledge_base`) и добавления (`add_to_knowledge_base`) в базу знаний +* Чанкинга больших документов через `RecursiveCharacterTextSplitter` +* Взаимодействия с Qdrant через `QdrantVectorStore` ## Стек технологий -| Технология | Версия | Зачем | -|------------|--------|-------| -| Python | 3.10+ | Язык разработки | -| Qdrant | - | Векторная база данных | -| Ollama | - | Локальные LLM и эмбеддинги (`llama3`, `nomic-embed-text`) | -| LangChain | - | Фреймворк для агентов, RAG и инструментов | + +| Технология | Версия | +|------------|--------| +| Python | 3.10+ | +| Ollama | 0.1+ | +| Qdrant | 1.x | +| LangChain | 0.2+ | ## Установка зависимостей ```bash -# 1️⃣ Установить Ollama (если ещё не установлен) -# https://ollama.com/download - -# Загрузить модели +# 1️⃣ Загрузить модели в Ollama ollama pull llama3 ollama pull nomic-embed-text -# 2️⃣ Создать виртуальное окружение и установить Python‑пакеты -python -m venv .venv -source .venv/bin/activate # Windows: .venv\Scripts\activate - -pip install --upgrade pip +# 2️⃣ Установить Python‑пакеты pip install langchain langchain-qdrant langchain-ollama ``` > **Важно** -> Qdrant должен быть запущен локально (по умолчанию `http://localhost:6333`). -> Если у вас нет Docker‑образа, можно установить его через: +> Qdrant должен быть запущен локально (по умолчанию `localhost:6333`). +> Если у вас нет Docker, установите Qdrant через официальную инструкцию: > ```bash > docker run -p 6333:6333 qdrant/qdrant > ``` +## Запуск + +```bash +python solution.py --help +``` + +### Основные команды + +| Флаг | Описание | +|------|----------| +| `--add FILE` | Добавить документ из файла в базу знаний | +| `--search QUERY [--max N]` | Выполнить семантический поиск по базе | +| `--agent` | Запустить интерактивного агента, который сам будет использовать RAG | + +#### Пример добавления документа + +```bash +python solution.py --add docs/guide.txt +``` + +#### Пример поиска + +```bash +python solution.py --search "Как настроить Qdrant?" --max 5 +``` + +#### Запуск интерактивного агента + +```bash +python solution.py --agent +``` + +После запуска агент будет ждать ваших вопросов и отвечать, используя найденную информацию из базы. + +## Пример использования в коде + +```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") +) + +# Чанкинг текста +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) + +for doc, score in results: + print(f"[{score:.2f}] {doc.page_content[:200]}...") +``` + ## Структура проекта -| Файл | Описание | -|------|----------| -| `rag_agent.py` | Основная логика агента и RAG‑инструментов. | -| `qdrant_client.py` | Обёртка над QdrantVectorStore (инициализация, добавление, поиск). | -| `chunker.py` | Модуль разбиения текста на чанки. | -| `init_loader.py` | Скрипт для первичной загрузки документов в базу. | -| `cli_client.py` | CLI‑интерфейс для взаимодействия с агентом. | - -## Как запустить каждый файл - -### 1️⃣ `rag_agent.py` -Файл содержит самих инструментов и пример их использования. - -```bash -python rag_agent.py ``` - -> Вы увидите вывод о работе инструментов: добавление документа, поиск по запросу и ответ агента. - ---- - -### 2️⃣ `qdrant_client.py` -Пример работы с клиентом Qdrant (добавление/поиск). - -```bash -python qdrant_client.py +project/ +├── solution.py # Основной скрипт +└── docs/ # Пример документов для добавления ``` ---- - -### 3️⃣ `chunker.py` -Показывает, как разбивается текст на чанки. - -```bash -python chunker.py -``` - ---- - -### 4️⃣ `init_loader.py` -Загружает все файлы из папки `data/` в базу знаний. -Создайте каталог `data/`, поместите туда `.txt` или `.pdf` файлы, затем: - -```bash -python init_loader.py -``` - ---- - -### 5️⃣ `cli_client.py` -CLI‑интерфейс для общения с агентом. - -```bash -python cli_client.py -``` - -> Введите любой вопрос, и агент ответит, используя RAG‑память. - -## Пример использования - -1. **Инициализируйте базу знаний** (если ещё не сделано): - - ```bash - python init_loader.py - ``` - -2. **Запустите CLI‑клиент**: - - ```bash - python cli_client.py - ``` - -3. **Взаимодействуйте с агентом**: - - ``` - > Какой был первый президент России? - Ответ: Первый президент Российской Федерации — Борис Ельцин. - ``` - -4. **Добавьте новый документ вручную** (через `rag_agent.py` или любой другой скрипт): - - ```python - from rag_agent import add_to_knowledge_base - - content = "Python – язык программирования, созданный Гвидо ван Россумом." - title = "О Python" - add_to_knowledge_base(content=content, title=title) - ``` - -5. **Проверьте поиск**: - - ```python - from rag_agent import search_knowledge_base - - results = search_knowledge_base(query="что такое python", max_results=3) - for r in results: - print(r.page_content[:200]) - ``` - -## Тесты и отладка - -```bash -# Установить pytest (если нужен) -pip install pytest - -# Запустить тесты (если есть) -pytest tests/ -``` - -> В проекте пока нет автоматических тестов, но вы можете добавить их в папку `tests/`. - -## FAQ - -| Вопрос | Ответ | -|--------|-------| -| **Как изменить модель Ollama?** | Измените параметр `model` в `OllamaEmbeddings` и `OllamaLLM`. | -| **Можно ли использовать удалённый Qdrant?** | Да, укажите нужный URL при создании `KnowledgeBase`. | -| **Что делать, если база пустая?** | Запустите `init_loader.py` или добавьте документы через `add_to_knowledge_base`. | - ## Лицензия -MIT © 2026 ---- \ No newline at end of file +MIT © 2026. \ No newline at end of file