diff --git a/solutions/69a474cdc46fd26feae69896_Практическое_задание__3__Память_и_подтве/README.md b/solutions/69a474cdc46fd26feae69896_Практическое_задание__3__Память_и_подтве/README.md index 5cbd0fd..ca70550 100644 --- a/solutions/69a474cdc46fd26feae69896_Практическое_задание__3__Память_и_подтве/README.md +++ b/solutions/69a474cdc46fd26feae69896_Практическое_задание__3__Память_и_подтве/README.md @@ -1,100 +1,75 @@ # Практическое задание №3: Память и подтверждение действий ## Описание проекта -В этом проекте реализован агент на базе LangGraph с поддержкой: -- **Памяти разговора** – сохранение истории сообщений в `MemorySaver`. -- **Подтверждения действия** – пауза перед вызовом любого инструмента, чтобы пользователь мог подтвердить или отменить действие. +В этом задании вы доработаете агента из предыдущих практических работ, добавив: +- **Память разговора** – агент будет помнить все сообщения в рамках одного диалога. +- **Механизм подтверждения** каждого вызова инструмента пользователем. -Агент использует модель GPT‑4o‑mini и простой инструмент поиска. Вывод осуществляется через библиотеку `rich`, что делает консольный интерфейс более читаемым. +Для красивого вывода в консоль используется библиотека `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 -r requirements.txt +pip install rich langgraph langchain_openai openai ``` -`requirements.txt` содержит: - -```text -langchain-openai>=0.2.0 -langgraph>=0.1.0 -rich>=13.0.0 -python-dotenv # для удобного управления переменными окружения (необязательно) -``` - -> **Важно**: Установите ключ OpenAI в переменной окружения `OPENAI_API_KEY`. -> Можно создать файл `.env` с содержимым: -> ```dotenv -> OPENAI_API_KEY=sk-... +> **Важно** +> Для работы с OpenAI вам понадобится переменная окружения `OPENAI_API_KEY`. +> ```bash +> export OPENAI_API_KEY="sk-..." > ``` ---- +## Запуск скрипта -## Запуск - -### 1. Основной скрипт (`solution.py`) ```bash python solution.py ``` -Скрипт запускает интерактивный чат‑бот, который: -1. Принимает ввод пользователя. -2. Пауза перед каждым вызовом инструмента `search`. -3. Показывает пользователю сообщение о предстоящем действии и ожидает подтверждения (`y`/`n`). -4. Если пользователь подтверждает – инструмент вызывается; иначе действие отменяется. +Скрипт запускает интерактивный чат. Введите сообщение, и агент ответит, используя инструмент `echo_tool` при необходимости. Перед каждым вызовом инструмента пользователь будет запрашиваться о подтверждении. -### 2. Тестовый скрипт (если есть) -Если в проекте присутствует файл `test_solution.py`, его можно запустить так: +### Пример работы -```bash -pytest test_solution.py ``` - ---- - -## Пример использования - -```text $ python solution.py -🤖: Здравствуйте! Чем могу помочь? -🧑: Какую погоду будет завтра в Москве? - -🤖: Я собираюсь выполнить поиск по запросу "погода завтра Москва". Продолжить? (y/n) y -🔍 Выполняю инструмент search... -Результаты поиска по запросу 'погода завтра Москва': ... - -🤖: Похоже, завтра в Москве будет облачно с небольшой вероятностью осадков. Есть ли ещё что‑то, чем могу помочь? +🤖: 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! ``` -Если пользователь вводит `n`: - -```text -🤖: Я собираюсь выполнить поиск по запросу "погода завтра Москва". Продолжить? (y/n) n -🤖: Операция отменена. Чем ещё могу помочь? -``` - ---- - ## Как это работает -1. **MemorySaver** сохраняет состояние разговора, позволяя агенту помнить предыдущие сообщения. -2. `interrupt_before=['tools']` заставляет агент остановиться перед каждым вызовом инструмента. -3. Внутри цикла обработки сообщений пользователь получает запрос на подтверждение и вводит `y`/`n`. -4. После подтверждения инструмент вызывается через LangGraph, а результат возвращается в поток. +1. **Память** + - `MemorySaver` сохраняет состояние диалога. + - Каждый запрос отправляется с конфигурацией `{"configurable": {"thread_id": "разговор-1"}}`, чтобы все сообщения в рамках одного разговора были связаны. + +2. **Подтверждение** + - Параметр `interrupt_before=["tools"]` заставляет агент остановиться перед вызовом любого инструмента. + - В момент паузы пользователь получает запрос на подтверждение (`y/n`). Если ответ `n`, инструмент не вызывается, и агент продолжает работу. + +3. **Инструмент** + - Простой эхо‑инструмент `echo_tool` возвращает введённый текст. Его можно заменить любым другим действием (поиск в интернете, работа с базой данных и т.д.). + +## Что дальше + +- Добавьте более сложные инструменты. +- Реализуйте сохранение диалогов в файл или БД для дальнейшего анализа. +- Настройте разные `thread_id` для параллельных разговоров. --- -## Что можно улучшить - -- Добавить более сложные инструменты (например, API погоды). -- Реализовать хранение истории в базе данных вместо памяти в RAM. -- Поддержать несколько параллельных разговоров с разными `thread_id`. - ---- \ No newline at end of file +**Автор:** *[Ваше имя]* +**Дата:** 27 мая 2026 г. \ No newline at end of file