From 55b0c53994aa27f8bd96fc04798b8e94c53b8f02 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=9C=D0=B0=D1=80=D0=B8=D1=8F=20=D0=91=D0=B5=D1=80=D0=B4?= =?UTF-8?q?=D0=BD=D0=B8=D0=BA=D0=BE=D0=B2=D0=B0?= Date: Thu, 28 May 2026 06:01:57 +0000 Subject: [PATCH] =?UTF-8?q?=D0=90=D0=B3=D0=B5=D0=BD=D1=82=20=D1=81=20RAG-?= =?UTF-8?q?=D0=BF=D0=B0=D0=BC=D1=8F=D1=82=D1=8C=D1=8E:=20README.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../README.md | 127 ++++++++++++++++++ 1 file changed, 127 insertions(+) create mode 100644 solutions/6a02e23da6fe2e4ac16acf65_Агент_с_RAG-памятью/README.md diff --git a/solutions/6a02e23da6fe2e4ac16acf65_Агент_с_RAG-памятью/README.md b/solutions/6a02e23da6fe2e4ac16acf65_Агент_с_RAG-памятью/README.md new file mode 100644 index 0000000..a5bac82 --- /dev/null +++ b/solutions/6a02e23da6fe2e4ac16acf65_Агент_с_RAG-памятью/README.md @@ -0,0 +1,127 @@ +# Агент с RAG‑памятью + +**Агент** – это небольшое веб‑приложение на FastMCP, которое использует Retrieval‑Augmented Generation (RAG) для ответа на вопросы пользователя. +Векторное хранилище реализовано через Qdrant, а генерация текста выполняется моделью OpenAI. + +--- + +## 📦 Установка зависимостей + +```bash +# Создайте виртуальное окружение (рекомендуется) +python -m venv .venv +source .venv/bin/activate # Windows: .venv\Scripts\activate + +# Установите зависимости из requirements.txt +pip install -r requirements.txt +``` + +`requirements.txt` содержит: + +```text +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`, добавьте документы: + +```python +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️⃣ Запуск сервера + +```bash +python solution.py +``` + +Сервер будет доступен по умолчанию на `http://localhost:8000`. + +--- + +## 📄 API + +| Метод | Путь | Описание | +|-------|------|----------| +| `GET /` | Главная страница | Возвращает простое приветствие. | +| `POST /ask` | Вопрос к агенту | Принимает JSON `{ "question": "<текст>" }`. Возвращает ответ и список релевантных документов. | + +### Пример запроса + +```bash +curl -X POST http://localhost:8000/ask \ + -H "Content-Type: application/json" \ + -d '{"question":"Какой сегодня день недели?"}' +``` + +Ответ: + +```json +{ + "answer": "Сегодня четверг.", + "documents": [ + { + "content": "...", + "metadata": { ... } + }, + ... + ] +} +``` + +--- + +## 🧪 Пример использования в коде + +```python +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, например, добавив авторизацию или хранение истории диалогов. + +--- + +**Автор:** *Ваше имя* +**Дата:** 2026‑05‑28 \ No newline at end of file