Агент с RAG-памятью: README.md
This commit is contained in:
@@ -0,0 +1,127 @@
|
|||||||
|
# Агент с RAG‑памятью
|
||||||
|
|
||||||
|
**Агент** – это небольшое веб‑приложение на FastMCP, которое использует Retrieval‑Augmented 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, например, добавив авторизацию или хранение истории диалогов.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
**Автор:** *Ваше имя*
|
||||||
|
**Дата:** 2026‑05‑28
|
||||||
Reference in New Issue
Block a user