Агент с RAG‑памятью: README.md
This commit is contained in:
@@ -1,35 +1,43 @@
|
|||||||
# Агент с RAG‑памятью
|
# Агент с RAG‑памятью
|
||||||
|
|
||||||
## Описание проекта
|
## Описание проекта
|
||||||
|
Проект реализует **AI‑агента**, способного хранить и извлекать знания из локальной векторной базы Qdrant при помощи Ollama (LLM + эмбеддинги).
|
||||||
|
Основные возможности:
|
||||||
|
|
||||||
Проект реализует **AI‑агента**, способного хранить, искать и использовать знания в локальной векторной базе данных Qdrant при помощи Ollama (LLM `llama3` и эмбеддинг‑модель `nomic-embed-text`).
|
- Семантический поиск по базе знаний (`search_knowledge_base`).
|
||||||
Агент использует LangChain для построения цепочки действий, а также предоставляет два инструмента:
|
- Добавление новых документов в базу (`add_to_knowledge_base`).
|
||||||
|
- Автоматическое разбиение больших текстов на чанки.
|
||||||
| Инструмент | Описание |
|
- Интеграция с LangChain для создания агента, использующего RAG‑память.
|
||||||
|------------|----------|
|
|
||||||
| `search_knowledge_base(query, max_results)` | Семантический поиск по базе знаний. |
|
|
||||||
| `add_to_knowledge_base(content, title)` | Добавление нового документа в базу (с чанкингом и эмбеддингами). |
|
|
||||||
|
|
||||||
## Стек технологий
|
## Стек технологий
|
||||||
|
| Технология | Версия | Зачем |
|
||||||
- **Python 3.10+**
|
|------------|--------|-------|
|
||||||
- **Qdrant** – локальная векторная база данных
|
| Python | 3.10+ | Язык разработки |
|
||||||
- **Ollama** – LLM `llama3` + эмбеддинги `nomic-embed-text`
|
| Qdrant | - | Векторная база данных |
|
||||||
- **LangChain** – фреймворк для агентов, RAG и инструментов
|
| Ollama | - | Локальные LLM и эмбеддинги (`llama3`, `nomic-embed-text`) |
|
||||||
|
| LangChain | - | Фреймворк для агентов, RAG и инструментов |
|
||||||
|
|
||||||
## Установка зависимостей
|
## Установка зависимостей
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# 1. Ollama (LLM и эмбеддинг‑модели)
|
# 1️⃣ Установить Ollama (если ещё не установлен)
|
||||||
|
# https://ollama.com/download
|
||||||
|
|
||||||
|
# Загрузить модели
|
||||||
ollama pull llama3
|
ollama pull llama3
|
||||||
ollama pull nomic-embed-text
|
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
|
pip install langchain langchain-qdrant langchain-ollama
|
||||||
```
|
```
|
||||||
|
|
||||||
> **Важно**: Qdrant должен быть запущен локально (по умолчанию на `localhost:6333`).
|
> **Важно**
|
||||||
> Если вы используете Docker, можно быстро поднять контейнер:
|
> Qdrant должен быть запущен локально (по умолчанию `http://localhost:6333`).
|
||||||
|
> Если у вас нет Docker‑образа, можно установить его через:
|
||||||
> ```bash
|
> ```bash
|
||||||
> docker run -p 6333:6333 qdrant/qdrant
|
> docker run -p 6333:6333 qdrant/qdrant
|
||||||
> ```
|
> ```
|
||||||
@@ -38,87 +46,124 @@ pip install langchain langchain-qdrant langchain-ollama
|
|||||||
|
|
||||||
| Файл | Описание |
|
| Файл | Описание |
|
||||||
|------|----------|
|
|------|----------|
|
||||||
| `rag_agent.py` | Основная логика агента и его инструменты. |
|
| `rag_agent.py` | Основная логика агента и RAG‑инструментов. |
|
||||||
| `qdrant_client.py` | Обёртка над QdrantVectorStore: инициализация, добавление документов, поиск. |
|
| `qdrant_client.py` | Обёртка над QdrantVectorStore (инициализация, добавление, поиск). |
|
||||||
| `chunker.py` | Модуль для разбиения текста на чанки (RecursiveCharacterTextSplitter). |
|
| `chunker.py` | Модуль разбиения текста на чанки. |
|
||||||
| `init_loader.py` | Скрипт загрузки начальных данных в базу. |
|
| `init_loader.py` | Скрипт для первичной загрузки документов в базу. |
|
||||||
| `cli_client.py` | CLI‑интерфейс для взаимодействия с агентом из командной строки. |
|
| `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
|
```bash
|
||||||
python init_loader.py
|
python init_loader.py
|
||||||
```
|
```
|
||||||
|
|
||||||
> Скрипт `init_loader.py` читает файлы из папки `data/`, разбивает их на чанки и сохраняет в Qdrant.
|
---
|
||||||
|
|
||||||
### 2. Запуск CLI‑клиента
|
### 5️⃣ `cli_client.py`
|
||||||
|
CLI‑интерфейс для общения с агентом.
|
||||||
CLI позволяет задавать вопросы агенту, а также добавлять новые документы:
|
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
python cli_client.py
|
python cli_client.py
|
||||||
```
|
```
|
||||||
|
|
||||||
#### Примеры использования
|
> Введите любой вопрос, и агент ответит, используя RAG‑память.
|
||||||
|
|
||||||
| Команда | Описание |
|
## Пример использования
|
||||||
|---------|----------|
|
|
||||||
| `ask "Какой смысл жизни?"` | Агент выполнит поиск в базе и сформирует ответ. |
|
|
||||||
| `add "data/new_doc.txt" "Новый документ"` | Добавляет новый файл в базу знаний (с чанкингом). |
|
|
||||||
|
|
||||||
### 3. Запуск агента напрямую
|
1. **Инициализируйте базу знаний** (если ещё не сделано):
|
||||||
|
|
||||||
Если вам нужен только агент без CLI, можно импортировать его из `rag_agent.py`:
|
```bash
|
||||||
|
python init_loader.py
|
||||||
|
```
|
||||||
|
|
||||||
|
2. **Запустите CLI‑клиент**:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
python cli_client.py
|
||||||
|
```
|
||||||
|
|
||||||
|
3. **Взаимодействуйте с агентом**:
|
||||||
|
|
||||||
|
```
|
||||||
|
> Какой был первый президент России?
|
||||||
|
Ответ: Первый президент Российской Федерации — Борис Ельцин.
|
||||||
|
```
|
||||||
|
|
||||||
|
4. **Добавьте новый документ вручную** (через `rag_agent.py` или любой другой скрипт):
|
||||||
|
|
||||||
```python
|
```python
|
||||||
from rag_agent import agent_executor
|
from rag_agent import add_to_knowledge_base
|
||||||
|
|
||||||
response = agent_executor.invoke({"input": "Расскажи о Qdrant"})
|
content = "Python – язык программирования, созданный Гвидо ван Россумом."
|
||||||
print(response["output"])
|
title = "О Python"
|
||||||
|
add_to_knowledge_base(content=content, title=title)
|
||||||
```
|
```
|
||||||
|
|
||||||
## Пример кода (CLI)
|
5. **Проверьте поиск**:
|
||||||
|
|
||||||
```bash
|
```python
|
||||||
$ python cli_client.py ask "Что такое RAG?"
|
from rag_agent import search_knowledge_base
|
||||||
Agent: Searching knowledge base...
|
|
||||||
Result: ...
|
results = search_knowledge_base(query="что такое python", max_results=3)
|
||||||
Answer: ...
|
for r in results:
|
||||||
|
print(r.page_content[:200])
|
||||||
```
|
```
|
||||||
|
|
||||||
## Настройка переменных окружения
|
## Тесты и отладка
|
||||||
|
|
||||||
| Переменная | Значение по умолчанию | Описание |
|
|
||||||
|------------|-----------------------|----------|
|
|
||||||
| `QDRANT_HOST` | `localhost` | Хост Qdrant. |
|
|
||||||
| `QDRANT_PORT` | `6333` | Порт Qdrant. |
|
|
||||||
| `QDRANT_COLLECTION` | `rag_collection` | Имя коллекции в Qdrant. |
|
|
||||||
| `EMBEDDING_MODEL` | `nomic-embed-text` | Модель эмбеддингов. |
|
|
||||||
| `LLM_MODEL` | `llama3` | Модель LLM. |
|
|
||||||
|
|
||||||
## Тесты
|
|
||||||
|
|
||||||
Тесты находятся в папке `tests/`. Запустить их можно так:
|
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
|
# Установить pytest (если нужен)
|
||||||
|
pip install pytest
|
||||||
|
|
||||||
|
# Запустить тесты (если есть)
|
||||||
pytest tests/
|
pytest tests/
|
||||||
```
|
```
|
||||||
|
|
||||||
> Убедитесь, что Qdrant и Ollama запущены перед запуском тестов.
|
> В проекте пока нет автоматических тестов, но вы можете добавить их в папку `tests/`.
|
||||||
|
|
||||||
|
## FAQ
|
||||||
|
|
||||||
|
| Вопрос | Ответ |
|
||||||
|
|--------|-------|
|
||||||
|
| **Как изменить модель Ollama?** | Измените параметр `model` в `OllamaEmbeddings` и `OllamaLLM`. |
|
||||||
|
| **Можно ли использовать удалённый Qdrant?** | Да, укажите нужный URL при создании `KnowledgeBase`. |
|
||||||
|
| **Что делать, если база пустая?** | Запустите `init_loader.py` или добавьте документы через `add_to_knowledge_base`. |
|
||||||
|
|
||||||
## Лицензия
|
## Лицензия
|
||||||
|
MIT © 2026
|
||||||
MIT License – см. файл `LICENSE`.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
**Примечание:**
|
|
||||||
- Для работы с большим объёмом данных рекомендуется использовать более мощные модели эмбеддингов и LLM.
|
|
||||||
- Если вы хотите использовать облачные сервисы вместо локальных, замените импорты и конфигурацию в файлах проекта.
|
|
||||||
|
|
||||||
---
|
---
|
||||||
Reference in New Issue
Block a user