4.0 KiB
4.0 KiB
Агент с RAG‑памятью
Агент – это небольшое веб‑приложение на FastMCP, которое использует Retrieval‑Augmented Generation (RAG) для ответа на вопросы пользователя.
Векторное хранилище реализовано через Qdrant, а генерация текста выполняется моделью OpenAI.
📦 Установка зависимостей
# Создайте виртуальное окружение (рекомендуется)
python -m venv .venv
source .venv/bin/activate # Windows: .venv\Scripts\activate
# Установите зависимости из requirements.txt
pip install -r requirements.txt
requirements.txt содержит:
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, добавьте документы:
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️⃣ Запуск сервера
python solution.py
Сервер будет доступен по умолчанию на http://localhost:8000.
📄 API
| Метод | Путь | Описание |
|---|---|---|
GET / |
Главная страница | Возвращает простое приветствие. |
POST /ask |
Вопрос к агенту | Принимает JSON { "question": "<текст>" }. Возвращает ответ и список релевантных документов. |
Пример запроса
curl -X POST http://localhost:8000/ask \
-H "Content-Type: application/json" \
-d '{"question":"Какой сегодня день недели?"}'
Ответ:
{
"answer": "Сегодня четверг.",
"documents": [
{
"content": "...",
"metadata": { ... }
},
...
]
}
🧪 Пример использования в коде
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