Files

4.8 KiB

Практическое задание №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