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