diff --git a/README.md b/README.md index 6c6d582..9611a3a 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,122 @@ -# prakticheskoe-zadanie-3-pamyat-i-podtverzhdenie-de +# Практическое задание №3 +## Память и подтверждение действий -Решение: Практическое задание №3: Память и подтверждение действий \ No newline at end of file +> **Цель** – доработать агента из предыдущих заданий: добавить память разговора и механизм подтверждения каждого вызова инструмента пользователем. + +--- + +## Описание проекта + +В этом репозитории реализован простой чат‑бот на базе 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 \ No newline at end of file