# Как контролировать ИИ-агента: цикл действий, проверки и остановки

Материалы AI Product Club · Михаил Карпов



Контролируемый ИИ-агент должен не только выбирать действие, но и проверять его результат, ограничивать повторы и уметь остановиться. Начни с короткого цикла: получить данные, подготовить черновик, проверить критерии, передать результат человеку.

Термин loop engineering здесь означает проектирование этого цикла. Это удобное рабочее название, а не отдельный общепринятый стандарт. Разберём учебный пример агента, который составляет дайджест публикаций для продуктовой команды.

## Шаг 1. Определи состояние задачи

Состояние — это не только история сообщений с моделью. Сохраняй ID задачи, список обработанных публикаций, текущий черновик, результаты проверок и количество попыток. Иначе после перезапуска агент может повторить уже выполненное действие.

```json
{
  "task_id": "digest-demo-01",
  "status": "draft",
  "attempt": 0,
  "source_ids": ["channel:101", "channel:102"],
  "checks": {"links_valid": false, "facts_reviewed": false},
  "delivery_status": "not_sent"
}
```

Разделяй «черновик готов», «проверка пройдена» и «доставлено». Эти состояния не взаимозаменяемы. Успешная генерация текста не доказывает, что адресат получил сообщение.

## Шаг 2. Сформулируй проверку до запуска

Для дайджеста можно автоматически проверить, что каждый пункт ссылается на ID из входного набора и что нет повторов. Фактическую точность пересказа сначала оценивай вручную по источнику. Стиль и полезность требуют отдельной рубрики.

Выдели критические ошибки. Например, ссылка на несуществующую публикацию блокирует отправку. Менее удачная формулировка заголовка может быть допустима для внутреннего черновика. Не объединяй всё в один непрозрачный балл.

## Шаг 3. Ограничь цикл

Вот псевдокод — схема для реализации, а не готовая библиотека:

```text
для попытки от 1 до 3:
    получить или восстановить состояние
    создать черновик по исходным публикациям
    выполнить проверки
    если критических ошибок нет:
        сохранить черновик для человека
        остановиться
    если повторяется та же ошибка:
        сохранить причину и передать человеку
        остановиться
    передать генератору конкретные замечания
после исчерпания попыток:
    завершить задачу со статусом needs_review
```

Кроме числа попыток задай общий таймаут и бюджет. Проверяющий инструмент может зависнуть независимо от качества модели. Остановка должна сохранять диагностический результат, а не только сообщение «не получилось».

## Шаг 4. Передавай конкретную обратную связь

Вместо «сделай лучше» укажи нарушение: «второй пункт содержит источник 103, которого нет во входных данных». Дай исходный текст и попроси исправить только проблему, сохранив остальные проверенные факты.

Если и генератор, и проверяющий — модели, их согласие не гарантирует правильность. Сверяй судью с человеческой разметкой и сохраняй спорные случаи. Для регулярного сравнения нужен [набор eval](/posts/ai-eval-cold-start/), который не меняется вместе с каждым промптом.

## Шаг 5. Проверь побочные эффекты

Пусть доставка сообщения завершилась, но процесс упал до записи статуса. При повторном запуске агент не должен отправить дайджест второй раз. Для этого операция доставки нуждается в защите от дублей, а не только в просьбе модели быть внимательной.

Первый пилот лучше завершать сохранением локального черновика. Автоматическую публикацию добавляй после проверки полномочий, журнала действий и повторного запуска. Для браузерных действий проверяй состояние страницы после каждого существенного шага.

[Скачать чеклист agentic loop](/downloads/agent-loop.md). В [материале Anthropic об агентах](https://www.anthropic.com/engineering/building-effective-agents) описан подход evaluator–optimizer: итерации полезны, когда есть понятные критерии и проверяемое улучшение. Для нашего дайджеста это означает сначала определить качество, затем увеличивать автономность.

Идея материала — из [поста Михаила Карпова в todo2go](https://t.me/todo2go/273). Практические примеры в руководстве учебные, если не указано иное.

