Практическое задание №3: Память и подтверждение действий
Описание проекта
В этом задании вы доработаете агента из предыдущих практических работ, добавив:
- Память разговора – агент будет помнить все сообщения в рамках одного диалога.
- Механизм подтверждения перед вызовом любого инструмента – пользователь сможет согласовать действие.
Для более приятного вывода используется библиотека rich.
Структура проекта
project/
├── solution.py # Основной скрипт с реализацией агента
└── README.md # Это файл
Установка зависимостей
# Создайте виртуальное окружение (рекомендуется)
python -m venv .venv
source .venv/bin/activate # Windows: .venv\Scripts\activate
# Установите все необходимые пакеты
pip install rich langgraph langchain-openai langchain-core
Важно
langgraphиlangchain-openaiавтоматически подтянут нужные версии OpenAI SDK.
Если у вас нет ключа API, создайте переменную окруженияOPENAI_API_KEY.
export OPENAI_API_KEY="sk-..."
Запуск скрипта
1️⃣ Запустите файл напрямую
python solution.py
Скрипт откроет интерактивный чат, где вы можете задавать вопросы. При каждом вызове инструмента агент сначала спросит подтверждение.
Пример
Пользователь: Привет! Агент: Здравствуйте! Чем могу помочь? Пользователь: Напиши мне список покупок. Агент: Вы хотите вызвать инструмент `echo_tool` с аргументом `text="список покупок"`? (y/n) y Эхо: список покупок
2️⃣ Запуск в режиме потоковой передачи
Если вы хотите видеть ответы по частям, можно запустить скрипт так:
python solution.py --stream
Внутри solution.py реализован флаг --stream, который переключает режим вывода.
Пример использования кода
from rich.console import Console
from langgraph.checkpoint.memory import MemorySaver
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. - Попробуйте использовать разные модели (
gpt-4o-mini,claude-3.5-sonnetи др.) – просто поменяйте аргументmodel.
Полезные ссылки
| Тема | Ссылка |
|---|---|
| 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 |