diff --git a/solutions/69a474cdc46fd26feae69896_Практическое_задание__3__Память_и_подтве/README.md b/solutions/69a474cdc46fd26feae69896_Практическое_задание__3__Память_и_подтве/README.md index 93622cc..c0e5347 100644 --- a/solutions/69a474cdc46fd26feae69896_Практическое_задание__3__Память_и_подтве/README.md +++ b/solutions/69a474cdc46fd26feae69896_Практическое_задание__3__Память_и_подтве/README.md @@ -1,13 +1,15 @@ -# Практическое задание №3: Память и подтверждение действий +# Практическое задание №3 – Память и подтверждение действий ## Описание проекта -В этом задании вы доработаете агента из предыдущих практических работ, добавив: -- **Память разговора** – агент будет помнить все сообщения в рамках одного диалога. -- **Механизм подтверждения** перед вызовом любого инструмента – пользователь сможет согласовать действие. +В этом задании вы дорабатываете агента из предыдущих практических работ. +Новые возможности: -Для более приятного вывода используется библиотека `rich`. +* **Память разговора** – агент запоминает все сообщения в рамках одного диалога. +* **Подтверждение перед вызовом инструмента** – пользователь подтверждает каждый запрос к инструменту. -## Структура проекта +Для красивого вывода используется библиотека `rich`. + +## Структура репозитория ``` project/ ├── solution.py # Основной скрипт с реализацией агента @@ -24,101 +26,77 @@ python -m venv .venv 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. -> Если у вас нет ключа API, создайте переменную окружения `OPENAI_API_KEY`. - -```bash -export OPENAI_API_KEY="sk-..." -``` +> Для работы с `ChatOpenAI` вам понадобится переменная окружения `OPENAI_API_KEY`. +> ```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 python solution.py ``` -Скрипт откроет интерактивный чат, где вы можете задавать вопросы. При каждом вызове инструмента агент сначала спросит подтверждение. +> Скрипт запускает интерактивный диалог с агентом. +> Введите сообщение, после чего агент предложит вам подтвердить вызов инструмента (в данном случае – эхо‑инструмент). +> Нажмите **Y** для подтверждения или **N** для отмены. -> **Пример** -> ``` -> Пользователь: Привет! -> Агент: Здравствуйте! Чем могу помочь? -> Пользователь: Напиши мне список покупок. -> Агент: Вы хотите вызвать инструмент `echo_tool` с аргументом `text="список покупок"`? (y/n) -> y -> Эхо: список покупок -> ``` +--- -### 2️⃣ Запуск в режиме потоковой передачи +## Пример использования -Если вы хотите видеть ответы по частям, можно запустить скрипт так: - -```bash -python solution.py --stream +```text +$ python solution.py +🤖 Здравствуйте! Чем могу помочь? +User: Какой сегодня день недели? +🤖 (подтверждение) Вы хотите вызвать инструмент echo_tool с аргументом {"message": "Какой сегодня день недели?"}? +Y +✅ Эхо: Какой сегодня день недели? +🤖 Что ещё интересует вас? ``` -Внутри `solution.py` реализован флаг `--stream`, который переключает режим вывода. +* `🤖` – вывод агента. +* `User:` – ваш ввод. +* `✅` – результат работы инструмента после подтверждения. --- -## Пример использования кода +## Как это работает -```python -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) -``` +1. **MemorySaver** сохраняет все сообщения в состоянии графа, позволяя агенту «помнить» историю диалога. +2. Параметр `interrupt_before=['tools']` заставляет агент остановиться перед каждым вызовом инструмента и запросить подтверждение от пользователя. +3. Библиотека `rich` используется для красивого форматирования вывода в консоли. --- -## Что дальше? +## Что дальше -- Добавьте собственные инструменты (например, поиск в интернете, работа с файлами и т.д.). -- Изучите другие параметры `create_chat_agent`, такие как `interrupt_after` или `max_output_tokens`. -- Попробуйте использовать разные модели (`gpt-4o-mini`, `claude-3.5-sonnet` и др.) – просто поменяйте аргумент `model`. +* Добавьте собственные инструменты (например, поиск в интернете, вычисления и т.д.). +* Измените `system_prompt`, чтобы агент отвечал в нужном стиле. +* Попробуйте запустить несколько диалогов с разными `thread_id` – они будут независимыми. --- -## Полезные ссылки +## Поддержка -| Тема | Ссылка | -|------|--------| -| 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 | - ---- \ No newline at end of file +Если возникли вопросы или проблемы, откройте issue в репозитории. \ No newline at end of file