Короткий ответ

Backpressure — это обратная связь, которая не даёт агенту бесконечно двигаться в удобную для него сторону.

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

Почему «продолжай» не работает

Когда человек пишет агенту «попробуй ещё», агент часто получает только эмоциональный сигнал, но не получает нового знания:

  • что именно было неправильно;
  • какой результат считался бы правильным;
  • какой файл или тест нужно проверить;
  • сколько попыток ещё разрешено.

В результате модель может менять формулировки, переставлять код или объяснять ошибку, не приближаясь к решению.

Backpressure превращает недовольство в контракт:

действие → проверка → конкретная ошибка → исправление → новая проверка

Уровни обратного давления

1. Синтаксический

Код должен парситься, JSON — соответствовать схеме, Markdown — иметь обязательные поля.

2. Поведенческий

Тест проверяет не наличие строки, а действие: функция возвращает ожидаемый результат, файл создаётся, ошибка обрабатывается.

3. Контрактный

Система проверяет API, структуру артефакта, число строк или обязательные разделы.

4. Целевой

Результат отвечает исходной задаче, а не только проходит технический тест.

5. Политический

Агент не сделал запрещённое: не отправил сообщение, не раскрыл секрет, не изменил исходник без разрешения.

Сильный harness использует несколько уровней, потому что зелёный unit-test не доказывает, что агент решил задачу пользователя.

Минимальный контур

for attempt in range(MAX_ATTEMPTS):
    result = agent.run(task)
    report = evaluator.check(result)

    if report.passed:
        save(result)
        return "done"

    save_failure(report)
    task = task.with_feedback(report.actionable_errors)

return "bounded_failed"

Главное здесь — actionable_errors. Сообщение «не прошло» почти бесполезно. Сообщение «в строке 18 отсутствует поле sources, а в строке 23 дата не соответствует ISO-формату» уже задаёт следующий шаг.

Backpressure — не то же самое, что retry

Retry просто повторяет запрос после сбоя сети или временной ошибки.

Backpressure меняет работу агента:

  • проверяет артефакт;
  • сообщает причину отказа;
  • ограничивает число попыток;
  • оставляет журнал;
  • может остановить задачу окончательно.

Если API вернул HTTP 503, retry может быть разумным. Если статья не содержит источников, повторить генерацию без нового условия — слабая стратегия.

Как связать backpressure с evals

Evaluation — это не только оценка модели в лаборатории. Это повторяемый способ проверить, как система ведёт себя на наборе кейсов.

Минимальный eval-набор для агента может содержать:

case_001: обычная задача
case_002: неполные входные данные
case_003: ошибка инструмента
case_004: конфликтующие инструкции
case_005: попытка опасного действия

Для каждого кейса нужны ожидаемый результат, допустимые варианты и причина, по которой система должна остановиться. OpenAI Evals API, например, разделяет evaluation, источник данных и критерии проверки. Это полезная модель даже для локального простого скрипта.

Пример для редакционного агента

Плохо:

Напиши статью и проверь, что она хорошая.

Лучше:

Сформируй черновик только если:
1. есть один главный тезис;
2. у каждого внешнего факта есть источник;
3. есть ограничение или контраргумент;
4. frontmatter заполнен;
5. нет повторяющегося текста из источника.

Если условие не выполнено, сохрани отчёт об ошибках и не ставь статус published.

Так агент не может спрятать недоделанную работу за уверенным финальным абзацем.

Что делать, если агент застрял

После двух–трёх одинаковых провалов не нужно просто увеличивать лимит. Зафиксируйте:

  • повторяющийся паттерн;
  • последнюю новую информацию;
  • какой validator отказал;
  • какая гипотеза исчерпана;
  • нужен ли другой инструмент или человек.

Иногда лучший результат — bounded_failed с хорошим отчётом, а не десятый вариант неправильного решения.

Где backpressure может навредить

Слишком жёсткий тест тоже опасен:

  • он может требовать один конкретный путь вместо правильного результата;
  • его можно случайно настроить на проверку формата, а не смысла;
  • модель начнёт оптимизировать под тест;
  • устаревший критерий будет отклонять полезные решения.

Поэтому validator должен проверяться отдельно и время от времени пересматриваться человеком.

Что запомнить

Backpressure — это не наказание агенту. Это способ вернуть его от красивой импровизации к измеримой задаче.

Сначала формулируйте критерий готовности. Потом разрешайте агенту писать, запускать и исправлять. Если тест не может объяснить, что именно не так, он ещё не готов быть частью контура.

Следующий гайд: Как агент улучшает себя: benchmark, гипотеза и rollback.

Что читать дальше

Частые вопросы

Что главное в гайде «Backpressure для AI-агента: как тесты не дают ему сойти с задачи»?

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

Нужно ли внедрять всё сразу?

Нет. Начните с одной проверяемой задачи, а следующий слой добавляйте после результата.

Что проверить перед запуском?

Права доступа, границы задачи, критерий готовности и возможность отката.

Источники

Редакторский статус: REVIEW. Нужны проверка терминов и пример, который читатель сможет запустить без платного API.