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

96 lines
4.3 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 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` – можно изменить аргументы перед повторным вызовом.
---
## 📚 Дополнительные ресурсы
* [Документация HumanintheLoop — LangChain](https://docs.langchain.com/oss/python/langchain/human-in-the-loop)
* [LangGraph Checkpointing](https://langgraph.org/docs/checkpoints)
---