124 lines
5.1 KiB
Markdown
124 lines
5.1 KiB
Markdown
# Агент с RAG‑памятью
|
||
|
||
## Описание проекта
|
||
|
||
Проект реализует **AI‑агента**, способного хранить, искать и использовать знания в локальной векторной базе данных Qdrant при помощи Ollama (LLM `llama3` и эмбеддинг‑модель `nomic-embed-text`).
|
||
Агент использует LangChain для построения цепочки действий, а также предоставляет два инструмента:
|
||
|
||
| Инструмент | Описание |
|
||
|------------|----------|
|
||
| `search_knowledge_base(query, max_results)` | Семантический поиск по базе знаний. |
|
||
| `add_to_knowledge_base(content, title)` | Добавление нового документа в базу (с чанкингом и эмбеддингами). |
|
||
|
||
## Стек технологий
|
||
|
||
- **Python 3.10+**
|
||
- **Qdrant** – локальная векторная база данных
|
||
- **Ollama** – LLM `llama3` + эмбеддинги `nomic-embed-text`
|
||
- **LangChain** – фреймворк для агентов, RAG и инструментов
|
||
|
||
## Установка зависимостей
|
||
|
||
```bash
|
||
# 1. Ollama (LLM и эмбеддинг‑модели)
|
||
ollama pull llama3
|
||
ollama pull nomic-embed-text
|
||
|
||
# 2. Python пакеты
|
||
pip install langchain langchain-qdrant langchain-ollama
|
||
```
|
||
|
||
> **Важно**: Qdrant должен быть запущен локально (по умолчанию на `localhost:6333`).
|
||
> Если вы используете Docker, можно быстро поднять контейнер:
|
||
> ```bash
|
||
> docker run -p 6333:6333 qdrant/qdrant
|
||
> ```
|
||
|
||
## Структура проекта
|
||
|
||
| Файл | Описание |
|
||
|------|----------|
|
||
| `rag_agent.py` | Основная логика агента и его инструменты. |
|
||
| `qdrant_client.py` | Обёртка над QdrantVectorStore: инициализация, добавление документов, поиск. |
|
||
| `chunker.py` | Модуль для разбиения текста на чанки (RecursiveCharacterTextSplitter). |
|
||
| `init_loader.py` | Скрипт загрузки начальных данных в базу. |
|
||
| `cli_client.py` | CLI‑интерфейс для взаимодействия с агентом из командной строки. |
|
||
|
||
## Как запустить
|
||
|
||
### 1. Инициализация базы (опционально)
|
||
|
||
Если вы хотите сразу наполнить базу тестовыми данными, выполните:
|
||
|
||
```bash
|
||
python init_loader.py
|
||
```
|
||
|
||
> Скрипт `init_loader.py` читает файлы из папки `data/`, разбивает их на чанки и сохраняет в Qdrant.
|
||
|
||
### 2. Запуск CLI‑клиента
|
||
|
||
CLI позволяет задавать вопросы агенту, а также добавлять новые документы:
|
||
|
||
```bash
|
||
python cli_client.py
|
||
```
|
||
|
||
#### Примеры использования
|
||
|
||
| Команда | Описание |
|
||
|---------|----------|
|
||
| `ask "Какой смысл жизни?"` | Агент выполнит поиск в базе и сформирует ответ. |
|
||
| `add "data/new_doc.txt" "Новый документ"` | Добавляет новый файл в базу знаний (с чанкингом). |
|
||
|
||
### 3. Запуск агента напрямую
|
||
|
||
Если вам нужен только агент без CLI, можно импортировать его из `rag_agent.py`:
|
||
|
||
```python
|
||
from rag_agent import agent_executor
|
||
|
||
response = agent_executor.invoke({"input": "Расскажи о Qdrant"})
|
||
print(response["output"])
|
||
```
|
||
|
||
## Пример кода (CLI)
|
||
|
||
```bash
|
||
$ python cli_client.py ask "Что такое RAG?"
|
||
Agent: Searching knowledge base...
|
||
Result: ...
|
||
Answer: ...
|
||
```
|
||
|
||
## Настройка переменных окружения
|
||
|
||
| Переменная | Значение по умолчанию | Описание |
|
||
|------------|-----------------------|----------|
|
||
| `QDRANT_HOST` | `localhost` | Хост Qdrant. |
|
||
| `QDRANT_PORT` | `6333` | Порт Qdrant. |
|
||
| `QDRANT_COLLECTION` | `rag_collection` | Имя коллекции в Qdrant. |
|
||
| `EMBEDDING_MODEL` | `nomic-embed-text` | Модель эмбеддингов. |
|
||
| `LLM_MODEL` | `llama3` | Модель LLM. |
|
||
|
||
## Тесты
|
||
|
||
Тесты находятся в папке `tests/`. Запустить их можно так:
|
||
|
||
```bash
|
||
pytest tests/
|
||
```
|
||
|
||
> Убедитесь, что Qdrant и Ollama запущены перед запуском тестов.
|
||
|
||
## Лицензия
|
||
|
||
MIT License – см. файл `LICENSE`.
|
||
|
||
---
|
||
|
||
**Примечание:**
|
||
- Для работы с большим объёмом данных рекомендуется использовать более мощные модели эмбеддингов и LLM.
|
||
- Если вы хотите использовать облачные сервисы вместо локальных, замените импорты и конфигурацию в файлах проекта.
|
||
|
||
--- |