# Human‑in‑the‑Loop (HIL) через middleware на FastMCP ## Описание проекта Проект демонстрирует принцип **Human‑in‑the‑Loop** (человек в потоке выполнения) при помощи простого HTTP‑сервера, реализованного на **FastMCP**. Сервер имеет один эндпоинт `/process`. Перед выполнением запроса к этому эндпоинту пользователь должен подтвердить действие через консольный ввод (`yes`/`no`). Это позволяет показать, как можно вставлять ручное вмешательство в автоматический процесс без изменения бизнес‑логики. ## Предварительные требования - Python 3.10+ - `pip` (или `pipx`) для установки зависимостей > **Важно**: В данном примере не требуется внешних сервисов, таких как Ollama или Qdrant. Всё работает локально. ## Установка ```bash # Клонируйте репозиторий git clone https://github.com/your-username/hil-fastmcp.git cd hil-fastmcp # Создайте виртуальное окружение (необязательно, но рекомендуется) python -m venv .venv source .venv/bin/activate # Windows: .\.venv\Scripts\activate # Установите зависимости pip install -r requirements.txt ``` ## Запуск сервера ```bash # Запускаем сервер из файла solution.py python solution.py ``` После запуска вы увидите сообщение: ``` FastMCP server is running on http://127.0.0.1:8000 ``` ## Пример использования ### 1. Отправка запроса к `/process` ```bash curl -X POST http://127.0.0.1:8000/process \ -H "Content-Type: application/json" \ -d '{"task":"example"}' ``` После отправки запроса сервер выведет в консоль: ``` Do you want to proceed with the request? (yes/no): ``` ### 2. Подтверждение действия - Введите `yes` и нажмите **Enter** → запрос выполнится, и клиент получит ответ: ```json {"message":"Task processed successfully","task":"example"} ``` - Введите `no` → сервер вернёт ошибку 403: ```json {"detail":"Action was not confirmed by the user."} ``` ## Структура проекта ``` ├── solution.py # Основной код сервера с HIL‑middleware └── requirements.txt # Список зависимостей (FastMCP) ``` ## Как это работает 1. **Middleware** intercepts every request to `/process`. 2. Он выводит запрос в консоль и ждёт ввода пользователя. 3. Если пользователь вводит `yes`, middleware пропускает запрос дальше к обработчику. 4. В противном случае возвращается HTTP‑ошибка 403. Таким образом, человек имеет контроль над каждым выполнением запроса без необходимости менять логику самого эндпоинта. ## Лицензия MIT © 2026 ---