Files
69a474cdc46fd26feae69896_--…/README.md
T

75 lines
3.8 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: Память и подтверждение действий
## Описание проекта
В этом задании вы доработаете агента из предыдущих практических работ, добавив:
- **Память разговора** – агент будет помнить все сообщения в рамках одного диалога.
- **Механизм подтверждения** каждого вызова инструмента пользователем.
Для красивого вывода в консоль используется библиотека `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 г.