Агент с RAG-памятью: README.md
This commit is contained in:
@@ -1,103 +1,114 @@
|
|||||||
# Агент с RAG‑памятью
|
# Агент с RAG‑памятью
|
||||||
|
|
||||||
**Краткое описание**
|
**Краткое описание**
|
||||||
Проект реализует простого чат‑бота на основе Retrieval‑Augmented Generation (RAG).
|
|
||||||
Бот хранит документы в векторном хранилище Qdrant, извлекает релевантные фрагменты при помощи эмбеддингов OpenAI и генерирует ответы с помощью модели GPT‑4 (или любой другой LLM, поддерживаемой LangChain).
|
|
||||||
|
|
||||||
---
|
Проект реализует чат‑бота на основе Retrieval‑Augmented Generation (RAG), который использует локальный векторный поиск через Qdrant и генерацию текста/ответов от Ollama.
|
||||||
|
Бот умеет:
|
||||||
|
|
||||||
|
- хранить документы в Qdrant, индексировать их с помощью модели `nomic-embed-text`;
|
||||||
|
- при запросе пользователя искать релевантные фрагменты из базы;
|
||||||
|
- генерировать ответ на основе найденных данных и собственного контекста через модель `llama3` (Ollama).
|
||||||
|
|
||||||
|
## Предварительные требования
|
||||||
|
|
||||||
|
| Компонент | Версия / Минимальная версия | Как установить |
|
||||||
|
|-----------|-----------------------------|----------------|
|
||||||
|
| **Python** | 3.10+ | `python -m venv .venv && source .venv/bin/activate` |
|
||||||
|
| **Ollama** | Любая актуальная версия | [Официальная инструкция](https://ollama.com/download) |
|
||||||
|
| **Qdrant** | 1.x (Docker рекомендуется) | `docker run -p 6333:6333 qdrant/qdrant:latest` |
|
||||||
|
| **LangChain** | 0.2+ | Устанавливается через `requirements.txt` |
|
||||||
|
|
||||||
|
> ⚠️ Перед запуском убедитесь, что Ollama запущен и модели `llama3` и `nomic-embed-text` доступны:
|
||||||
|
> ```bash
|
||||||
|
> ollama pull llama3
|
||||||
|
> ollama pull nomic-embed-text
|
||||||
|
> ```
|
||||||
|
|
||||||
## Установка
|
## Установка
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# Клонируйте репозиторий
|
# Клонируйте репозиторий (если ещё не сделано)
|
||||||
git clone https://github.com/yourusername/rag-agent.git
|
git clone https://github.com/yourname/rag-agent.git
|
||||||
cd rag-agent
|
cd rag-agent
|
||||||
|
|
||||||
# Создайте виртуальное окружение (необязательно, но рекомендуется)
|
# Создайте и активируйте виртуальное окружение
|
||||||
python -m venv venv
|
python -m venv .venv
|
||||||
source venv/bin/activate # Windows: venv\Scripts\activate
|
source .venv/bin/activate # Windows: .venv\Scripts\activate
|
||||||
|
|
||||||
# Установите зависимости
|
# Установите зависимости
|
||||||
pip install -r requirements.txt
|
pip install -r requirements.txt
|
||||||
```
|
```
|
||||||
|
|
||||||
> **Важно**
|
## Запуск файлов
|
||||||
> - Для работы с OpenAI вам понадобится переменная окружения `OPENAI_API_KEY`.
|
|
||||||
> - Для Qdrant можно использовать локальный сервер (порт 6333) или облачный сервис.
|
|
||||||
> - Если вы хотите использовать другой LLM, поменяйте параметры в `solution.py`.
|
|
||||||
|
|
||||||
---
|
### 1. `agent.py` – основной скрипт бота
|
||||||
|
|
||||||
## Запуск
|
|
||||||
|
|
||||||
### 1. Инициализация векторного хранилища
|
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
python solution.py init
|
python agent.py --config config.yaml
|
||||||
```
|
```
|
||||||
|
|
||||||
> Команда создаст коллекцию `documents` в Qdrant и загрузит в неё все файлы из папки `data/`.
|
*Параметры*
|
||||||
> Для больших наборов данных можно изменить `chunk_size` и `chunk_overlap` в `RecursiveCharacterTextSplitter`.
|
- `--config`: путь к YAML‑файлу с настройками (порт Qdrant, имя коллекции и т.д.).
|
||||||
|
|
||||||
### 2. Запуск FastAPI сервера
|
> Если файл конфигурации не указан, используются значения по умолчанию.
|
||||||
|
|
||||||
|
### 2. `client.py` – простой клиент для взаимодействия
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
uvicorn solution:app --reload
|
python client.py --host http://localhost:8000
|
||||||
```
|
```
|
||||||
|
|
||||||
> После запуска сервер будет доступен по адресу `http://127.0.0.1:8000`.
|
*Параметры*
|
||||||
> Swagger UI: `http://127.0.0.1:8000/docs`.
|
- `--host`: адрес API‑сервера (по умолчанию `http://localhost:8000`).
|
||||||
|
|
||||||
### 3. Отправка запроса к боту
|
> Клиент отправляет запросы к REST‑API, реализованному в `agent.py`.
|
||||||
|
|
||||||
```bash
|
|
||||||
curl -X POST "http://127.0.0.1:8000/chat" \
|
|
||||||
-H "Content-Type: application/json" \
|
|
||||||
-d '{"question":"Какой климат в Сибири?"}'
|
|
||||||
```
|
|
||||||
|
|
||||||
Ответ будет в формате:
|
|
||||||
|
|
||||||
```json
|
|
||||||
{
|
|
||||||
"answer": "Сибирь характеризуется холодным континентальным климатом..."
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## Пример использования
|
## Пример использования
|
||||||
|
|
||||||
```python
|
1. **Инициализация базы**
|
||||||
import requests
|
```bash
|
||||||
|
python agent.py --init-db
|
||||||
|
```
|
||||||
|
Это создаст коллекцию Qdrant и загрузит документы из папки `data/`.
|
||||||
|
|
||||||
url = "http://127.0.0.1:8000/chat"
|
2. **Запуск бота**
|
||||||
payload = {"question": "Какие книги рекомендованы для изучения Python?"}
|
```bash
|
||||||
response = requests.post(url, json=payload)
|
python agent.py
|
||||||
print(response.json()["answer"])
|
|
||||||
```
|
```
|
||||||
|
|
||||||
> Вывод:
|
3. **Отправка запроса через клиент**
|
||||||
> ```
|
```bash
|
||||||
> Для начала изучения Python рекомендую следующие книги: "Automate the Boring Stuff with Python" и "Python Crash Course". Если вы хотите углубиться в продвинутые темы, обратите внимание на "Fluent Python" и "Effective Python".
|
python client.py --query "Какой прогноз погоды на завтра?"
|
||||||
> ```
|
```
|
||||||
|
Ответ будет выглядеть примерно так:
|
||||||
|
```
|
||||||
|
AI: На основе данных из базы, ожидается облачность с температурой около 18°C.
|
||||||
|
```
|
||||||
|
|
||||||
---
|
4. **Прямое взаимодействие**
|
||||||
|
Внутри `agent.py` можно вызвать функцию `run_agent()` и передать ей строку запроса:
|
||||||
|
```python
|
||||||
|
from agent import run_agent
|
||||||
|
|
||||||
|
answer = run_agent("Расскажи про историю Qdrant")
|
||||||
|
print(answer)
|
||||||
|
```
|
||||||
|
|
||||||
## Структура проекта
|
## Структура проекта
|
||||||
|
|
||||||
```
|
```
|
||||||
rag-agent/
|
rag-agent/
|
||||||
├── data/ # Папка с исходными документами
|
├── agent.py # Основной скрипт, реализующий RAG‑бота
|
||||||
├── solution.py # Основной скрипт
|
├── client.py # Простой клиент для общения с ботом
|
||||||
├── requirements.txt
|
├── requirements.txt # Зависимости Python
|
||||||
└── README.md
|
├── config.yaml # Конфигурация (пример)
|
||||||
|
└── data/ # Папка с исходными документами
|
||||||
```
|
```
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## Лицензия
|
## Лицензия
|
||||||
|
|
||||||
MIT © 2026
|
MIT License – см. файл `LICENSE`.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
*Если возникнут вопросы, создайте issue в репозитории.*
|
||||||
Reference in New Issue
Block a user