109 lines
3.9 KiB
Markdown
109 lines
3.9 KiB
Markdown
# Human‑in‑the‑Loop через Middleware
|
||
|
||
Пример реализации агента на LangGraph с встроенным `HumanInTheLoopMiddleware`.
|
||
При каждом вызове инструмента агент останавливается и выводит в терминал запрос
|
||
на подтверждение (`approve` / `reject`). После ответа пользователь может
|
||
продолжить выполнение, а агент продолжит работу.
|
||
|
||
---
|
||
|
||
## 📦 Установка зависимостей
|
||
|
||
```bash
|
||
# Создайте виртуальное окружение (рекомендуется)
|
||
python -m venv .venv
|
||
source .venv/bin/activate # Windows: .venv\Scripts\activate
|
||
|
||
# Установите необходимые пакеты
|
||
pip install langgraph langchain-core langchain-openai openai tqdm
|
||
```
|
||
|
||
> **Важно**
|
||
> Для работы с OpenAI API понадобится переменная окружения `OPENAI_API_KEY`.
|
||
> ```bash
|
||
> export OPENAI_API_KEY="sk-..."
|
||
> ```
|
||
|
||
---
|
||
|
||
## 📁 Структура проекта
|
||
|
||
```text
|
||
.
|
||
├── solution.py # Основной скрипт, реализующий агент
|
||
└── README.md # Текущий файл
|
||
```
|
||
|
||
---
|
||
|
||
## ▶️ Запуск
|
||
|
||
### 1. Запустите скрипт из командной строки
|
||
|
||
```bash
|
||
python solution.py
|
||
```
|
||
|
||
> Скрипт автоматически создаст агента, подключит middleware и начнет диалог с пользователем.
|
||
|
||
### 2. Взаимодействие в терминале
|
||
|
||
После каждого вызова инструмента вы увидите сообщение вида:
|
||
|
||
```
|
||
⚠️ Инструмент: get_weather
|
||
Запрос: "Какая погода в Москве на 2024‑06‑01?"
|
||
Нужно подтвердить действие (approve/reject):
|
||
```
|
||
|
||
- Введите `approve` – инструмент будет выполнен и результат вернётся агенту.
|
||
- Введите `reject` – вызов инструмента отменяется, агент продолжит работу без него.
|
||
|
||
---
|
||
|
||
## 📄 Пример использования
|
||
|
||
```python
|
||
from langgraph.prebuilt import create_react_agent
|
||
from langchain.tools import tool
|
||
from langgraph.checkpoint.memory import MemorySaver
|
||
from langgraph.types import Command
|
||
from langgraph.moderation import HumanInTheLoopMiddleware
|
||
|
||
# 1. Определяем инструмент
|
||
@tool
|
||
def get_weather(city: str, date: str) -> str:
|
||
"""Возвращает погоду в городе на указанную дату."""
|
||
return f"Погода в {city} на {date}: солнечно 25°C."
|
||
|
||
# 2. Создаём агент с middleware
|
||
memory = MemorySaver()
|
||
agent = create_react_agent(
|
||
tools=[get_weather],
|
||
memory=memory,
|
||
middleware=[HumanInTheLoopMiddleware()],
|
||
)
|
||
|
||
# 3. Запускаем диалог
|
||
config = {"thread_id": "session-1"}
|
||
state = agent.invoke({"messages": [{"role": "user", "content": "Какая погода в Москве на 2024‑06‑01?"}]}, config=config)
|
||
print(state["messages"][-1]["content"])
|
||
```
|
||
|
||
> После запуска вы увидите запрос подтверждения и сможете взаимодействовать с агентом, как описано выше.
|
||
|
||
---
|
||
|
||
## 📚 Полезные ссылки
|
||
|
||
- [Документация LangChain – Human‑in‑the‑Loop](https://docs.langchain.com/oss/python/langchain/human-in-the-loop)
|
||
- [LangGraph GitHub репозиторий](https://github.com/run-llama/langgraph)
|
||
|
||
---
|
||
|
||
## 🤝 Вклад
|
||
|
||
Если вы нашли ошибки или хотите добавить новые инструменты, создайте pull request.
|
||
Пожалуйста, придерживайтесь стиля кода из `solution.py` и добавляйте комментарии.
|
||
|
||
---``` |