# Самокорректирующийся агент ## Описание проекта В этом проекте реализован **LangGraph**‑агент, который: 1. Выполняет задачу через заданный инструмент. 2. Проверяет результат с помощью LLM (LLM‑as‑judge). 3. При неудаче повторяет попытку до тех пор, пока результат не будет признан успешным или пока не исчерпается лимит `max_attempts`. Это демонстрация автоматической самопроверки и ретрая без участия человека. ## Стек технологий - Python 3.10+ - `langgraph` – библиотека для построения графов агентов. - `langchain-openai` (или `langchain-ollama`) – подключение к LLM. ```bash pip install langgraph langchain-openai ``` ## Структура проекта ``` ├── main.py # точка входа, содержит всю логику агента └── README.md # это файл ``` ### Файл `main.py` - **AgentState** – тип состояния графа. - **execute_task** – узел, который вызывает инструмент (в примере используется `unreliable_tool`). - **verify_result** – LLM‑ас‑джюри, оценивает результат как `success` или `failed`. - **handle_error** – увеличивает счётчик попыток и готовит повторную попытку. - Цикл: `START → execute_task → verify_result → (success|failed) → handle_error?`. ## Установка зависимостей ```bash # Создайте виртуальное окружение (рекомендовано) python -m venv .venv source .venv/bin/activate # Windows: .venv\Scripts\activate # Установите зависимости pip install langgraph langchain-openai ``` ## Запуск проекта ```bash python main.py ``` При запуске агент выполнит задачу, проверит результат и при необходимости повторит попытку. В консоли будет выводить статус каждой итерации. ### Пример вывода ``` Attempt 1: Task executed successfully. Verification result: failed Retrying... (attempt 2) Attempt 2: Tool raised an error. Error: Simulated tool failure. Retrying... (attempt 3) Attempt 3: Task executed successfully. Verification result: success Agent finished with status: success ``` ## Как использовать 1. **Измените задачу** – в `main.py` найдите строку ```python task = "Напиши короткую историю о путешествии робота." ``` и замените её на свою. 2. **Настройте LLM** – при необходимости поменяйте провайдера (OpenAI, Ollama и т.д.) в `ChatOpenAI(...)`. 3. **Установите лимит попыток** – задайте нужное значение `max_attempts` в состоянии графа. ## Тестовый инструмент В примере используется `unreliable_tool`, который случайно генерирует ошибку 30 % времени, чтобы продемонстрировать работу ретрая. Вы можете заменить его на любой реальный инструмент из LangChain. --- **Автор:** [Ваше имя] **Дата:** 2026‑05‑28