81 lines
4.2 KiB
Markdown
81 lines
4.2 KiB
Markdown
# Агент с RAG‑памятью
|
||
|
||
## Описание проекта
|
||
`solution.py` реализует простого чат‑бота на основе **RAG** (Retrieval‑Augmented Generation) – он умеет отвечать на вопросы, используя внешние документы как источник знаний.
|
||
|
||
Основные компоненты:
|
||
- **FastAPI + OpenAI API wrapper** – быстрый HTTP‑сервер и удобный клиент к OpenAI.
|
||
- **LangChain** – библиотека для построения цепочек вопросов‑ответов с retrieval‑поддержкой.
|
||
- **Qdrant** – векторное хранилище, где сохраняются эмбеддинги документов.
|
||
- **rich** – красивый вывод в терминале.
|
||
|
||
### Как это работает
|
||
1. Скрипт загружает все файлы из указанной папки (`--docs-dir`).
|
||
2. Для каждого документа генерируются эмбеддинги при помощи модели OpenAI (по умолчанию `text-embedding-ada-002`).
|
||
3. Эмбеддинги сохраняются в Qdrant.
|
||
4. Создаётся цепочка `RetrievalQA`, которая сначала ищет релевантные документы, а затем генерирует ответ с помощью GPT‑модели (`gpt-3.5-turbo` по умолчанию).
|
||
5. Через CLI можно задавать вопросы – бот выводит найденный контекст и финальный ответ.
|
||
|
||
## Установка зависимостей
|
||
|
||
```bash
|
||
# Создайте виртуальное окружение (рекомендуется)
|
||
python -m venv .venv
|
||
source .venv/bin/activate # Windows: .venv\Scripts\activate
|
||
|
||
# Установите все необходимые пакеты
|
||
pip install fastapi uvicorn langchain qdrant-client openai rich
|
||
```
|
||
|
||
> **Важно**
|
||
> Для работы с OpenAI понадобится переменная окружения `OPENAI_API_KEY`.
|
||
> ```bash
|
||
> export OPENAI_API_KEY="sk-..."
|
||
> ```
|
||
|
||
## Запуск
|
||
|
||
```bash
|
||
# Предположим, что у вас есть папка docs/ со статьями в формате .txt/.md
|
||
python solution.py --docs-dir ./docs
|
||
```
|
||
|
||
### Параметры командной строки
|
||
|
||
| Аргумент | Тип | По умолчанию | Описание |
|
||
|----------|-----|--------------|----------|
|
||
| `--docs-dir` | str | `./docs` | Путь к папке с документами. |
|
||
| `--qdrant-url` | str | `http://localhost:6333` | URL сервера Qdrant. |
|
||
| `--openai-model` | str | `text-embedding-ada-002` | Модель для эмбеддингов. |
|
||
| `--llm-model` | str | `gpt-3.5-turbo` | Модель генерации ответов. |
|
||
|
||
> **Примечание**
|
||
> Если Qdrant не запущен, скрипт автоматически создаст коллекцию с именем `rag_collection`.
|
||
|
||
## Пример использования
|
||
|
||
```bash
|
||
$ python solution.py --docs-dir ./docs
|
||
[2026-05-28 12:00:00] INFO: Загружаю документы из /home/user/docs...
|
||
[2026-05-28 12:00:02] INFO: Создаю эмбеддинги для 5 документов...
|
||
[2026-05-28 12:00:10] INFO: Сохраняю векторные представления в Qdrant...
|
||
[2026-05-28 12:00:11] INFO: Инициализирую цепочку RetrievalQA...
|
||
|
||
Введите ваш вопрос (Ctrl+C для выхода):
|
||
> Какой язык программирования использует FastAPI?
|
||
Контекст:
|
||
"FastAPI is a modern, fast web framework for building APIs with Python."
|
||
Ответ:
|
||
FastAPI uses the Python programming language.
|
||
```
|
||
|
||
## Что дальше?
|
||
|
||
- Добавить поддержку других форматов документов (`.pdf`, `.docx`).
|
||
- Настроить кэширование ответов для ускорения работы.
|
||
- Интегрировать с веб‑интерфейсом через FastAPI.
|
||
|
||
---
|
||
|
||
**Автор:** [Ваше имя]
|
||
**Дата создания:** 28 мая 2026 г. |