Добавлен README.md
This commit is contained in:
@@ -1,3 +1,122 @@
|
|||||||
# prakticheskoe-zadanie-3-pamyat-i-podtverzhdenie-de
|
# Практическое задание №3
|
||||||
|
## Память и подтверждение действий
|
||||||
|
|
||||||
Решение: Практическое задание №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
|
||||||
Reference in New Issue
Block a user