108 lines
3.8 KiB
Markdown
108 lines
3.8 KiB
Markdown
# Агент с 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 |