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

4.3 KiB
Raw Blame History

HumanintheLoop via Middleware

📖 Описание

В этом проекте реализован агент на базе LangChain, который при каждом вызове инструмента останавливается и запрашивает подтверждение пользователя.

  • HumanInTheLoopMiddleware автоматически формирует запрос к пользователю (в терминале) с описанием того, что планирует сделать агент.
  • Пользователь вводит одно из решений: approve, reject или edit. После этого выполнение возобновляется через команду Command(resume={"decisions": [...]}).

Таким образом, пользователь всегда контролирует действия агента и может корректировать их в реальном времени.

📦 Установка зависимостей

# Создайте виртуальное окружение (рекомендовано)
python -m venv .venv
source .venv/bin/activate   # Windows: .venv\Scripts\activate

# Установите зависимости из requirements.txt
pip install -r requirements.txt

requirements.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

Пример запуска

# 1️⃣ Запустите агента
python agent.py

# 2️⃣ В другом терминале запустите сценарий взаимодействия
python run_agent.py

🧪 Пример использования

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 – можно изменить аргументы перед повторным вызовом.


📚 Дополнительные ресурсы