93 lines
4.3 KiB
Markdown
93 lines
4.3 KiB
Markdown
# Самокорректирующийся агент
|
||
|
||
## Описание проекта
|
||
Проект реализует **LangGraph**‑агента, который:
|
||
1. Выполняет задачу через инструмент (или набор инструментов).
|
||
2. Проверяет результат с помощью LLM‑судьи (`LLM-as-judge`).
|
||
3. При неудаче повторяет попытку до тех пор, пока не получит `success`
|
||
или не исчерпает заданный лимит `max_attempts`.
|
||
|
||
Это демонстрация автоматической самопроверки и ретрая в стиле HITL (Human‑in‑the‑Loop) без участия человека.
|
||
|
||
## Стек технологий
|
||
- Python 3.10+
|
||
- `langgraph` – библиотека для построения графов агентов.
|
||
- `langchain-openai` или `langchain-ollama` – LLM‑интеграция (OpenAI API либо локальный Ollama).
|
||
|
||
## Установка зависимостей
|
||
|
||
```bash
|
||
# Создайте виртуальное окружение (рекомендуется)
|
||
python -m venv .venv
|
||
source .venv/bin/activate # Windows: .venv\Scripts\activate
|
||
|
||
# Установите зависимости
|
||
pip install langgraph langchain-openai # или langchain-ollama
|
||
```
|
||
|
||
> **Важно**
|
||
> Если вы используете `langchain-openai`, убедитесь, что переменная окружения `OPENAI_API_KEY` установлена:
|
||
> ```bash
|
||
> export OPENAI_API_KEY="sk-..."
|
||
> ```
|
||
|
||
## Запуск проекта
|
||
|
||
### 1. Основной скрипт `main.py`
|
||
Скрипт запускает агент с заданной задачей и выводит результат.
|
||
|
||
```bash
|
||
python main.py
|
||
```
|
||
|
||
Внутри `main.py` задаётся:
|
||
- `task`: исходная задача (строка).
|
||
- `max_attempts`: максимальное число попыток.
|
||
- `unreliable_tool`: пример инструмента, который иногда генерирует ошибку.
|
||
|
||
### 2. Пример использования в интерактивном режиме
|
||
|
||
```python
|
||
from main import run_agent
|
||
|
||
result = run_agent(
|
||
task="Напиши короткую историю о путешествии робота",
|
||
max_attempts=5,
|
||
)
|
||
print(result) # {"status": "success", "attempts": 3, ...}
|
||
```
|
||
|
||
> `run_agent` – публичная функция из `main.py`, которую можно импортировать в другие скрипты.
|
||
|
||
## Пример вывода
|
||
|
||
```text
|
||
Attempt 1: Выполнение задачи...
|
||
Result: "Робот отправился в космос..."
|
||
Проверка результата... Неудача. Ошибка: Недостаточно деталей.
|
||
Повторяем попытку...
|
||
|
||
Attempt 2: Выполнение задачи...
|
||
Result: "Робот отправился в космос, но забыл зарядку..."
|
||
Проверка результата... Успех!
|
||
```
|
||
|
||
## Как это работает
|
||
|
||
1. **execute_task** – вызывает `unreliable_tool` (или любой другой инструмент) и сохраняет результат.
|
||
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 (замените на актуальную) |