Files
dz/solutions/69a86305c46fd26feae6bcaa_Human-in-the-Loop_через_middleware/README.md
T

109 lines
3.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# HumanintheLoop через 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
Запрос: "Какая погода в Москве на 20240601?"
Нужно подтвердить действие (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 HumanintheLoop](https://docs.langchain.com/oss/python/langchain/human-in-the-loop)
- [LangGraph GitHub репозиторий](https://github.com/run-llama/langgraph)
---
## 🤝 Вклад
Если вы нашли ошибки или хотите добавить новые инструменты, создайте pull request.
Пожалуйста, придерживайтесь стиля кода из `solution.py` и добавляйте комментарии.
---```