Files

4.0 KiB
Raw Permalink Blame History

Агент с RAG‑памятью

Агент – это небольшое веб‑приложение на FastMCP, которое использует RetrievalAugmented 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, например, добавив авторизацию или хранение истории диалогов.

Автор: Ваше имя
Дата: 20260528