From c1d6d746d16bff21a7f3f0b9bc6d957638128da7 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: Wed, 27 May 2026 10:18:19 +0000 Subject: [PATCH] =?UTF-8?q?Human-in-the-Loop=20=D1=87=D0=B5=D1=80=D0=B5?= =?UTF-8?q?=D0=B7=20middleware:=20README.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../README.md | 96 +++++++++++++++++++ 1 file changed, 96 insertions(+) create mode 100644 solutions/69a86305c46fd26feae6bcaa_Human-in-the-Loop_через_middleware/README.md diff --git a/solutions/69a86305c46fd26feae6bcaa_Human-in-the-Loop_через_middleware/README.md b/solutions/69a86305c46fd26feae6bcaa_Human-in-the-Loop_через_middleware/README.md new file mode 100644 index 0000000..6d139cb --- /dev/null +++ b/solutions/69a86305c46fd26feae6bcaa_Human-in-the-Loop_через_middleware/README.md @@ -0,0 +1,96 @@ +# Human‑in‑the‑Loop via Middleware + +## 📖 Описание +В этом проекте реализован агент на базе LangChain, который при каждом вызове инструмента останавливается и запрашивает подтверждение пользователя. +* **HumanInTheLoopMiddleware** автоматически формирует запрос к пользователю (в терминале) с описанием того, что планирует сделать агент. +* Пользователь вводит одно из решений: `approve`, `reject` или `edit`. После этого выполнение возобновляется через команду `Command(resume={"decisions": [...]})`. + +Таким образом, пользователь всегда контролирует действия агента и может корректировать их в реальном времени. + +## 📦 Установка зависимостей +```bash +# Создайте виртуальное окружение (рекомендовано) +python -m venv .venv +source .venv/bin/activate # Windows: .venv\Scripts\activate + +# Установите зависимости из requirements.txt +pip install -r requirements.txt +``` + +`requirements.txt` +```txt +langchain==0.2.* +langgraph==0.1.* +openai==1.* +python-dotenv==1.* +``` + +> **Важно**: +> * `checkpointer=MemorySaver()` нужен для сохранения состояния паузы, иначе агент не сможет возобновиться после подтверждения. +> * Убедитесь, что переменная окружения `OPENAI_API_KEY` установлена (или используйте `.env` файл). + +## 🚀 Запуск файлов + +| Файл | Что делает | Как запустить | +|------|------------|---------------| +| `agent.py` | Создаёт агента с middleware и инструментом `get_weather`. | `python agent.py` | +| `run_agent.py` | Демонстрирует взаимодействие: задаётся вопрос, агент вызывает инструмент, пользователь подтверждает. | `python run_agent.py` | + +### Пример запуска +```bash +# 1️⃣ Запустите агента +python agent.py + +# 2️⃣ В другом терминале запустите сценарий взаимодействия +python run_agent.py +``` + +## 🧪 Пример использования + +```python +from langchain.agents import create_agent +from langgraph.checkpoint.memory import MemorySaver +from langchain.agents.middleware import HumanInTheLoopMiddleware + +# Инициализация памяти для сохранения состояния паузы +memory = MemorySaver() + +agent = create_agent( + model=llm, + tools=[get_weather], + system_prompt="Ты полезный ассистент", + middleware=[ + HumanInTheLoopMiddleware( + interrupt_on={ + "get_weather": True, # разрешаем все решения: approve, edit, reject + }, + description_prefix="Подтвердите вызов инструмента", + ), + ], + checkpointer=memory, +) + +# Запрос к агенту +response = agent.run("Какая погода в Москве?") +print(response) +``` + +При выполнении агента вы увидите в терминале запрос вида: + +``` +[HumanInTheLoop] Подтвердите вызов инструмента: +Agent wants to call tool 'get_weather' with arguments: {"location": "Moscow"} +Enter decision (approve/reject/edit): +``` + +Введите `approve`, и агент продолжит работу, возвращая результат. +Если ввести `reject` – запрос будет отменён, а если `edit` – можно изменить аргументы перед повторным вызовом. + +--- + +## 📚 Дополнительные ресурсы + +* [Документация Human‑in‑the‑Loop — LangChain](https://docs.langchain.com/oss/python/langchain/human-in-the-loop) +* [LangGraph Checkpointing](https://langgraph.org/docs/checkpoints) + +--- \ No newline at end of file