# Планирующий агент (LangGraph) **Экзаменационное практическое задание** – собрать LangGraph‑агента с отдельным этапом планирования. Сначала LLM разбивает задачу на шаги, затем выполняет их по очереди и выдаёт итоговый ответ. --- ## 📖 Описание * **Язык**: Python 3.10+ * **Библиотеки**: * `langgraph` – граф с прерываниями и чекпоинтером * `langchain` + `langchain-openai` – вызов LLM * `questionary` – интерактивный ввод в консоли > **Важно**: проект рассчитан на использование модели OpenAI. > Если вы хотите использовать другую модель, настройте `ChatOpenAI` в `solution.py`. --- ## ⚙️ Установка ```bash # Клонируйте репозиторий git clone https://github.com/your-username/planning-agent.git cd planning-agent # Создайте виртуальное окружение (рекомендуется) python -m venv .venv source .venv/bin/activate # Windows: .venv\Scripts\activate # Установите зависимости pip install langgraph langchain langchain-openai questionary ``` > **API‑ключ** > Установите переменную окружения `OPENAI_API_KEY` с вашим ключом OpenAI: ```bash export OPENAI_API_KEY="sk-..." ``` --- ## 🚀 Запуск ```bash python solution.py ``` ### Что происходит 1. **Ввод задачи** – пользователь вводит задачу, которую нужно решить. 2. **Планирование** – LLM генерирует список шагов (`plan`). 3. **Выполнение** – каждый шаг выполняется последовательно, пользователь может просматривать результаты. 4. **Итог** – после выполнения всех шагов выводится финальный ответ. --- ## 📄 Пример использования ```text $ python solution.py Введите задачу: Напиши план по изучению Python за 3 месяца План: 1. Изучить основы синтаксиса 2. Практиковаться с проектами 3. Изучить продвинутые темы 4. Пройти сертификацию Выберите шаг для выполнения (1-4): 1 Результат шага 1: ... Выберите шаг для выполнения (1-4): 2 Результат шага 2: ... ... Итоговый ответ: ... ``` --- ## 📂 Структура проекта ``` . ├── solution.py # Основной скрипт ├── README.md # Это файл └── requirements.txt # (опционально) список зависимостей ``` --- ## 🔧 Настройка * **Параметры модели** – можно изменить в `solution.py` (например, `temperature`, `max_tokens`). * **Чекпоинтер** – по умолчанию используется `SqliteSaver`. Путь к базе можно задать через `SqliteSaver.from_conn_str("sqlite:///graph_state.db")`. * **Интерактивность** – `questionary` обеспечивает простое меню выбора. Если нужно убрать интерактивность, замените `select` и `text` на обычный `input()`. --- ## 📜 Лицензия MIT © 2026 ---```