Практическое задание №3: Память и подтверждение действий: README.md

This commit is contained in:
2026-05-27 14:22:50 +00:00
parent 2ab98592f3
commit 1a4c854b85
@@ -1,13 +1,15 @@
# Практическое задание №3: Память и подтверждение действий # Практическое задание №3 Память и подтверждение действий
## Описание проекта ## Описание проекта
В этом задании вы доработаете агента из предыдущих практических работ, добавив: В этом задании вы дорабатываете агента из предыдущих практических работ.
- **Память разговора** – агент будет помнить все сообщения в рамках одного диалога. Новые возможности:
- **Механизм подтверждения** перед вызовом любого инструмента – пользователь сможет согласовать действие.
Для более приятного вывода используется библиотека `rich`. * **Память разговора** – агент запоминает все сообщения в рамках одного диалога.
* **Подтверждение перед вызовом инструмента** – пользователь подтверждает каждый запрос к инструменту.
## Структура проекта Для красивого вывода используется библиотека `rich`.
## Структура репозитория
``` ```
project/ project/
├── solution.py # Основной скрипт с реализацией агента ├── solution.py # Основной скрипт с реализацией агента
@@ -24,101 +26,77 @@ python -m venv .venv
source .venv/bin/activate # Windows: .venv\Scripts\activate source .venv/bin/activate # Windows: .venv\Scripts\activate
# Установите все необходимые пакеты # Установите все необходимые пакеты
pip install rich langgraph langchain-openai langchain-core pip install langchain-openai langgraph rich
``` ```
> **Важно** > **Важно**
> `langgraph` и `langchain-openai` автоматически подтянут нужные версии OpenAI SDK. > Для работы с `ChatOpenAI` вам понадобится переменная окружения `OPENAI_API_KEY`.
> Если у вас нет ключа API, создайте переменную окружения `OPENAI_API_KEY`. > ```bash
> export OPENAI_API_KEY="sk-..."
```bash > ```
export OPENAI_API_KEY="sk-..."
```
--- ---
## Запуск скрипта ## Запуск проекта
### 1️⃣ Запустите файл напрямую ### 1. Откройте терминал и перейдите в корневую папку проекта.
```bash
cd /путь/к/project
```
### 2. Активируйте виртуальное окружение (если не сделали это ранее).
```bash
source .venv/bin/activate # Windows: .venv\Scripts\activate
```
### 3. Запустите скрипт `solution.py`.
```bash ```bash
python solution.py python solution.py
``` ```
Скрипт откроет интерактивный чат, где вы можете задавать вопросы. При каждом вызове инструмента агент сначала спросит подтверждение. > Скрипт запускает интерактивный диалог с агентом.
> Введите сообщение, после чего агент предложит вам подтвердить вызов инструмента (в данном случае – эхо‑инструмент).
> Нажмите **Y** для подтверждения или **N** для отмены.
> **Пример** ---
> ```
> Пользователь: Привет!
> Агент: Здравствуйте! Чем могу помочь?
> Пользователь: Напиши мне список покупок.
> Агент: Вы хотите вызвать инструмент `echo_tool` с аргументом `text="список покупок"`? (y/n)
> y
> Эхо: список покупок
> ```
### 2️⃣ Запуск в режиме потоковой передачи ## Пример использования
Если вы хотите видеть ответы по частям, можно запустить скрипт так: ```text
$ python solution.py
```bash 🤖 Здравствуйте! Чем могу помочь?
python solution.py --stream User: Какой сегодня день недели?
🤖 (подтверждение) Вы хотите вызвать инструмент echo_tool с аргументом {"message": "Какой сегодня день недели?"}?
Y
✅ Эхо: Какой сегодня день недели?
🤖 Что ещё интересует вас?
``` ```
Внутри `solution.py` реализован флаг `--stream`, который переключает режим вывода. * `🤖` вывод агента.
* `User:` ваш ввод.
* `✅` – результат работы инструмента после подтверждения.
--- ---
## Пример использования кода ## Как это работает
```python 1. **MemorySaver** сохраняет все сообщения в состоянии графа, позволяя агенту «помнить» историю диалога.
from rich.console import Console 2. Параметр `interrupt_before=['tools']` заставляет агент остановиться перед каждым вызовом инструмента и запросить подтверждение от пользователя.
from langgraph.checkpoint.memory import MemorySaver 3. Библиотека `rich` используется для красивого форматирования вывода в консоли.
from langgraph.prebuilt import create_chat_agent
from langchain_openai import ChatOpenAI
# 1. Консоль для красивого вывода
console = Console()
# 2. Создаём LLM
llm = ChatOpenAI(model="gpt-3.5-turbo", temperature=0)
# 3. Определяем инструмент
def echo_tool(args: dict) -> str:
return f"Эхо: {args.get('text', '')}"
# 4. Память и агент с паузой перед инструментом
memory = MemorySaver()
agent = create_chat_agent(
llm=llm,
tools=[echo_tool],
system_prompt="Ты — полезный ассистент, который сначала спрашивает подтверждение перед вызовом инструмента.",
checkpointer=memory,
interrupt_before=['tools'], # остановка перед каждым инструментом
)
# 5. Запускаем диалог
config = {"configurable": {"thread_id": "разговор-1"}}
for chunk in agent.stream({"messages": [HumanMessage(content="Напиши мне список покупок")]}, config=config):
console.print(chunk)
```
--- ---
## Что дальше? ## Что дальше
- Добавьте собственные инструменты (например, поиск в интернете, работа с файлами и т.д.). * Добавьте собственные инструменты (например, поиск в интернете, вычисления и т.д.).
- Изучите другие параметры `create_chat_agent`, такие как `interrupt_after` или `max_output_tokens`. * Измените `system_prompt`, чтобы агент отвечал в нужном стиле.
- Попробуйте использовать разные модели (`gpt-4o-mini`, `claude-3.5-sonnet` и др.) – просто поменяйте аргумент `model`. * Попробуйте запустить несколько диалогов с разными `thread_id` – они будут независимыми.
--- ---
## Полезные ссылки ## Поддержка
| Тема | Ссылка | Если возникли вопросы или проблемы, откройте issue в репозитории.
|------|--------|
| LangGraph Docs | https://langgraph.org/docs/ |
| LangChain OpenAI | https://python.langchain.com/docs/integrations/providers/openai |
| Rich Library | https://rich.readthedocs.io/en/latest/introduction.html |
---