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

This commit is contained in:
2026-06-03 09:24:40 +00:00
parent e9fac13f07
commit e89d49c6d4
+97 -2
View File
@@ -1,3 +1,98 @@
# task-6a1864fa-ekzamen-samokorrektiruyus
# Самокорректирующийся агент (LangGraph)
Решения домашних заданий
## Описание
Проект демонстрирует реализацию **самокорректирующегося агента** на базе `LangGraph`.
Агент получает задачу, выполняет её через ненадёжный инструмент (`unreliable_tool`), затем LLM‑as‑judge проверяет результат. Если проверка не прошла и количество попыток меньше `max_attempts`, агент повторяет выполнение. Цикл продолжается до получения статуса `success` или исчерпания лимита попыток.
### Состояние графа (`AgentState`)
```python
class AgentState(TypedDict):
task: str # исходная задача
result: str # результат выполнения инструмента
attempts: int # текущая попытка (начинается с 0)
status: str # pending | success | failed | max_attempts
error: Optional[str] # текст ошибки, если возникла
max_attempts: int # лимит попыток
```
### Узлы графа
| Узел | Роль |
|-----------------|----------------------------------------------------------------------|
| `execute_task` | Вызывает `unreliable_tool` (с ~30% вероятностью бросает `ValueError`). |
| `verify_result` | LLM‑as‑judge оценивает результат и возвращает строго `"success"` или `"failed"`. |
| `handle_error` | Увеличивает `attempts`, сохраняет ошибку и готовит к повторному выполнению. |
### Граф
```
START → execute_task → verify_result
↓ success → END
↓ failed & attempts < max → handle_error → execute_task
↓ max_attempts → END
```
## Установка зависимостей
```bash
# Рекомендуется использовать виртуальное окружение
python -m venv venv
source venv/bin/activate # Windows: venv\Scripts\activate
# Установить необходимые пакеты
pip install langgraph langchain-openai langchain-ollama
```
> **Важно:** Для работы с OpenAI необходимо задать переменную окружения `OPENAI_API_KEY`.
> Если вы предпочитаете Ollama, установите локальную модель и используйте `ChatOllama` вместо `ChatOpenAI` (см. комментарии в коде).
## Запуск
В проекте единственный исполняемый файл — `main.py`.
```bash
python main.py
```
При запуске скрипт выводит:
- номер текущей попытки,
- результат выполнения инструмента,
- вердикт LLMasjudge,
- финальный статус (`success`, `failed` или `max_attempts`).
### Пример вывода
```
Attempt 0: Result = 42, Judge = failed
Attempt 1: Result = 42, Judge = success
Final status: success
```
Если все попытки исчерпаны:
```
Attempt 0: Result = Error: ..., Judge = failed
Attempt 1: Result = Error: ..., Judge = failed
Attempt 2: Result = Error: ..., Judge = failed
Final status: max_attempts
```
## Как работает пример
1. **`unreliable_tool`** – простая функция, которая с вероятностью ~30% бросает `ValueError`, иначе возвращает фиксированный результат (например, `"42"`).
2. **LLMasjudge** – запрос к модели (OpenAI GPT3.5‑turbo или локальная Ollama) с промптом, требующим ответить **только** словом `success` или `failed` в зависимости от того, совпадает ли результат с ожидаемым значением.
3. Граф построен через `StateGraph` и скомпилирован в исполняемый объект, который запускается в цикле до достижения терминального узла.
## Настройка
- Изменить `task` и ожидаемый результат в функции `unreliable_tool` внутри `main.py`.
- Подстроить `max_attempts` в начальном состоянии (по умолчанию `3`).
- Переключиться между OpenAI и Ollama, заменив импорт и инициализацию LLM:
```python
# Для OpenAI
llm = ChatOpenAI(model="gpt-3.5-turbo", temperature=0)
# Для Ollama (убедитесь, что модель запущена: ollama run <model>)
# from langchain_ollama import ChatOllama
# llm = ChatOllama(model="llama3", temperature=0)
```
## Требования
- Python 3.10+
- Доступ к интернету (для OpenAI) **или** запущенный локальный Ollama сервер.
---
*Это README охватывает только основной файл проекта `main.py`. При добавлении новых файлов достаточно дополнить разделы «Запуск» и «Пример использования» соответствующими инструкциями.*