75 lines
3.8 KiB
Markdown
75 lines
3.8 KiB
Markdown
# Практическое задание №3: Память и подтверждение действий
|
||
|
||
## Описание проекта
|
||
В этом задании вы доработаете агента из предыдущих практических работ, добавив:
|
||
- **Память разговора** – агент будет помнить все сообщения в рамках одного диалога.
|
||
- **Механизм подтверждения** каждого вызова инструмента пользователем.
|
||
|
||
Для красивого вывода в консоль используется библиотека `rich`.
|
||
Агент реализован на основе LangGraph и использует OpenAI LLM через `langchain_openai`.
|
||
|
||
## Структура проекта
|
||
```
|
||
project/
|
||
├── solution.py # Основной скрипт с реализацией агента
|
||
└── README.md # Это файл
|
||
```
|
||
|
||
## Установка зависимостей
|
||
|
||
```bash
|
||
# Создайте виртуальное окружение (рекомендуется)
|
||
python -m venv .venv
|
||
source .venv/bin/activate # Windows: .venv\Scripts\activate
|
||
|
||
# Установите все необходимые пакеты
|
||
pip install rich langgraph langchain_openai openai
|
||
```
|
||
|
||
> **Важно**
|
||
> Для работы с OpenAI вам понадобится переменная окружения `OPENAI_API_KEY`.
|
||
> ```bash
|
||
> export OPENAI_API_KEY="sk-..."
|
||
> ```
|
||
|
||
## Запуск скрипта
|
||
|
||
```bash
|
||
python solution.py
|
||
```
|
||
|
||
Скрипт запускает интерактивный чат. Введите сообщение, и агент ответит, используя инструмент `echo_tool` при необходимости. Перед каждым вызовом инструмента пользователь будет запрашиваться о подтверждении.
|
||
|
||
### Пример работы
|
||
|
||
```
|
||
$ python solution.py
|
||
🤖: Hello! How can I help you today?
|
||
🧑: Tell me a joke.
|
||
🤔 (пауза) Вы хотите вызвать инструмент? [y/n]: y
|
||
🤖: Why did the scarecrow win an award? Because he was outstanding in his field!
|
||
```
|
||
|
||
## Как это работает
|
||
|
||
1. **Память**
|
||
- `MemorySaver` сохраняет состояние диалога.
|
||
- Каждый запрос отправляется с конфигурацией `{"configurable": {"thread_id": "разговор-1"}}`, чтобы все сообщения в рамках одного разговора были связаны.
|
||
|
||
2. **Подтверждение**
|
||
- Параметр `interrupt_before=["tools"]` заставляет агент остановиться перед вызовом любого инструмента.
|
||
- В момент паузы пользователь получает запрос на подтверждение (`y/n`). Если ответ `n`, инструмент не вызывается, и агент продолжает работу.
|
||
|
||
3. **Инструмент**
|
||
- Простой эхо‑инструмент `echo_tool` возвращает введённый текст. Его можно заменить любым другим действием (поиск в интернете, работа с базой данных и т.д.).
|
||
|
||
## Что дальше
|
||
|
||
- Добавьте более сложные инструменты.
|
||
- Реализуйте сохранение диалогов в файл или БД для дальнейшего анализа.
|
||
- Настройте разные `thread_id` для параллельных разговоров.
|
||
|
||
---
|
||
|
||
**Автор:** *[Ваше имя]*
|
||
**Дата:** 27 мая 2026 г. |