Практическое задание №3: Память и подтверждение действий
Описание проекта
В этом проекте реализован агент на базе LangGraph с поддержкой:
- Памяти разговора – сохранение истории сообщений в
MemorySaver. - Подтверждения действия – пауза перед вызовом любого инструмента, чтобы пользователь мог подтвердить или отменить действие.
Агент использует модель GPT‑4o‑mini и простой инструмент поиска. Вывод осуществляется через библиотеку rich, что делает консольный интерфейс более читаемым.
Установка зависимостей
# Создайте виртуальное окружение (необязательно, но рекомендуется)
python -m venv .venv
source .venv/bin/activate # Windows: .venv\Scripts\activate
# Установите все необходимые пакеты
pip install -r requirements.txt
requirements.txt содержит:
langchain-openai>=0.2.0
langgraph>=0.1.0
rich>=13.0.0
python-dotenv # для удобного управления переменными окружения (необязательно)
Важно: Установите ключ OpenAI в переменной окружения
OPENAI_API_KEY.
Можно создать файл.envс содержимым:OPENAI_API_KEY=sk-...
Запуск
1. Основной скрипт (solution.py)
python solution.py
Скрипт запускает интерактивный чат‑бот, который:
- Принимает ввод пользователя.
- Пауза перед каждым вызовом инструмента
search. - Показывает пользователю сообщение о предстоящем действии и ожидает подтверждения (
y/n). - Если пользователь подтверждает – инструмент вызывается; иначе действие отменяется.
2. Тестовый скрипт (если есть)
Если в проекте присутствует файл test_solution.py, его можно запустить так:
pytest test_solution.py
Пример использования
$ python solution.py
🤖: Здравствуйте! Чем могу помочь?
🧑: Какую погоду будет завтра в Москве?
🤖: Я собираюсь выполнить поиск по запросу "погода завтра Москва". Продолжить? (y/n) y
🔍 Выполняю инструмент search...
Результаты поиска по запросу 'погода завтра Москва': ...
🤖: Похоже, завтра в Москве будет облачно с небольшой вероятностью осадков. Есть ли ещё что‑то, чем могу помочь?
Если пользователь вводит n:
🤖: Я собираюсь выполнить поиск по запросу "погода завтра Москва". Продолжить? (y/n) n
🤖: Операция отменена. Чем ещё могу помочь?
Как это работает
- MemorySaver сохраняет состояние разговора, позволяя агенту помнить предыдущие сообщения.
interrupt_before=['tools']заставляет агент остановиться перед каждым вызовом инструмента.- Внутри цикла обработки сообщений пользователь получает запрос на подтверждение и вводит
y/n. - После подтверждения инструмент вызывается через LangGraph, а результат возвращается в поток.
Что можно улучшить
- Добавить более сложные инструменты (например, API погоды).
- Реализовать хранение истории в базе данных вместо памяти в RAM.
- Поддержать несколько параллельных разговоров с разными
thread_id.