# Практическое задание №3 ## Память и подтверждение действий > **Цель** – доработать агента из предыдущих заданий: добавить память разговора и механизм подтверждения каждого вызова инструмента пользователем. --- ## Описание проекта В этом репозитории реализован простой чат‑бот на базе LangChain, который умеет: - хранить историю диалога (память) при помощи `MemorySaver`; - запрашивать у пользователя подтверждение перед выполнением любого внешнего инструмента; - выводить сообщения в красивом формате с помощью библиотеки `rich`. Бот использует Ollama‑LLM (`llama3`) и два вспомогательных файла: | Файл | Описание | |------|----------| | `agent.py` | Определяет агента, инструменты и логику подтверждения. | | `client.py` | Точка входа: запускает интерактивный чат с пользователем. | --- ## Предварительные требования - Python **3.11+** (рекомендуется 3.12) - Ollama установлен и запущен локально: ```bash ollama pull llama3 ``` - Установлен пакет `rich` для красивого вывода в консоль. --- ## Установка ```bash # Клонируйте репозиторий git clone https://github.com/yourusername/langchain-memory-confirmation.git cd langchain-memory-confirmation # Создайте виртуальное окружение (опционально) python -m venv .venv source .venv/bin/activate # Windows: .venv\Scripts\activate # Установите зависимости pip install -r requirements.txt ``` `requirements.txt` содержит: ```text langchain==0.2.* langgraph==0.1.* langchain-ollama==0.0.* rich>=13.0 ``` --- ## Запуск ```bash python client.py ``` После запуска бот будет ждать вашего ввода в консоли. При каждом запросе к инструменту он попросит подтвердить действие, например: ``` > Какова цена товара "X"? [Bot] Пожалуйста, подтвердите вызов инструмента get_price для аргументов: {'product': 'X'} (y/n): ``` Введите `y` – инструмент выполнится; `n` – запрос будет отменён. --- ## Пример работы ```text > Какова цена товара "Кофе"? [Bot] Пожалуйста, подтвердите вызов инструмента get_price для аргументов: {'product': 'Кофе'} (y/n): y [Bot] Цена продукта Кофе: 5.00 USD > Сколько стоит товар "Чай"? [Bot] Пожалуйста, подтвердите вызов инструмента get_price для аргументов: {'product': 'Чай'} (y/n): n [Bot] Операция отменена. ``` Память сохраняет все предыдущие сообщения, поэтому бот может использовать их в дальнейшем диалоге. --- ## Как это работает 1. **MemorySaver** хранит историю сообщений в памяти процесса. 2. В `agent.py` каждый инструмент помечен декоратором `@tool`. 3. При вызове инструмента агент выводит запрос на подтверждение через `rich.console.Console()`. Если пользователь отвечает `y`, инструмент выполняется; иначе – операция отменяется. --- ## Тесты Для запуска тестов (если есть) используйте: ```bash pytest tests/ ``` --- ## Вклад Если хотите улучшить проект, откройте issue или pull request. Убедитесь, что все изменения проходят линтер (`ruff`) и тесты. --- ## Лицензия MIT © 2026