b68eb03497
revert Delete directory 'solutions'
169 lines
5.8 KiB
Markdown
169 lines
5.8 KiB
Markdown
# Агент с RAG‑памятью
|
||
|
||
## Описание проекта
|
||
Проект реализует **AI‑агента**, способного хранить и извлекать знания из локальной векторной базы Qdrant при помощи Ollama (LLM + эмбеддинги).
|
||
Основные возможности:
|
||
|
||
- Семантический поиск по базе знаний (`search_knowledge_base`).
|
||
- Добавление новых документов в базу (`add_to_knowledge_base`).
|
||
- Автоматическое разбиение больших текстов на чанки.
|
||
- Интеграция с LangChain для создания агента, использующего RAG‑память.
|
||
|
||
## Стек технологий
|
||
| Технология | Версия | Зачем |
|
||
|------------|--------|-------|
|
||
| Python | 3.10+ | Язык разработки |
|
||
| Qdrant | - | Векторная база данных |
|
||
| Ollama | - | Локальные LLM и эмбеддинги (`llama3`, `nomic-embed-text`) |
|
||
| LangChain | - | Фреймворк для агентов, RAG и инструментов |
|
||
|
||
## Установка зависимостей
|
||
|
||
```bash
|
||
# 1️⃣ Установить Ollama (если ещё не установлен)
|
||
# https://ollama.com/download
|
||
|
||
# Загрузить модели
|
||
ollama pull llama3
|
||
ollama pull nomic-embed-text
|
||
|
||
# 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
|
||
```
|
||
|
||
> **Важно**
|
||
> Qdrant должен быть запущен локально (по умолчанию `http://localhost:6333`).
|
||
> Если у вас нет Docker‑образа, можно установить его через:
|
||
> ```bash
|
||
> docker run -p 6333:6333 qdrant/qdrant
|
||
> ```
|
||
|
||
## Структура проекта
|
||
|
||
| Файл | Описание |
|
||
|------|----------|
|
||
| `rag_agent.py` | Основная логика агента и RAG‑инструментов. |
|
||
| `qdrant_client.py` | Обёртка над QdrantVectorStore (инициализация, добавление, поиск). |
|
||
| `chunker.py` | Модуль разбиения текста на чанки. |
|
||
| `init_loader.py` | Скрипт для первичной загрузки документов в базу. |
|
||
| `cli_client.py` | CLI‑интерфейс для взаимодействия с агентом. |
|
||
|
||
## Как запустить каждый файл
|
||
|
||
### 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
|
||
python init_loader.py
|
||
```
|
||
|
||
---
|
||
|
||
### 5️⃣ `cli_client.py`
|
||
CLI‑интерфейс для общения с агентом.
|
||
|
||
```bash
|
||
python cli_client.py
|
||
```
|
||
|
||
> Введите любой вопрос, и агент ответит, используя RAG‑память.
|
||
|
||
## Пример использования
|
||
|
||
1. **Инициализируйте базу знаний** (если ещё не сделано):
|
||
|
||
```bash
|
||
python init_loader.py
|
||
```
|
||
|
||
2. **Запустите CLI‑клиент**:
|
||
|
||
```bash
|
||
python cli_client.py
|
||
```
|
||
|
||
3. **Взаимодействуйте с агентом**:
|
||
|
||
```
|
||
> Какой был первый президент России?
|
||
Ответ: Первый президент Российской Федерации — Борис Ельцин.
|
||
```
|
||
|
||
4. **Добавьте новый документ вручную** (через `rag_agent.py` или любой другой скрипт):
|
||
|
||
```python
|
||
from rag_agent import add_to_knowledge_base
|
||
|
||
content = "Python – язык программирования, созданный Гвидо ван Россумом."
|
||
title = "О Python"
|
||
add_to_knowledge_base(content=content, title=title)
|
||
```
|
||
|
||
5. **Проверьте поиск**:
|
||
|
||
```python
|
||
from rag_agent import search_knowledge_base
|
||
|
||
results = search_knowledge_base(query="что такое python", max_results=3)
|
||
for r in results:
|
||
print(r.page_content[:200])
|
||
```
|
||
|
||
## Тесты и отладка
|
||
|
||
```bash
|
||
# Установить pytest (если нужен)
|
||
pip install pytest
|
||
|
||
# Запустить тесты (если есть)
|
||
pytest tests/
|
||
```
|
||
|
||
> В проекте пока нет автоматических тестов, но вы можете добавить их в папку `tests/`.
|
||
|
||
## FAQ
|
||
|
||
| Вопрос | Ответ |
|
||
|--------|-------|
|
||
| **Как изменить модель Ollama?** | Измените параметр `model` в `OllamaEmbeddings` и `OllamaLLM`. |
|
||
| **Можно ли использовать удалённый Qdrant?** | Да, укажите нужный URL при создании `KnowledgeBase`. |
|
||
| **Что делать, если база пустая?** | Запустите `init_loader.py` или добавьте документы через `add_to_knowledge_base`. |
|
||
|
||
## Лицензия
|
||
MIT © 2026
|
||
|
||
--- |