3.8 KiB
3.8 KiB
Агент с RAG‑памятью
Описание проекта
Проект реализует RAG‑агента (Retrieval‑Augmented 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
Важно
- Запустите сервер Qdrant (локально:
docker run -p 6333:6333 qdrant/qdrant, облачно – получите URL).- Установите переменную окружения
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"])
Автор: [Ваше имя]
Дата: 2026‑05‑28