MCP-сервер для управления памятью агента: README.md
This commit is contained in:
@@ -1,3 +1,214 @@
|
||||
# task-69f8e929-mcp-server-dlya-upravleni
|
||||
# MCP‑Server for Agent Memory Management
|
||||
|
||||
Решения домашних заданий
|
||||
A lightweight FastAPI server that stores and retrieves memory snippets for an AI agent using **Qdrant** as a vector database and **OpenAI embeddings** to encode text.
|
||||
|
||||
> **TL;DR** – Run the server, add memory items via `/memory`, query them with `/query`, and let your agent fetch relevant context automatically.
|
||||
|
||||
---
|
||||
|
||||
## Table of Contents
|
||||
|
||||
- [Features](#features)
|
||||
- [Prerequisites](#prerequisites)
|
||||
- [Installation](#installation)
|
||||
- [Configuration](#configuration)
|
||||
- [Running the Server](#running-the-server)
|
||||
- [API Endpoints](#api-endpoints)
|
||||
- `POST /memory`
|
||||
- `GET /query`
|
||||
- [Example Usage](#example-usage)
|
||||
- [Testing with cURL](#testing-with-curl)
|
||||
- [License](#license)
|
||||
|
||||
---
|
||||
|
||||
## Features
|
||||
|
||||
| Feature | Description |
|
||||
|---------|-------------|
|
||||
| **Vector Search** | Stores embeddings in Qdrant and performs similarity search. |
|
||||
| **OpenAI Embeddings** | Uses `text-embedding-ada-002` (or any OpenAI model) to encode text. |
|
||||
| **FastAPI** | Simple, async API with automatic docs (`/docs`). |
|
||||
| **Conversation Buffer Memory** | Optional integration with LangChain for conversational context. |
|
||||
|
||||
---
|
||||
|
||||
## Prerequisites
|
||||
|
||||
| Component | Minimum Version | How to Install |
|
||||
|-----------|-----------------|----------------|
|
||||
| Python | 3.10+ | `python -m venv .venv && source .venv/bin/activate` |
|
||||
| Qdrant | 1.x (Docker) | `docker run -p 6333:6333 qdrant/qdrant` |
|
||||
| OpenAI API Key | – | Sign up at https://platform.openai.com and copy your key. |
|
||||
|
||||
> **Tip:** The server uses the default Qdrant port `6333`. If you change it, update `QDRANT_PORT` in `solution.py`.
|
||||
|
||||
---
|
||||
|
||||
## Installation
|
||||
|
||||
```bash
|
||||
# 1️⃣ Clone the repo (or download solution.py)
|
||||
git clone https://github.com/your-username/mcp-agent-memory.git
|
||||
cd mcp-agent-memory
|
||||
|
||||
# 2️⃣ Create a virtual environment and activate it
|
||||
python -m venv .venv
|
||||
source .venv/bin/activate # On Windows: .venv\Scripts\activate
|
||||
|
||||
# 3️⃣ Install dependencies
|
||||
pip install --upgrade pip
|
||||
pip install fastapi uvicorn httpx qdrant-client langchain openai pydantic
|
||||
```
|
||||
|
||||
> **Optional** – If you want to use the built‑in LangChain memory, also install:
|
||||
> ```bash
|
||||
> pip install langchain[all]
|
||||
> ```
|
||||
|
||||
---
|
||||
|
||||
## Configuration
|
||||
|
||||
Edit `solution.py` and set:
|
||||
|
||||
```python
|
||||
OPENAI_API_KEY = "YOUR_OPENAI_API_KEY" # <-- Replace with your key
|
||||
QDRANT_HOST = "localhost"
|
||||
QDRANT_PORT = 6333
|
||||
COLLECTION_NAME = "agent_memory"
|
||||
```
|
||||
|
||||
If you run Qdrant on a different host/port, adjust `QDRANT_HOST` and `QDRANT_PORT`.
|
||||
|
||||
---
|
||||
|
||||
## Running the Server
|
||||
|
||||
```bash
|
||||
uvicorn solution:app --reload
|
||||
```
|
||||
|
||||
- The server will start at `http://127.0.0.1:8000`.
|
||||
- OpenAPI docs are available at `http://127.0.0.1:8000/docs`.
|
||||
|
||||
> **Note:** The first request to `/memory` will create the Qdrant collection automatically.
|
||||
|
||||
---
|
||||
|
||||
## API Endpoints
|
||||
|
||||
| Method | Path | Description |
|
||||
|--------|--------|-------------|
|
||||
| `POST` | `/memory` | Add a new memory snippet. |
|
||||
| `GET` | `/query` | Retrieve top‑k similar snippets for a query string. |
|
||||
|
||||
### POST /memory
|
||||
|
||||
```json
|
||||
{
|
||||
"text": "The quick brown fox jumps over the lazy dog.",
|
||||
"metadata": {
|
||||
"source": "example.txt",
|
||||
"timestamp": "2024-05-28T12:34:56Z"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
**Response**
|
||||
|
||||
```json
|
||||
{
|
||||
"id": 42,
|
||||
"text": "...",
|
||||
"metadata": { ... }
|
||||
}
|
||||
```
|
||||
|
||||
### GET /query
|
||||
|
||||
Query parameters:
|
||||
|
||||
| Parameter | Type | Default | Description |
|
||||
|-----------|------|---------|-------------|
|
||||
| `query` | str | – | Search string. |
|
||||
| `top_k` | int | 5 | Number of results to return. |
|
||||
|
||||
**Example**
|
||||
|
||||
```
|
||||
GET /query?query=quick%20fox&top_k=3
|
||||
```
|
||||
|
||||
**Response**
|
||||
|
||||
```json
|
||||
[
|
||||
{
|
||||
"id": 42,
|
||||
"text": "...",
|
||||
"metadata": { ... },
|
||||
"score": 0.87
|
||||
},
|
||||
...
|
||||
]
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Example Usage
|
||||
|
||||
Below is a quick Python script that demonstrates adding memory and querying it.
|
||||
|
||||
```python
|
||||
import httpx
|
||||
|
||||
BASE_URL = "http://127.0.0.1:8000"
|
||||
|
||||
# 1️⃣ Add a memory snippet
|
||||
payload = {
|
||||
"text": "The quick brown fox jumps over the lazy dog.",
|
||||
"metadata": {"source": "example.txt"}
|
||||
}
|
||||
resp = httpx.post(f"{BASE_URL}/memory", json=payload)
|
||||
print("Added:", resp.json())
|
||||
|
||||
# 2️⃣ Query for similar snippets
|
||||
params = {"query": "quick fox", "top_k": 3}
|
||||
resp = httpx.get(f"{BASE_URL}/query", params=params)
|
||||
print("Query results:")
|
||||
for item in resp.json():
|
||||
print(item["text"], "(score:", item["score"] + ")")
|
||||
```
|
||||
|
||||
Run the script after starting the server:
|
||||
|
||||
```bash
|
||||
python example.py
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Testing with cURL
|
||||
|
||||
Add memory:
|
||||
|
||||
```bash
|
||||
curl -X POST http://127.0.0.1:8000/memory \
|
||||
-H "Content-Type: application/json" \
|
||||
-d '{"text":"Hello world","metadata":{"source":"greeting"}}'
|
||||
```
|
||||
|
||||
Query:
|
||||
|
||||
```bash
|
||||
curl "http://127.0.0.1:8000/query?query=hello&top_k=2"
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## License
|
||||
|
||||
MIT © 2024
|
||||
|
||||
---
|
||||
Reference in New Issue
Block a user