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

Описание проекта

Проект реализует RAG‑агента (RetrievalAugmented Generation) на базе FastAPI и LangChain, который хранит документы векторно в Qdrant и использует OpenAI GPT‑4 для генерации ответов.

  • Векторизатор: OpenAIEmbeddings
  • Хранилище: Qdrant (локальный сервер или облачный)
  • Генерация: ChatOpenAI (GPT‑4, температура = 0)

API предоставляет один эндпоинт /ask, принимающий вопрос и возвращающий ответ, сформированный на основе найденных векторных документов.

Установка зависимостей

# Создайте виртуальное окружение (рекомендуется)
python -m venv .venv
source .venv/bin/activate   # Windows: .venv\Scripts\activate

# Установите зависимости из requirements.txt
pip install -r requirements.txt

requirements.txt

fastapi
uvicorn[standard]
pydantic
langchain
openai
qdrant-client
rich

Важно

  1. Запустите сервер Qdrant (локально: docker run -p 6333:6333 qdrant/qdrant, облачно – получите URL).
  2. Установите переменную окружения OPENAI_API_KEY с вашим ключом OpenAI.

Конфигурация

export QDRANT_URL="http://localhost:6333"          # адрес сервера Qdrant (по умолчанию)
export QDRANT_COLLECTION="rag_memory"             # имя коллекции в Qdrant
export OPENAI_API_KEY="sk-..."                    # ваш ключ OpenAI

Запуск приложения

uvicorn solution:app --reload

После запуска приложение будет доступно по адресу http://127.0.0.1:8000.
Swagger UI можно открыть в браузере по /docs.

Эндпоинты

Метод Путь Описание
POST /ask Принимает JSON с полем question (строка) и возвращает ответ GPT‑4.

Пример запроса

curl -X POST "http://127.0.0.1:8000/ask" \
     -H "Content-Type: application/json" \
     -d '{"question":"Какой у меня возраст?"}'

Ожидаемый ответ

{
  "answer": "Ваш возраст составляет 30 лет."
}

Как добавить документы в память

Для того чтобы агент мог отвечать на вопросы, необходимо загрузить документы в Qdrant. Это можно сделать вручную через API Qdrant или написать скрипт:

from langchain.document_loaders import TextLoader
from langchain.embeddings.openai import OpenAIEmbeddings
from langchain.vectorstores.qdrant import Qdrant

embeddings = OpenAIEmbeddings(openai_api_key=OPENAI_API_KEY)
vectorstore = Qdrant(
    client=None,
    collection_name="rag_memory",
    embeddings=embeddings,
    url="http://localhost:6333"
)

loader = TextLoader("path/to/your/document.txt")
docs = loader.load()
vectorstore.add_documents(docs)

После добавления документов агент сможет использовать их при генерации ответов.

Пример использования в коде

import requests

response = requests.post(
    "http://127.0.0.1:8000/ask",
    json={"question": "Что такое RAG?"}
)
print(response.json()["answer"])

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

S
Description
Решения домашних заданий
Readme 65 KiB
Languages
Python 100%