Экзамен: Самокорректирующийся агент: README.md

This commit is contained in:
2026-05-28 16:08:53 +00:00
parent 6b002f0b12
commit d4f49439bc
+60 -56
View File
@@ -1,89 +1,93 @@
# Самокорректирующийся агент # Самокорректирующийся агент
## Описание проекта ## Описание проекта
В этом проекте реализован **LangGraph**‑агент, который: Проект реализует **LangGraph**‑агента, который:
1. Выполняет задачу через заданный инструмент. 1. Выполняет задачу через инструмент (или набор инструментов).
2. Проверяет результат с помощью LLM (LLMasjudge). 2. Проверяет результат с помощью LLM‑судьи (`LLM-as-judge`).
3. При неудаче повторяет попытку до тех пор, пока результат не будет признан успешным 3. При неудаче повторяет попытку до тех пор, пока не получит `success`
или пока не исчерпается лимит `max_attempts`. или не исчерпает заданный лимит `max_attempts`.
Это демонстрация автоматической самопроверки и ретрая без участия человека. Это демонстрация автоматической самопроверки и ретрая в стиле HITL (HumanintheLoop) без участия человека.
## Стек технологий ## Стек технологий
- Python 3.10+ - Python 3.10+
- `langgraph` – библиотека для построения графов агентов. - `langgraph` – библиотека для построения графов агентов.
- `langchain-openai` (или `langchain-ollama`) подключение к LLM. - `langchain-openai` или `langchain-ollama` LLM‑интеграция (OpenAI API либо локальный Ollama).
```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 ```bash
# Создайте виртуальное окружение (рекомендовано) # Создайте виртуальное окружение (рекомендуется)
python -m venv .venv python -m venv .venv
source .venv/bin/activate # Windows: .venv\Scripts\activate source .venv/bin/activate # Windows: .venv\Scripts\activate
# Установите зависимости # Установите зависимости
pip install langgraph langchain-openai pip install langgraph langchain-openai # или langchain-ollama
``` ```
> **Важно**
> Если вы используете `langchain-openai`, убедитесь, что переменная окружения `OPENAI_API_KEY` установлена:
> ```bash
> export OPENAI_API_KEY="sk-..."
> ```
## Запуск проекта ## Запуск проекта
### 1. Основной скрипт `main.py`
Скрипт запускает агент с заданной задачей и выводит результат.
```bash ```bash
python main.py python main.py
``` ```
При запуске агент выполнит задачу, проверит результат и при необходимости повторит попытку. В консоли будет выводить статус каждой итерации. Внутри `main.py` задаётся:
- `task`: исходная задача (строка).
- `max_attempts`: максимальное число попыток.
- `unreliable_tool`: пример инструмента, который иногда генерирует ошибку.
### Пример вывода ### 2. Пример использования в интерактивном режиме
``` ```python
Attempt 1: Task executed successfully. from main import run_agent
Verification result: failed
Retrying... (attempt 2)
Attempt 2: Tool raised an error. result = run_agent(
Error: Simulated tool failure. task="Напиши короткую историю о путешествии робота",
Retrying... (attempt 3) max_attempts=5,
)
Attempt 3: Task executed successfully. print(result) # {"status": "success", "attempts": 3, ...}
Verification result: success
Agent finished with status: success
``` ```
## Как использовать > `run_agent` – публичная функция из `main.py`, которую можно импортировать в другие скрипты.
1. **Измените задачу** в `main.py` найдите строку ## Пример вывода
```python
task = "Напиши короткую историю о путешествии робота."
```
и замените её на свою.
2. **Настройте LLM** – при необходимости поменяйте провайдера (OpenAI, Ollama и т.д.) в `ChatOpenAI(...)`.
3. **Установите лимит попыток** – задайте нужное значение `max_attempts` в состоянии графа.
## Тестовый инструмент ```text
Attempt 1: Выполнение задачи...
Result: "Робот отправился в космос..."
Проверка результата... Неудача. Ошибка: Недостаточно деталей.
Повторяем попытку...
В примере используется `unreliable_tool`, который случайно генерирует ошибку 30 % времени, чтобы продемонстрировать работу ретрая. Вы можете заменить его на любой реальный инструмент из LangChain. Attempt 2: Выполнение задачи...
Result: "Робот отправился в космос, но забыл зарядку..."
Проверка результата... Успех!
```
--- ## Как это работает
**Автор:** [Ваше имя] 1. **execute_task** вызывает `unreliable_tool` (или любой другой инструмент) и сохраняет результат.
**Дата:** 20260528 2. **verify_result** – LLM оценивает строку результата как `success` или `failed`.
3. Если `failed` и попыток осталось, **handle_error** увеличивает счётчик и переходит к `execute_task` снова.
4. После достижения `max_attempts` агент завершается со статусом `max_attempts`.
## Расширение проекта
- Добавьте свои инструменты в список `tools`.
- Настройте более сложные правила проверки результата, используя собственный шаблон LLM‑судьи.
- Интегрируйте с другими LLM (Claude, Gemini) через `langchain-openai`/`langchain-google-genai`.
## Лицензия
MIT License – свободно используйте и модифицируйте этот код для своих проектов.
---
**Ссылка на репозиторий:** https://github.com/your-username/self-correcting-agent (замените на актуальную)