Files

4.6 KiB
Raw Blame History

Практическое задание №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

Скрипт запускает интерактивный чат‑бот, который:

  1. Принимает ввод пользователя.
  2. Пауза перед каждым вызовом инструмента search.
  3. Показывает пользователю сообщение о предстоящем действии и ожидает подтверждения (y/n).
  4. Если пользователь подтверждает – инструмент вызывается; иначе действие отменяется.

2. Тестовый скрипт (если есть)

Если в проекте присутствует файл test_solution.py, его можно запустить так:

pytest test_solution.py

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

$ python solution.py
🤖: Здравствуйте! Чем могу помочь?
🧑: Какую погоду будет завтра в Москве?

🤖: Я собираюсь выполнить поиск по запросу "погода завтра Москва". Продолжить? (y/n) y
🔍 Выполняю инструмент search...
Результаты поиска по запросу 'погода завтра Москва': ...

🤖: Похоже, завтра в Москве будет облачно с небольшой вероятностью осадков. Есть ли ещё что‑то, чем могу помочь?

Если пользователь вводит n:

🤖: Я собираюсь выполнить поиск по запросу "погода завтра Москва". Продолжить? (y/n) n
🤖: Операция отменена. Чем ещё могу помочь?

Как это работает

  1. MemorySaver сохраняет состояние разговора, позволяя агенту помнить предыдущие сообщения.
  2. interrupt_before=['tools'] заставляет агент остановиться перед каждым вызовом инструмента.
  3. Внутри цикла обработки сообщений пользователь получает запрос на подтверждение и вводит y/n.
  4. После подтверждения инструмент вызывается через LangGraph, а результат возвращается в поток.

Что можно улучшить

  • Добавить более сложные инструменты (например, API погоды).
  • Реализовать хранение истории в базе данных вместо памяти в RAM.
  • Поддержать несколько параллельных разговоров с разными thread_id.