Files
dz/solutions/6a02e23da6fe2e4ac16acf65_Агент_с_RAG-памятью/README.md
T

127 lines
4.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Агент с RAG‑памятью
**Агент** – это небольшое веб‑приложение на FastMCP, которое использует RetrievalAugmented Generation (RAG) для ответа на вопросы пользователя.
Векторное хранилище реализовано через Qdrant, а генерация текста выполняется моделью OpenAI.
---
## 📦 Установка зависимостей
```bash
# Создайте виртуальное окружение (рекомендуется)
python -m venv .venv
source .venv/bin/activate # Windows: .venv\Scripts\activate
# Установите зависимости из requirements.txt
pip install -r requirements.txt
```
`requirements.txt` содержит:
```text
fastmcp==0.1.2 # лёгкий веб‑фреймворк
langchain==0.2.0 # библиотека для LLM и RAG
openai==1.3.5 # клиент OpenAI
qdrant-client==1.7.0 # клиент Qdrant
rich==13.6.0 # красивый вывод в консоль
```
> **Важно**:
> - Установите переменную окружения `OPENAI_API_KEY` с вашим ключом OpenAI.
> - Если вы используете удалённый сервер Qdrant, задайте `QDRANT_HOST` и `QDRANT_PORT`.
---
## 🚀 Запуск
### 1️⃣ Подготовка данных (опционально)
Если у вас ещё нет коллекции `rag_memory`, добавьте документы:
```python
from langchain.document_loaders import TextLoader
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain.vectorstores.qdrant import Qdrant
loader = TextLoader("path/to/your/docs.txt")
docs = loader.load()
text_splitter = RecursiveCharacterTextSplitter(chunk_size=500, chunk_overlap=50)
texts = text_splitter.split_documents(docs)
embeddings = OpenAIEmbeddings(openai_api_key=os.getenv("OPENAI_API_KEY"))
qdrant_store.add_texts(texts, embeddings=embeddings)
```
> Запустите этот скрипт один раз – он создаст коллекцию в Qdrant.
### 2️⃣ Запуск сервера
```bash
python solution.py
```
Сервер будет доступен по умолчанию на `http://localhost:8000`.
---
## 📄 API
| Метод | Путь | Описание |
|-------|------|----------|
| `GET /` | Главная страница | Возвращает простое приветствие. |
| `POST /ask` | Вопрос к агенту | Принимает JSON `{ "question": "<текст>" }`. Возвращает ответ и список релевантных документов. |
### Пример запроса
```bash
curl -X POST http://localhost:8000/ask \
-H "Content-Type: application/json" \
-d '{"question":"Какой сегодня день недели?"}'
```
Ответ:
```json
{
"answer": "Сегодня четверг.",
"documents": [
{
"content": "...",
"metadata": { ... }
},
...
]
}
```
---
## 🧪 Пример использования в коде
```python
import requests
question = "Кто написал «Войну и мир»?"
response = requests.post(
"http://localhost:8000/ask",
json={"question": question}
)
data = response.json()
print("Ответ:", data["answer"])
for doc in data["documents"]:
print("-" * 40)
print(doc["content"][:200]) # первые 200 символов
```
---
## 📚 Что дальше?
- Добавьте собственные документы в коллекцию Qdrant.
- Настройте `temperature` и другие параметры модели OpenAI для более креативных ответов.
- Расширьте API, например, добавив авторизацию или хранение истории диалогов.
---
**Автор:** *Ваше имя*
**Дата:** 20260528