Практическое задание №3: Память и подтверждение действий: README.md
This commit is contained in:
+42
-67
@@ -1,100 +1,75 @@
|
|||||||
# Практическое задание №3: Память и подтверждение действий
|
# Практическое задание №3: Память и подтверждение действий
|
||||||
|
|
||||||
## Описание проекта
|
## Описание проекта
|
||||||
В этом проекте реализован агент на базе LangGraph с поддержкой:
|
В этом задании вы доработаете агента из предыдущих практических работ, добавив:
|
||||||
- **Памяти разговора** – сохранение истории сообщений в `MemorySaver`.
|
- **Память разговора** – агент будет помнить все сообщения в рамках одного диалога.
|
||||||
- **Подтверждения действия** – пауза перед вызовом любого инструмента, чтобы пользователь мог подтвердить или отменить действие.
|
- **Механизм подтверждения** каждого вызова инструмента пользователем.
|
||||||
|
|
||||||
Агент использует модель GPT‑4o‑mini и простой инструмент поиска. Вывод осуществляется через библиотеку `rich`, что делает консольный интерфейс более читаемым.
|
Для красивого вывода в консоль используется библиотека `rich`.
|
||||||
|
Агент реализован на основе LangGraph и использует OpenAI LLM через `langchain_openai`.
|
||||||
|
|
||||||
---
|
## Структура проекта
|
||||||
|
```
|
||||||
|
project/
|
||||||
|
├── solution.py # Основной скрипт с реализацией агента
|
||||||
|
└── README.md # Это файл
|
||||||
|
```
|
||||||
|
|
||||||
## Установка зависимостей
|
## Установка зависимостей
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# Создайте виртуальное окружение (необязательно, но рекомендуется)
|
# Создайте виртуальное окружение (рекомендуется)
|
||||||
python -m venv .venv
|
python -m venv .venv
|
||||||
source .venv/bin/activate # Windows: .venv\Scripts\activate
|
source .venv/bin/activate # Windows: .venv\Scripts\activate
|
||||||
|
|
||||||
# Установите все необходимые пакеты
|
# Установите все необходимые пакеты
|
||||||
pip install -r requirements.txt
|
pip install rich langgraph langchain_openai openai
|
||||||
```
|
```
|
||||||
|
|
||||||
`requirements.txt` содержит:
|
> **Важно**
|
||||||
|
> Для работы с OpenAI вам понадобится переменная окружения `OPENAI_API_KEY`.
|
||||||
```text
|
> ```bash
|
||||||
langchain-openai>=0.2.0
|
> export OPENAI_API_KEY="sk-..."
|
||||||
langgraph>=0.1.0
|
|
||||||
rich>=13.0.0
|
|
||||||
python-dotenv # для удобного управления переменными окружения (необязательно)
|
|
||||||
```
|
|
||||||
|
|
||||||
> **Важно**: Установите ключ OpenAI в переменной окружения `OPENAI_API_KEY`.
|
|
||||||
> Можно создать файл `.env` с содержимым:
|
|
||||||
> ```dotenv
|
|
||||||
> OPENAI_API_KEY=sk-...
|
|
||||||
> ```
|
> ```
|
||||||
|
|
||||||
---
|
## Запуск скрипта
|
||||||
|
|
||||||
## Запуск
|
|
||||||
|
|
||||||
### 1. Основной скрипт (`solution.py`)
|
|
||||||
```bash
|
```bash
|
||||||
python solution.py
|
python solution.py
|
||||||
```
|
```
|
||||||
Скрипт запускает интерактивный чат‑бот, который:
|
|
||||||
|
|
||||||
1. Принимает ввод пользователя.
|
Скрипт запускает интерактивный чат. Введите сообщение, и агент ответит, используя инструмент `echo_tool` при необходимости. Перед каждым вызовом инструмента пользователь будет запрашиваться о подтверждении.
|
||||||
2. Пауза перед каждым вызовом инструмента `search`.
|
|
||||||
3. Показывает пользователю сообщение о предстоящем действии и ожидает подтверждения (`y`/`n`).
|
|
||||||
4. Если пользователь подтверждает – инструмент вызывается; иначе действие отменяется.
|
|
||||||
|
|
||||||
### 2. Тестовый скрипт (если есть)
|
### Пример работы
|
||||||
Если в проекте присутствует файл `test_solution.py`, его можно запустить так:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
pytest test_solution.py
|
|
||||||
```
|
```
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## Пример использования
|
|
||||||
|
|
||||||
```text
|
|
||||||
$ python solution.py
|
$ python solution.py
|
||||||
🤖: Здравствуйте! Чем могу помочь?
|
🤖: Hello! How can I help you today?
|
||||||
🧑: Какую погоду будет завтра в Москве?
|
🧑: Tell me a joke.
|
||||||
|
🤔 (пауза) Вы хотите вызвать инструмент? [y/n]: y
|
||||||
🤖: Я собираюсь выполнить поиск по запросу "погода завтра Москва". Продолжить? (y/n) y
|
🤖: Why did the scarecrow win an award? Because he was outstanding in his field!
|
||||||
🔍 Выполняю инструмент search...
|
|
||||||
Результаты поиска по запросу 'погода завтра Москва': ...
|
|
||||||
|
|
||||||
🤖: Похоже, завтра в Москве будет облачно с небольшой вероятностью осадков. Есть ли ещё что‑то, чем могу помочь?
|
|
||||||
```
|
```
|
||||||
|
|
||||||
Если пользователь вводит `n`:
|
|
||||||
|
|
||||||
```text
|
|
||||||
🤖: Я собираюсь выполнить поиск по запросу "погода завтра Москва". Продолжить? (y/n) n
|
|
||||||
🤖: Операция отменена. Чем ещё могу помочь?
|
|
||||||
```
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## Как это работает
|
## Как это работает
|
||||||
|
|
||||||
1. **MemorySaver** сохраняет состояние разговора, позволяя агенту помнить предыдущие сообщения.
|
1. **Память**
|
||||||
2. `interrupt_before=['tools']` заставляет агент остановиться перед каждым вызовом инструмента.
|
- `MemorySaver` сохраняет состояние диалога.
|
||||||
3. Внутри цикла обработки сообщений пользователь получает запрос на подтверждение и вводит `y`/`n`.
|
- Каждый запрос отправляется с конфигурацией `{"configurable": {"thread_id": "разговор-1"}}`, чтобы все сообщения в рамках одного разговора были связаны.
|
||||||
4. После подтверждения инструмент вызывается через LangGraph, а результат возвращается в поток.
|
|
||||||
|
2. **Подтверждение**
|
||||||
|
- Параметр `interrupt_before=["tools"]` заставляет агент остановиться перед вызовом любого инструмента.
|
||||||
|
- В момент паузы пользователь получает запрос на подтверждение (`y/n`). Если ответ `n`, инструмент не вызывается, и агент продолжает работу.
|
||||||
|
|
||||||
|
3. **Инструмент**
|
||||||
|
- Простой эхо‑инструмент `echo_tool` возвращает введённый текст. Его можно заменить любым другим действием (поиск в интернете, работа с базой данных и т.д.).
|
||||||
|
|
||||||
|
## Что дальше
|
||||||
|
|
||||||
|
- Добавьте более сложные инструменты.
|
||||||
|
- Реализуйте сохранение диалогов в файл или БД для дальнейшего анализа.
|
||||||
|
- Настройте разные `thread_id` для параллельных разговоров.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## Что можно улучшить
|
**Автор:** *[Ваше имя]*
|
||||||
|
**Дата:** 27 мая 2026 г.
|
||||||
- Добавить более сложные инструменты (например, API погоды).
|
|
||||||
- Реализовать хранение истории в базе данных вместо памяти в RAM.
|
|
||||||
- Поддержать несколько параллельных разговоров с разными `thread_id`.
|
|
||||||
|
|
||||||
---
|
|
||||||
Reference in New Issue
Block a user