Human‑in‑the‑Loop (HIL) через middleware на FastMCP
Описание проекта
Проект демонстрирует принцип Human‑in‑the‑Loop (человек в потоке выполнения) при помощи простого HTTP‑сервера, реализованного на FastMCP.
Сервер имеет один эндпоинт /process. Перед выполнением запроса к этому эндпоинту пользователь должен подтвердить действие через консольный ввод (yes/no). Это позволяет показать, как можно вставлять ручное вмешательство в автоматический процесс без изменения бизнес‑логики.
Предварительные требования
- Python 3.10+
pip(илиpipx) для установки зависимостей
Важно: В данном примере не требуется внешних сервисов, таких как Ollama или Qdrant. Всё работает локально.
Установка
# Клонируйте репозиторий
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
Запуск сервера
# Запускаем сервер из файла solution.py
python solution.py
После запуска вы увидите сообщение:
FastMCP server is running on http://127.0.0.1:8000
Пример использования
1. Отправка запроса к /process
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 → запрос выполнится, и клиент получит ответ:
{"message":"Task processed successfully","task":"example"}
- Введите
no→ сервер вернёт ошибку 403:
{"detail":"Action was not confirmed by the user."}
Структура проекта
├── solution.py # Основной код сервера с HIL‑middleware
└── requirements.txt # Список зависимостей (FastMCP)
Как это работает
- Middleware intercepts every request to
/process. - Он выводит запрос в консоль и ждёт ввода пользователя.
- Если пользователь вводит
yes, middleware пропускает запрос дальше к обработчику. - В противном случае возвращается HTTP‑ошибка 403.
Таким образом, человек имеет контроль над каждым выполнением запроса без необходимости менять логику самого эндпоинта.
Лицензия
MIT © 2026