Add answer.md
This commit is contained in:
1 parent
feebdb62c6
commit
cdadf82921
1 file changed
+26
@@ -0,0 +1,26 @@
|
|||||||
|
{
|
||||||
|
"task": {
|
||||||
|
"_id": "69f8e929da860fb4533faa2a",
|
||||||
|
"title": "MCP-сервер для управления памятью агента",
|
||||||
|
"description": "# Практическое задание: MCP-сервер для управления памятью агента\n\n## Цель\n\nСоздать **MCP-сервер (Model Context Protocol)** — самостоятельный сервис, который предоставляет другим агентам инструменты для работы с памятью через стандартизированный протокол. Это первый шаг к построению распределённых многоагентных систем, где агенты могут обмениваться данными и координировать работу через единое хранилище.\n\nВ отличие от локальной памяти внутри одного скрипта, MCP-сервер — это независимый процесс с API, доступный для любого клиента (другого агента, CLI-утилиты или другого сервиса).\n\n---\n\n## Стек и установка\n\n- Python 3.10+\n- Пакеты: `fastmcp` (фреймворк MCP), `pydantic` (валидация данных)\n\nУстановка:\n\n```bash\npip install fastmcp pydantic python-dotenv\n```\n\n> **Важно:** `fastmcp` — это библиотека для создания серверов и клиентов MCP. Она позволяет регистрировать инструменты, которые становятся доступны агентам через протокол stdio или SSE.\n\n---\n\n## Что нужно сделать\n\n### 1. Создать MCP-сервер с базовыми инструментами памяти\n\nСоздай файл `memory_server.py`, в котором определишь класс сервера на основе `FastMCP`:\n\n```python\nfrom fastmcp import FastMCP\nimport json\nfrom datetime import datetime\nfrom pathlib import Path\nfrom typing import Any, Optional\n\nclass MemoryServer:\n def __init__(self):\n self.mcp = FastMCP(\"Memory-Server\")\n self.storage_path = Path(\"./memory_data.json\")\n \n def _load_memory(self) -> dict:\n \"\"\"Загружает память из JSON-файла.\"\"\"\n if not self.storage_path.exists():\n return {}\n with open(self.storage_path, 'r', encoding='utf-8') as f:\n return json.load(f)\n \n def _save_memory(self, data: dict):\n \"\"\"Сохраняет память в JSON-файл.\"\"\"\n self.storage_path.parent.mkdir(parents=True, exist_ok=True)\n with open(self.storage_path, 'w', encoding='utf-8') as f:\n json.dump(data, f, indent=2, ensure_ascii=False)\n \n @self.mcp.tool()\n def save(key: str, value: Any) -> bool:\n \"\"\"Сохраняет значение по ключу в память сервера.\n \n Args:\n key: Идентификатор для сохранения (уникальный ключ).\n value: Любое сериализуемое значение.\n \n Returns:\n True при успешном сохранении, False иначе.\n \"\"\"\n # Реализуй здесь...\n \n @self.mcp.tool()\n def get(key: str) -> Optional[dict]:\n \"\"\"Возвращает значение по ключу с метаданными.\n \n Args:\n key: Идентификатор для поиска.\n \n Returns:\n Словарь с полями {\"key\": ..., \"value\": ..., \"timestamp\": ...} \n или None если ключ не найден.\n \"\"\"\n # Реализуй здесь...\n \n @self.mcp.tool()\n def delete(key: str) -> bool:\n \"\"\"Удаляет ключ из памяти сервера.\n \n Args:\n key: Идентификатор для удаления.\n \n Returns:\n True при успешном удалении, False если ключ не найден.\n \"\"\"\n # Реализуй здесь...\n \n @self.mcp.tool()\n def list_keys(pattern: str = \"*\") -> list[str]:\n \"\"\"Возвращает список всех ключей с поддержкой wildcard-паттерна.\n \n Args:\n pattern: Паттерн для фильтрации (поддерживает * и ?).\n \n Returns:\n Список совпадающих ключей.\n \"\"\"\n # Реализуй здесь...\n```\n\n### 2. Добавить инструменты с поддержкой namespaces\n\n**Namespace** — это пространство имён для изоляции данных. Например, один агеLine truncated
|
||||||
|
"course": "698b49da77cb6d4d2e43ce78",
|
||||||
|
"lesson": {
|
||||||
|
"_id": "69b035ab2a32e307dd6e1fee",
|
||||||
|
"name": "Implementing Model Context Protocol in LangChain",
|
||||||
|
"date": "2026-03-10T15:30:00.000Z",
|
||||||
|
"id": "69b035ab2a32e307dd6e1fee"
|
||||||
|
},
|
||||||
|
"gradeType": "passfail",
|
||||||
|
"maxScore": 100,
|
||||||
|
"assignmentType": "individual",
|
||||||
|
"allowSubmissions": true,
|
||||||
|
"allowRevisions": false,
|
||||||
|
"creator": {
|
||||||
|
"sub": "8ae348ab-f32e-46c7-9960-8b7fdf0e4c0e",
|
||||||
|
"name": "Александр Примаков"
|
||||||
|
},
|
||||||
|
"teamGrades": [],
|
||||||
|
"created": "2026-05-04T18:44:57.314Z",
|
||||||
|
"id": "69f8e929da860fb4533faa2a"
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in new issue
Block a user