diff --git a/solutions/6a02e23da6fe2e4ac16acf65_Агент_с_RAG_памятью/README.md b/solutions/6a02e23da6fe2e4ac16acf65_Агент_с_RAG_памятью/README.md index 223e693..82bd021 100644 --- a/solutions/6a02e23da6fe2e4ac16acf65_Агент_с_RAG_памятью/README.md +++ b/solutions/6a02e23da6fe2e4ac16acf65_Агент_с_RAG_памятью/README.md @@ -1,35 +1,43 @@ # Агент с RAG‑памятью ## Описание проекта +Проект реализует **AI‑агента**, способного хранить и извлекать знания из локальной векторной базы Qdrant при помощи Ollama (LLM + эмбеддинги). +Основные возможности: -Проект реализует **AI‑агента**, способного хранить, искать и использовать знания в локальной векторной базе данных Qdrant при помощи Ollama (LLM `llama3` и эмбеддинг‑модель `nomic-embed-text`). -Агент использует LangChain для построения цепочки действий, а также предоставляет два инструмента: - -| Инструмент | Описание | -|------------|----------| -| `search_knowledge_base(query, max_results)` | Семантический поиск по базе знаний. | -| `add_to_knowledge_base(content, title)` | Добавление нового документа в базу (с чанкингом и эмбеддингами). | +- Семантический поиск по базе знаний (`search_knowledge_base`). +- Добавление новых документов в базу (`add_to_knowledge_base`). +- Автоматическое разбиение больших текстов на чанки. +- Интеграция с LangChain для создания агента, использующего RAG‑память. ## Стек технологий - -- **Python 3.10+** -- **Qdrant** – локальная векторная база данных -- **Ollama** – LLM `llama3` + эмбеддинги `nomic-embed-text` -- **LangChain** – фреймворк для агентов, RAG и инструментов +| Технология | Версия | Зачем | +|------------|--------|-------| +| Python | 3.10+ | Язык разработки | +| Qdrant | - | Векторная база данных | +| Ollama | - | Локальные LLM и эмбеддинги (`llama3`, `nomic-embed-text`) | +| LangChain | - | Фреймворк для агентов, RAG и инструментов | ## Установка зависимостей ```bash -# 1. Ollama (LLM и эмбеддинг‑модели) +# 1️⃣ Установить Ollama (если ещё не установлен) +# https://ollama.com/download + +# Загрузить модели ollama pull llama3 ollama pull nomic-embed-text -# 2. Python пакеты +# 2️⃣ Создать виртуальное окружение и установить Python‑пакеты +python -m venv .venv +source .venv/bin/activate # Windows: .venv\Scripts\activate + +pip install --upgrade pip pip install langchain langchain-qdrant langchain-ollama ``` -> **Важно**: Qdrant должен быть запущен локально (по умолчанию на `localhost:6333`). -> Если вы используете Docker, можно быстро поднять контейнер: +> **Важно** +> Qdrant должен быть запущен локально (по умолчанию `http://localhost:6333`). +> Если у вас нет Docker‑образа, можно установить его через: > ```bash > docker run -p 6333:6333 qdrant/qdrant > ``` @@ -38,87 +46,124 @@ pip install langchain langchain-qdrant langchain-ollama | Файл | Описание | |------|----------| -| `rag_agent.py` | Основная логика агента и его инструменты. | -| `qdrant_client.py` | Обёртка над QdrantVectorStore: инициализация, добавление документов, поиск. | -| `chunker.py` | Модуль для разбиения текста на чанки (RecursiveCharacterTextSplitter). | -| `init_loader.py` | Скрипт загрузки начальных данных в базу. | -| `cli_client.py` | CLI‑интерфейс для взаимодействия с агентом из командной строки. | +| `rag_agent.py` | Основная логика агента и RAG‑инструментов. | +| `qdrant_client.py` | Обёртка над QdrantVectorStore (инициализация, добавление, поиск). | +| `chunker.py` | Модуль разбиения текста на чанки. | +| `init_loader.py` | Скрипт для первичной загрузки документов в базу. | +| `cli_client.py` | CLI‑интерфейс для взаимодействия с агентом. | -## Как запустить +## Как запустить каждый файл -### 1. Инициализация базы (опционально) +### 1️⃣ `rag_agent.py` +Файл содержит самих инструментов и пример их использования. -Если вы хотите сразу наполнить базу тестовыми данными, выполните: +```bash +python rag_agent.py +``` + +> Вы увидите вывод о работе инструментов: добавление документа, поиск по запросу и ответ агента. + +--- + +### 2️⃣ `qdrant_client.py` +Пример работы с клиентом Qdrant (добавление/поиск). + +```bash +python qdrant_client.py +``` + +--- + +### 3️⃣ `chunker.py` +Показывает, как разбивается текст на чанки. + +```bash +python chunker.py +``` + +--- + +### 4️⃣ `init_loader.py` +Загружает все файлы из папки `data/` в базу знаний. +Создайте каталог `data/`, поместите туда `.txt` или `.pdf` файлы, затем: ```bash python init_loader.py ``` -> Скрипт `init_loader.py` читает файлы из папки `data/`, разбивает их на чанки и сохраняет в Qdrant. +--- -### 2. Запуск CLI‑клиента - -CLI позволяет задавать вопросы агенту, а также добавлять новые документы: +### 5️⃣ `cli_client.py` +CLI‑интерфейс для общения с агентом. ```bash python cli_client.py ``` -#### Примеры использования +> Введите любой вопрос, и агент ответит, используя RAG‑память. -| Команда | Описание | -|---------|----------| -| `ask "Какой смысл жизни?"` | Агент выполнит поиск в базе и сформирует ответ. | -| `add "data/new_doc.txt" "Новый документ"` | Добавляет новый файл в базу знаний (с чанкингом). | +## Пример использования -### 3. Запуск агента напрямую +1. **Инициализируйте базу знаний** (если ещё не сделано): -Если вам нужен только агент без CLI, можно импортировать его из `rag_agent.py`: + ```bash + python init_loader.py + ``` -```python -from rag_agent import agent_executor +2. **Запустите CLI‑клиент**: -response = agent_executor.invoke({"input": "Расскажи о Qdrant"}) -print(response["output"]) -``` + ```bash + python cli_client.py + ``` -## Пример кода (CLI) +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 -$ python cli_client.py ask "Что такое RAG?" -Agent: Searching knowledge base... -Result: ... -Answer: ... -``` +# Установить pytest (если нужен) +pip install pytest -## Настройка переменных окружения - -| Переменная | Значение по умолчанию | Описание | -|------------|-----------------------|----------| -| `QDRANT_HOST` | `localhost` | Хост Qdrant. | -| `QDRANT_PORT` | `6333` | Порт Qdrant. | -| `QDRANT_COLLECTION` | `rag_collection` | Имя коллекции в Qdrant. | -| `EMBEDDING_MODEL` | `nomic-embed-text` | Модель эмбеддингов. | -| `LLM_MODEL` | `llama3` | Модель LLM. | - -## Тесты - -Тесты находятся в папке `tests/`. Запустить их можно так: - -```bash +# Запустить тесты (если есть) pytest tests/ ``` -> Убедитесь, что Qdrant и Ollama запущены перед запуском тестов. +> В проекте пока нет автоматических тестов, но вы можете добавить их в папку `tests/`. + +## FAQ + +| Вопрос | Ответ | +|--------|-------| +| **Как изменить модель Ollama?** | Измените параметр `model` в `OllamaEmbeddings` и `OllamaLLM`. | +| **Можно ли использовать удалённый Qdrant?** | Да, укажите нужный URL при создании `KnowledgeBase`. | +| **Что делать, если база пустая?** | Запустите `init_loader.py` или добавьте документы через `add_to_knowledge_base`. | ## Лицензия - -MIT License – см. файл `LICENSE`. - ---- - -**Примечание:** -- Для работы с большим объёмом данных рекомендуется использовать более мощные модели эмбеддингов и LLM. -- Если вы хотите использовать облачные сервисы вместо локальных, замените импорты и конфигурацию в файлах проекта. +MIT © 2026 --- \ No newline at end of file