# Агент с RAG‑памятью ## Описание проекта Проект реализует **RAG‑агента** (Retrieval‑Augmented Generation) на базе FastAPI и LangChain, который хранит документы векторно в Qdrant и использует OpenAI GPT‑4 для генерации ответов. - Векторизатор: `OpenAIEmbeddings` - Хранилище: `Qdrant` (локальный сервер или облачный) - Генерация: `ChatOpenAI` (GPT‑4, температура = 0) API предоставляет один эндпоинт `/ask`, принимающий вопрос и возвращающий ответ, сформированный на основе найденных векторных документов. ## Установка зависимостей ```bash # Создайте виртуальное окружение (рекомендуется) python -m venv .venv source .venv/bin/activate # Windows: .venv\Scripts\activate # Установите зависимости из requirements.txt pip install -r requirements.txt ``` `requirements.txt` ```text fastapi uvicorn[standard] pydantic langchain openai qdrant-client rich ``` > **Важно** > 1. Запустите сервер Qdrant (локально: `docker run -p 6333:6333 qdrant/qdrant`, облачно – получите URL). > 2. Установите переменную окружения `OPENAI_API_KEY` с вашим ключом OpenAI. ## Конфигурация ```bash export QDRANT_URL="http://localhost:6333" # адрес сервера Qdrant (по умолчанию) export QDRANT_COLLECTION="rag_memory" # имя коллекции в Qdrant export OPENAI_API_KEY="sk-..." # ваш ключ OpenAI ``` ## Запуск приложения ```bash uvicorn solution:app --reload ``` После запуска приложение будет доступно по адресу `http://127.0.0.1:8000`. Swagger UI можно открыть в браузере по `/docs`. ## Эндпоинты | Метод | Путь | Описание | |-------|------|----------| | POST | /ask | Принимает JSON с полем `question` (строка) и возвращает ответ GPT‑4. | ### Пример запроса ```bash curl -X POST "http://127.0.0.1:8000/ask" \ -H "Content-Type: application/json" \ -d '{"question":"Какой у меня возраст?"}' ``` ### Ожидаемый ответ ```json { "answer": "Ваш возраст составляет 30 лет." } ``` ## Как добавить документы в память Для того чтобы агент мог отвечать на вопросы, необходимо загрузить документы в Qdrant. Это можно сделать вручную через API Qdrant или написать скрипт: ```python 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) ``` После добавления документов агент сможет использовать их при генерации ответов. ## Пример использования в коде ```python import requests response = requests.post( "http://127.0.0.1:8000/ask", json={"question": "Что такое RAG?"} ) print(response.json()["answer"]) ``` --- **Автор:** [Ваше имя] **Дата:** 2026‑05‑28