Files
prakticheskoe-zadanie-3-pam…/README.md
T

122 lines
4.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Практическое задание №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