# Практическое задание №3: Память и подтверждение действий ## Описание проекта В этом задании вы доработаете агента из предыдущих практических работ, добавив: - **Память разговора** – агент будет помнить все сообщения в рамках одного диалога. - **Механизм подтверждения** каждого вызова инструмента пользователем. Для красивого вывода в консоль используется библиотека `rich`. Агент реализован на основе LangGraph и использует OpenAI LLM через `langchain_openai`. ## Структура проекта ``` project/ ├── solution.py # Основной скрипт с реализацией агента └── README.md # Это файл ``` ## Установка зависимостей ```bash # Создайте виртуальное окружение (рекомендуется) python -m venv .venv source .venv/bin/activate # Windows: .venv\Scripts\activate # Установите все необходимые пакеты pip install rich langgraph langchain_openai openai ``` > **Важно** > Для работы с OpenAI вам понадобится переменная окружения `OPENAI_API_KEY`. > ```bash > export OPENAI_API_KEY="sk-..." > ``` ## Запуск скрипта ```bash python solution.py ``` Скрипт запускает интерактивный чат. Введите сообщение, и агент ответит, используя инструмент `echo_tool` при необходимости. Перед каждым вызовом инструмента пользователь будет запрашиваться о подтверждении. ### Пример работы ``` $ python solution.py 🤖: Hello! How can I help you today? 🧑: Tell me a joke. 🤔 (пауза) Вы хотите вызвать инструмент? [y/n]: y 🤖: Why did the scarecrow win an award? Because he was outstanding in his field! ``` ## Как это работает 1. **Память** - `MemorySaver` сохраняет состояние диалога. - Каждый запрос отправляется с конфигурацией `{"configurable": {"thread_id": "разговор-1"}}`, чтобы все сообщения в рамках одного разговора были связаны. 2. **Подтверждение** - Параметр `interrupt_before=["tools"]` заставляет агент остановиться перед вызовом любого инструмента. - В момент паузы пользователь получает запрос на подтверждение (`y/n`). Если ответ `n`, инструмент не вызывается, и агент продолжает работу. 3. **Инструмент** - Простой эхо‑инструмент `echo_tool` возвращает введённый текст. Его можно заменить любым другим действием (поиск в интернете, работа с базой данных и т.д.). ## Что дальше - Добавьте более сложные инструменты. - Реализуйте сохранение диалогов в файл или БД для дальнейшего анализа. - Настройте разные `thread_id` для параллельных разговоров. --- **Автор:** *[Ваше имя]* **Дата:** 27 мая 2026 г.