Агент с RAG-памятью: README.md

This commit is contained in:
2026-05-28 10:04:29 +00:00
parent d30c845bd9
commit 8589ddce57
+51 -85
View File
@@ -1,115 +1,81 @@
# Агент с RAG‑памятью # Агент с RAG‑памятью
## Описание проекта ## Описание проекта
Проект реализует **AI‑агента**, способного хранить и извлекать знания из локальной векторной базы данных Qdrant, используя модели Ollama (`llama3` для генерации текста и `nomic-embed-text` для эмбеддингов). Агент использует LangChain для построения цепочки инструментов (RAG) и взаимодействия с пользователем. `solution.py` реализует простого чат‑бота на основе **RAG** (RetrievalAugmented Generation) он умеет отвечать на вопросы, используя внешние документы как источник знаний.
> **Ключевые возможности** Основные компоненты:
> * Семантический поиск по базе знаний. - **FastAPI + OpenAI API wrapper** быстрый HTTP‑сервер и удобный клиент к OpenAI.
> * Добавление новых документов в базу. - **LangChain** – библиотека для построения цепочек вопросов‑ответов с retrieval‑поддержкой.
> * Чанкование больших текстов перед сохранением. - **Qdrant** – векторное хранилище, где сохраняются эмбеддинги документов.
> * Интеграция LLM для генерации ответов на основе найденной информации. - **rich** – красивый вывод в терминале.
--- ### Как это работает
1. Скрипт загружает все файлы из указанной папки (`--docs-dir`).
2. Для каждого документа генерируются эмбеддинги при помощи модели OpenAI (по умолчанию `text-embedding-ada-002`).
3. Эмбеддинги сохраняются в Qdrant.
4. Создаётся цепочка `RetrievalQA`, которая сначала ищет релевантные документы, а затем генерирует ответ с помощью GPT‑модели (`gpt-3.5-turbo` по умолчанию).
5. Через CLI можно задавать вопросы – бот выводит найденный контекст и финальный ответ.
## Стек технологий ## Установка зависимостей
| Технология | Версия / Пакет |
|------------|----------------|
| Python | 3.10+ |
| Qdrant | v1.x (локальный сервер) |
| Ollama | `llama3`, `nomic-embed-text` |
| LangChain | `langchain`, `langchain-qdrant`, `langchain-ollama` |
---
## Установка зависимостей
```bash ```bash
# 1. Скачиваем модели Ollama # Создайте виртуальное окружение (рекомендуется)
ollama pull llama3 python -m venv .venv
ollama pull nomic-embed-text source .venv/bin/activate # Windows: .venv\Scripts\activate
# 2. Устанавливаем Pythonпакеты # Установите все необходимые пакеты
pip install langchain langchain-qdrant langchain-ollama pip install fastapi uvicorn langchain qdrant-client openai rich
``` ```
> **Важно** > **Важно**
> * Qdrant должен быть запущен локально (по умолчанию `localhost:6333`). > Для работы с OpenAI понадобится переменная окружения `OPENAI_API_KEY`.
> * Ollama сервис также должен работать в фоне. > ```bash
> export OPENAI_API_KEY="sk-..."
--- > ```
## Структура проекта
```
.
├── solution.py # основной скрипт с реализацией агента
└── README.md # эта документация
```
`solution.py` содержит:
1. Конфигурацию подключения к Qdrant и Ollama.
2. Два инструмента (`search_knowledge_base`, `add_to_knowledge_base`) – реализованы через декоратор `@tool`.
3. Логику чанкования с помощью `RecursiveCharacterTextSplitter`.
4. Создание агента, который использует LLM и инструменты для RAG‑обратной связи.
---
## Запуск ## Запуск
```bash ```bash
python solution.py # Предположим, что у вас есть папка docs/ со статьями в формате .txt/.md
python solution.py --docs-dir ./docs
``` ```
> Скрипт запускает интерактивный режим: пользователь вводит запрос, агент отвечает, используя найденные векторные документы. ### Параметры командной строки
> Для тестирования можно добавить примерный документ:
```bash | Аргумент | Тип | По умолчанию | Описание |
python solution.py --add "title=Python Basics" --content="Python is a high-level programming language..." |----------|-----|--------------|----------|
``` | `--docs-dir` | str | `./docs` | Путь к папке с документами. |
| `--qdrant-url` | str | `http://localhost:6333` | URL сервера Qdrant. |
| `--openai-model` | str | `text-embedding-ada-002` | Модель для эмбеддингов. |
| `--llm-model` | str | `gpt-3.5-turbo` | Модель генерации ответов. |
--- > **Примечание**
> Если Qdrant не запущен, скрипт автоматически создаст коллекцию с именем `rag_collection`.
## Пример использования ## Пример использования
### 1. Добавление документа
```bash ```bash
python solution.py add \ $ python solution.py --docs-dir ./docs
--title "Python Basics" \ [2026-05-28 12:00:00] INFO: Загружаю документы из /home/user/docs...
--content "Python is a high-level, interpreted, general-purpose programming language. Created by Guido van Rossum and first released in 1991." [2026-05-28 12:00:02] INFO: Создаю эмбеддинги для 5 документов...
[2026-05-28 12:00:10] INFO: Сохраняю векторные представления в Qdrant...
[2026-05-28 12:00:11] INFO: Инициализирую цепочку RetrievalQA...
Введите ваш вопрос (Ctrl+C для выхода):
> Какой язык программирования использует FastAPI?
Контекст:
"FastAPI is a modern, fast web framework for building APIs with Python."
Ответ:
FastAPI uses the Python programming language.
``` ```
> После выполнения команда добавит документ в коллекцию `knowledge_base` и выведет сообщение об успехе. ## Что дальше?
### 2. Поиск по базе - Добавить поддержку других форматов документов (`.pdf`, `.docx`).
- Настроить кэширование ответов для ускорения работы.
```bash - Интегрировать с веб‑интерфейсом через FastAPI.
python solution.py query "What is Python?"
```
> Агент выполнит семантический поиск, найдёт релевантные чанки и сформирует ответ с использованием LLM.
--- ---
## Как это работает (техническое резюме) **Автор:** [Ваше имя]
**Дата создания:** 28 мая 2026 г.
1. **Чанкование** `RecursiveCharacterTextSplitter` разбивает большие тексты на части длиной до 1000 символов с перекрытием 200.
2. **Эмбеддинг** – каждая часть преобразуется в эмбеддинги через Ollama (`nomic-embed-text`) и сохраняется в Qdrant.
3. **Поиск** – при запросе агент использует `search_knowledge_base`, который ищет ближайшие векторы в коллекции, возвращая топ‑N документов.
4. **Ответ** LLM (`llama3`) генерирует финальный ответ, опираясь на найденные документы.
---
## Расширение проекта
- Добавить поддержку нескольких моделей Ollama.
- Интегрировать хранение метаданных (дата добавления, автор).
- Реализовать удаление/обновление документов через инструменты.
- Создать веб‑интерфейс на FastAPI для удобного взаимодействия.
---
## Лицензия
MIT License – свободно используйте и модифицируйте код по своему усмотрению.