# Агент с RAG‑памятью ## Описание проекта Проект реализует **AI‑агента**, способного хранить и извлекать знания из локальной векторной базы данных Qdrant, используя модели Ollama (`llama3` для генерации текста и `nomic-embed-text` для эмбеддингов). Агент использует LangChain для построения цепочки инструментов (RAG) и взаимодействия с пользователем. > **Ключевые возможности** > * Семантический поиск по базе знаний. > * Добавление новых документов в базу. > * Чанкование больших текстов перед сохранением. > * Интеграция LLM для генерации ответов на основе найденной информации. --- ## Стек технологий | Технология | Версия / Пакет | |------------|----------------| | Python | 3.10+ | | Qdrant | v1.x (локальный сервер) | | Ollama | `llama3`, `nomic-embed-text` | | LangChain | `langchain`, `langchain-qdrant`, `langchain-ollama` | --- ## Установка зависимостей ```bash # 1. Скачиваем модели Ollama ollama pull llama3 ollama pull nomic-embed-text # 2. Устанавливаем Python‑пакеты pip install langchain langchain-qdrant langchain-ollama ``` > **Важно** > * 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 ``` > Скрипт запускает интерактивный режим: пользователь вводит запрос, агент отвечает, используя найденные векторные документы. > Для тестирования можно добавить примерный документ: ```bash python solution.py --add "title=Python Basics" --content="Python is a high-level programming language..." ``` --- ## Пример использования ### 1. Добавление документа ```bash 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 query "What is Python?" ``` > Агент выполнит семантический поиск, найдёт релевантные чанки и сформирует ответ с использованием LLM. --- ## Как это работает (техническое резюме) 1. **Чанкование** – `RecursiveCharacterTextSplitter` разбивает большие тексты на части длиной до 1000 символов с перекрытием 200. 2. **Эмбеддинг** – каждая часть преобразуется в эмбеддинги через Ollama (`nomic-embed-text`) и сохраняется в Qdrant. 3. **Поиск** – при запросе агент использует `search_knowledge_base`, который ищет ближайшие векторы в коллекции, возвращая топ‑N документов. 4. **Ответ** – LLM (`llama3`) генерирует финальный ответ, опираясь на найденные документы. --- ## Расширение проекта - Добавить поддержку нескольких моделей Ollama. - Интегрировать хранение метаданных (дата добавления, автор). - Реализовать удаление/обновление документов через инструменты. - Создать веб‑интерфейс на FastAPI для удобного взаимодействия. --- ## Лицензия MIT License – свободно используйте и модифицируйте код по своему усмотрению.