Агент с RAG‑памятью: README.md
This commit is contained in:
@@ -1,169 +1,115 @@
|
|||||||
# Агент с RAG‑памятью
|
# Агент с RAG‑памятью
|
||||||
|
|
||||||
## Описание проекта
|
## Описание проекта
|
||||||
Проект реализует **AI‑агента**, способного хранить и извлекать знания из локальной векторной базы Qdrant при помощи Ollama (LLM + эмбеддинги).
|
|
||||||
Основные возможности:
|
|
||||||
|
|
||||||
- Семантический поиск по базе знаний (`search_knowledge_base`).
|
`solution.py` реализует AI‑агента, способного хранить и извлекать знания из локальной векторной базы Qdrant при помощи Ollama (LLM `llama3` и эмбеддинговая модель `nomic-embed-text`).
|
||||||
- Добавление новых документов в базу (`add_to_knowledge_base`).
|
Агент использует LangChain для:
|
||||||
- Автоматическое разбиение больших текстов на чанки.
|
|
||||||
- Интеграция с LangChain для создания агента, использующего RAG‑память.
|
* **RAG** – Retrieval‑Augmented Generation
|
||||||
|
* Инструменты поиска (`search_knowledge_base`) и добавления (`add_to_knowledge_base`) в базу знаний
|
||||||
|
* Чанкинга больших документов через `RecursiveCharacterTextSplitter`
|
||||||
|
* Взаимодействия с Qdrant через `QdrantVectorStore`
|
||||||
|
|
||||||
## Стек технологий
|
## Стек технологий
|
||||||
| Технология | Версия | Зачем |
|
|
||||||
|------------|--------|-------|
|
| Технология | Версия |
|
||||||
| Python | 3.10+ | Язык разработки |
|
|------------|--------|
|
||||||
| Qdrant | - | Векторная база данных |
|
| Python | 3.10+ |
|
||||||
| Ollama | - | Локальные LLM и эмбеддинги (`llama3`, `nomic-embed-text`) |
|
| Ollama | 0.1+ |
|
||||||
| LangChain | - | Фреймворк для агентов, RAG и инструментов |
|
| Qdrant | 1.x |
|
||||||
|
| LangChain | 0.2+ |
|
||||||
|
|
||||||
## Установка зависимостей
|
## Установка зависимостей
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# 1️⃣ Установить Ollama (если ещё не установлен)
|
# 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 должен быть запущен локально (по умолчанию `http://localhost:6333`).
|
> Qdrant должен быть запущен локально (по умолчанию `localhost:6333`).
|
||||||
> Если у вас нет Docker‑образа, можно установить его через:
|
> Если у вас нет Docker, установите Qdrant через официальную инструкцию:
|
||||||
> ```bash
|
> ```bash
|
||||||
> docker run -p 6333:6333 qdrant/qdrant
|
> docker run -p 6333:6333 qdrant/qdrant
|
||||||
> ```
|
> ```
|
||||||
|
|
||||||
|
## Запуск
|
||||||
|
|
||||||
|
```bash
|
||||||
|
python solution.py --help
|
||||||
|
```
|
||||||
|
|
||||||
|
### Основные команды
|
||||||
|
|
||||||
|
| Флаг | Описание |
|
||||||
|
|------|----------|
|
||||||
|
| `--add FILE` | Добавить документ из файла в базу знаний |
|
||||||
|
| `--search QUERY [--max N]` | Выполнить семантический поиск по базе |
|
||||||
|
| `--agent` | Запустить интерактивного агента, который сам будет использовать RAG |
|
||||||
|
|
||||||
|
#### Пример добавления документа
|
||||||
|
|
||||||
|
```bash
|
||||||
|
python solution.py --add docs/guide.txt
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Пример поиска
|
||||||
|
|
||||||
|
```bash
|
||||||
|
python solution.py --search "Как настроить Qdrant?" --max 5
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Запуск интерактивного агента
|
||||||
|
|
||||||
|
```bash
|
||||||
|
python solution.py --agent
|
||||||
|
```
|
||||||
|
|
||||||
|
После запуска агент будет ждать ваших вопросов и отвечать, используя найденную информацию из базы.
|
||||||
|
|
||||||
|
## Пример использования в коде
|
||||||
|
|
||||||
|
```python
|
||||||
|
from langchain_ollama import ChatOllama
|
||||||
|
from langchain_qdrant import QdrantVectorStore
|
||||||
|
from langchain.text_splitter import RecursiveCharacterTextSplitter
|
||||||
|
from langchain.tools import tool
|
||||||
|
from langchain.agents import create_agent, AgentExecutor, Tool
|
||||||
|
from langchain.schema import Document
|
||||||
|
|
||||||
|
# Инициализация клиента Qdrant
|
||||||
|
store = QdrantVectorStore(
|
||||||
|
url="http://localhost:6333",
|
||||||
|
collection_name="knowledge_base",
|
||||||
|
embedding_function=OllamaEmbeddings(model="nomic-embed-text")
|
||||||
|
)
|
||||||
|
|
||||||
|
# Чанкинг текста
|
||||||
|
splitter = RecursiveCharacterTextSplitter(chunk_size=500, chunk_overlap=50)
|
||||||
|
docs = splitter.split_text("Многострочный текст...")
|
||||||
|
|
||||||
|
# Добавление в базу
|
||||||
|
store.add_documents([Document(page_content=d) for d in docs])
|
||||||
|
|
||||||
|
# Поиск
|
||||||
|
results = store.similarity_search_with_score("Как настроить Qdrant?", k=3)
|
||||||
|
|
||||||
|
for doc, score in results:
|
||||||
|
print(f"[{score:.2f}] {doc.page_content[:200]}...")
|
||||||
|
```
|
||||||
|
|
||||||
## Структура проекта
|
## Структура проекта
|
||||||
|
|
||||||
| Файл | Описание |
|
|
||||||
|------|----------|
|
|
||||||
| `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
|
|
||||||
```
|
```
|
||||||
|
project/
|
||||||
> Вы увидите вывод о работе инструментов: добавление документа, поиск по запросу и ответ агента.
|
├── solution.py # Основной скрипт
|
||||||
|
└── docs/ # Пример документов для добавления
|
||||||
---
|
|
||||||
|
|
||||||
### 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
|
|
||||||
|
|
||||||
---
|
MIT © 2026.
|
||||||
Reference in New Issue
Block a user