Практическое задание №3
Память и подтверждение действий
Цель – доработать агента из предыдущих заданий: добавить память разговора и механизм подтверждения каждого вызова инструмента пользователем.
Описание проекта
В этом репозитории реализован простой чат‑бот на базе LangChain, который умеет:
- хранить историю диалога (память) при помощи
MemorySaver; - запрашивать у пользователя подтверждение перед выполнением любого внешнего инструмента;
- выводить сообщения в красивом формате с помощью библиотеки
rich.
Бот использует Ollama‑LLM (llama3) и два вспомогательных файла:
| Файл | Описание |
|---|---|
agent.py |
Определяет агента, инструменты и логику подтверждения. |
client.py |
Точка входа: запускает интерактивный чат с пользователем. |
Предварительные требования
- Python 3.11+ (рекомендуется 3.12)
- Ollama установлен и запущен локально:
ollama pull llama3 - Установлен пакет
richдля красивого вывода в консоль.
Установка
# Клонируйте репозиторий
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 содержит:
langchain==0.2.*
langgraph==0.1.*
langchain-ollama==0.0.*
rich>=13.0
Запуск
python client.py
После запуска бот будет ждать вашего ввода в консоли. При каждом запросе к инструменту он попросит подтвердить действие, например:
> Какова цена товара "X"?
[Bot] Пожалуйста, подтвердите вызов инструмента get_price для аргументов: {'product': 'X'} (y/n):
Введите y – инструмент выполнится; n – запрос будет отменён.
Пример работы
> Какова цена товара "Кофе"?
[Bot] Пожалуйста, подтвердите вызов инструмента get_price для аргументов: {'product': 'Кофе'} (y/n): y
[Bot] Цена продукта Кофе: 5.00 USD
> Сколько стоит товар "Чай"?
[Bot] Пожалуйста, подтвердите вызов инструмента get_price для аргументов: {'product': 'Чай'} (y/n): n
[Bot] Операция отменена.
Память сохраняет все предыдущие сообщения, поэтому бот может использовать их в дальнейшем диалоге.
Как это работает
- MemorySaver хранит историю сообщений в памяти процесса.
- В
agent.pyкаждый инструмент помечен декоратором@tool. - При вызове инструмента агент выводит запрос на подтверждение через
rich.console.Console().
Если пользователь отвечаетy, инструмент выполняется; иначе – операция отменяется.
Тесты
Для запуска тестов (если есть) используйте:
pytest tests/
Вклад
Если хотите улучшить проект, откройте issue или pull request. Убедитесь, что все изменения проходят линтер (ruff) и тесты.
Лицензия
MIT © 2026