Агент с RAG‑памятью: README.md
This commit is contained in:
@@ -0,0 +1,132 @@
|
|||||||
|
# Агент с RAG‑памятью
|
||||||
|
|
||||||
|
## Описание проекта
|
||||||
|
Проект реализует AI‑агента, способного хранить и извлекать знания из локальной векторной базы Qdrant при помощи Ollama LLM и эмбеддингов.
|
||||||
|
- **RAG** (Retrieval‑Augmented Generation) – агент сначала ищет релевантные документы, а затем генерирует ответ, опираясь на найденную информацию.
|
||||||
|
- Векторная база хранит чанки документов, которые разбиваются при помощи `RecursiveCharacterTextSplitter`.
|
||||||
|
- Агент использует два инструмента: поиск в базе и добавление новых документов.
|
||||||
|
|
||||||
|
## Стек технологий
|
||||||
|
| Технология | Версия / Пакет |
|
||||||
|
|------------|----------------|
|
||||||
|
| Python | 3.10+ |
|
||||||
|
| Qdrant | v1.x (Docker) |
|
||||||
|
| Ollama | `llama3`, `nomic-embed-text` |
|
||||||
|
| LangChain | 0.2+ |
|
||||||
|
|
||||||
|
## Установка зависимостей
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# 1️⃣ Скачиваем модели Ollama
|
||||||
|
ollama pull llama3
|
||||||
|
ollama pull nomic-embed-text
|
||||||
|
|
||||||
|
# 2️⃣ Запускаем Qdrant (Docker)
|
||||||
|
docker run -d --name qdrant \
|
||||||
|
-p 6333:6333 \
|
||||||
|
ghcr.io/qdrant/qdrant:v1.9.0
|
||||||
|
|
||||||
|
# 3️⃣ Устанавливаем Python‑пакеты
|
||||||
|
pip install langchain langchain-qdrant langchain-ollama
|
||||||
|
```
|
||||||
|
|
||||||
|
> **Важно**
|
||||||
|
> * Qdrant должен быть запущен до запуска любого скрипта проекта.
|
||||||
|
> * Переменные окружения `QDRANT_HOST`, `QDRANT_PORT` и `QDRANT_COLLECTION` можно задать в `.env` или напрямую в терминале.
|
||||||
|
|
||||||
|
## Структура файлов
|
||||||
|
|
||||||
|
| Файл | Описание |
|
||||||
|
|------|----------|
|
||||||
|
| `rag_agent.py` | Основной скрипт, создающий агента, инструменты и запускает его. |
|
||||||
|
| `vector_store.py` | Модуль для работы с Qdrant: добавление документов, поиск. |
|
||||||
|
| `tools.py` | Декорированные функции‑инструменты (`search_knowledge_base`, `add_to_knowledge_base`). |
|
||||||
|
| `init_loader.py` | Инициализация и загрузка начальных данных в базу (опционально). |
|
||||||
|
| `cli_client.py` | CLI‑клиент для взаимодействия с агентом из терминала. |
|
||||||
|
|
||||||
|
## Запуск каждого файла
|
||||||
|
|
||||||
|
### 1️⃣ `rag_agent.py`
|
||||||
|
|
||||||
|
```bash
|
||||||
|
python rag_agent.py
|
||||||
|
```
|
||||||
|
|
||||||
|
> Скрипт инициализирует агента, добавляет в него инструменты и ожидает пользовательский ввод через `input()`.
|
||||||
|
|
||||||
|
### 2️⃣ `vector_store.py`
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Пример использования из REPL или другого скрипта
|
||||||
|
from vector_store import QdrantStore
|
||||||
|
|
||||||
|
store = QdrantStore()
|
||||||
|
store.add_document("Документ о Python", "Python – язык программирования.")
|
||||||
|
results = store.search("что такое Python")
|
||||||
|
print(results)
|
||||||
|
```
|
||||||
|
|
||||||
|
### 3️⃣ `tools.py`
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Функции можно импортировать и использовать в агенте
|
||||||
|
from tools import search_knowledge_base, add_to_knowledge_base
|
||||||
|
|
||||||
|
search_knowledge_base("Python", max_results=5)
|
||||||
|
add_to_knowledge_base("Новый контент", "Заголовок")
|
||||||
|
```
|
||||||
|
|
||||||
|
### 4️⃣ `init_loader.py`
|
||||||
|
|
||||||
|
```bash
|
||||||
|
python init_loader.py
|
||||||
|
```
|
||||||
|
|
||||||
|
> Скрипт читает файлы из папки `data/` и загружает их в Qdrant. Убедитесь, что каталог существует.
|
||||||
|
|
||||||
|
### 5️⃣ `cli_client.py`
|
||||||
|
|
||||||
|
```bash
|
||||||
|
python cli_client.py "Какой язык программирования лучше?"
|
||||||
|
```
|
||||||
|
|
||||||
|
> CLI‑клиент отправляет запрос агенту и выводит ответ в терминал.
|
||||||
|
|
||||||
|
## Пример использования
|
||||||
|
|
||||||
|
1. **Инициализация базы**
|
||||||
|
```bash
|
||||||
|
python init_loader.py
|
||||||
|
```
|
||||||
|
|
||||||
|
2. **Запуск агента**
|
||||||
|
```bash
|
||||||
|
python rag_agent.py
|
||||||
|
```
|
||||||
|
Введите вопрос, например:
|
||||||
|
```
|
||||||
|
Какой язык программирования лучше для веб‑разработки?
|
||||||
|
```
|
||||||
|
|
||||||
|
3. **CLI‑клиент**
|
||||||
|
```bash
|
||||||
|
python cli_client.py "Что такое Qdrant?"
|
||||||
|
```
|
||||||
|
|
||||||
|
## Тесты (опционально)
|
||||||
|
|
||||||
|
```bash
|
||||||
|
pip install pytest
|
||||||
|
pytest tests/
|
||||||
|
```
|
||||||
|
|
||||||
|
> В папке `tests/` находятся простые unit‑тесты для модуля `vector_store`.
|
||||||
|
|
||||||
|
## Поддержка и вопросы
|
||||||
|
|
||||||
|
- **Проблема с подключением к Qdrant** – убедитесь, что контейнер запущен и доступен по адресу `http://localhost:6333`.
|
||||||
|
- **Ошибка при загрузке модели Ollama** – проверьте, что модели скачаны (`ollama list`).
|
||||||
|
|
||||||
|
## Лицензия
|
||||||
|
|
||||||
|
MIT © 2026
|
||||||
Reference in New Issue
Block a user