Harness — система исполнения вокруг модели: она управляет циклом действий, инструментами, контекстом, состоянием и ошибками. Для рабочего агента важно сохранять подтвержденные результаты, различать причины сбоев и продолжать задачу без повторного выполнения внешних действий.
Одна модель хорошо проходит демонстрацию и проваливает рабочий процесс. Причина может быть не в её интеллекте: задача оборвалась, инструмент вернул неоднозначный ответ, подтверждение потерялось, а следующая попытка создала дубль. За эту часть системы отвечает harness.
Проследим одну заявку
Агент получил просьбу собрать документы для договора. Он должен найти клиента, проверить комплектность, запросить недостающее и сохранить результат. Модель решает, что делать следующим. Но кто ограничит число попыток, сохранит ответы инструментов и восстановит работу после перезапуска?
Harness — окружающая модель система исполнения. В неё входят цикл обращения к модели, доступные инструменты, управление контекстом и состоянием, обработка ошибок и правил доступа. Такое употребление термина описано, например, в материале OpenAI о платформе Codex.
Это не обязательно отдельный большой фреймворк. В простом продукте часть функций выполняет приложение и очередь задач. Важно, чтобы обязанности были определены. Замена библиотеки не исправляет потерю состояния, если команда не договорилась, где оно хранится.
- 01Контекст. Передать только нужное для следующего шага.
- 02Исполнение. Проверить предложенную операцию до внешнего действия.
- 03Продолжение. Сохранить результат и выбрать: работать дальше, ждать или завершить.
Архитектурная схема без привязки к конкретной библиотеке. Оранжевый блок — контроль перед действием.
Цикл должен понимать, когда работа закончена
Минимальный цикл получает задачу, формирует контекст, вызывает модель, проверяет предложенное действие, исполняет его и возвращает результат. После каждого шага нужно решить: продолжить, ждать человека, повторить безопасную операцию или завершить.
Для заявки статус «готово» означает конкретное событие в системе, а не убедительный текст. Если инструмент не подтвердил сохранение, агент не может считать действие состоявшимся. Ошибка связи и отказ в правах требуют разных ответов; общий обработчик «попробуй ещё раз» способен усугубить ситуацию.
Установите бюджет шагов и времени. Достигнув предела, система сохраняет выполненную работу и сообщает, что осталось. Без такого поведения агент может ходить по кругу, повторять один поиск или расходовать средства на задачу, которую уже пора передать человеку.
Что сохраняется между попытками
Рабочее состояние включает идентификатор задачи, выполненные действия, ответы систем и необходимые подтверждения. Оно отличается от текстовой сводки разговора. Сводка объясняет контекст, но не должна быть единственным доказательством созданного договора или изменённой записи.
Если процесс оборвался после запроса сохранения, следующая попытка сначала проверяет результат по идентификатору операции. Иначе повтор запуска легко превращается в повтор бизнес-действия. Обратимые чтения и внешние записи имеют разные правила восстановления.
Подтверждение человека тоже имеет область действия. Согласие отправить конкретный документ не означает согласия отправлять любые следующие документы тому же адресату. Связывайте разрешение с версией результата, получателем и действием, чтобы позднее изменение не унаследовало старое одобрение.
Инструмент — это контракт, а не свободный доступ
Вместо команды «работай с клиентской базой» задайте операции с понятными входами и результатами. Проверяйте типы, обязательные поля и права в коде приложения. Текстовая инструкция модели объясняет ожидания, но не заменяет ограничения в системе.
Результат инструмента должен различать пустой ответ, недоступность сервиса и запрет доступа. Если все три превращены в «не найдено», агент начнёт придумывать обходы или задавать клиенту неверные вопросы. Состояние ошибки — часть продуктового интерфейса, а не только задача разработчика.
Внешние документы и сообщения могут содержать инструкции, которые конфликтуют с задачей. Harness должен сохранять границу между прочитанными данными и полномочиями на действие. Антропик также подчёркивает, что поведение агента зависит от модели, harness, инструментов и среды вместе.
Как посмотреть, что система сделала
Нужен журнал одной задачи от входа до результата: версии инструкции и модели, вызовы инструментов, ответы, ожидание подтверждения, повтор и завершение. Необязательно хранить все личные данные в открытом виде. Смысл журнала — восстановить решение и диагностировать ошибку в рамках принятой политики данных.
Показывайте пользователю осмысленный статус: документы найдены, не хватает поля, ожидается подтверждение, внешняя система недоступна. Внутренний поток токенов редко помогает сотруднику понять, когда можно вернуться к работе и требуется ли его действие.
Пять проверок перед длинной задачей
- Прервите выполнение после чтения и после записи: продолжение не должно терять работу или дублировать её.
- Задержите ответ инструмента: агент не должен объявлять успех раньше подтверждения.
- Измените данные во время ожидания: решение должно учитывать актуальную версию.
- Отзовите разрешение: следующий шаг обязан остановиться на новой границе.
- Исчерпайте бюджет: пользователь получает сохранённый результат и понятный остаток задачи.
Если эти проверки проходят, можно обсуждать более сложную оркестрацию. Несколько агентов добавляют новые передачи состояния и ответственности; они полезны лишь тогда, когда разделение решает конкретную проблему и его можно проверить.
- ДоСохранить доказательство. ID операции, её ответ и следующий ожидаемый шаг.
- ПослеСверить факт. Узнать, что произошло во внешней системе.
- ЗатемПродолжить. Повторять только допустимое действие, исключая дубли.
Схема передачи между сессиями. Горизонтальная линия показывает порядок событий, не длительность.
Проверяемая передача между сессиями
После остановки задачи сохраните её цель, подтверждённые факты, выполненные операции и ожидаемый следующий шаг. Отдельно оставьте ссылки на ответы систем. Следующая сессия должна прочитать состояние и проверить, не изменилось ли что-то с момента остановки, прежде чем продолжить.
Нельзя заменять это фразой «продолжай с того места»: модели может быть недоступна предыдущая история. Полезный тест — запустить продолжение с минимальным контекстом и посмотреть, восстановит ли оно работу по сохранённым артефактам. Если для успеха нужно тайно добавить всю старую переписку, механизм передачи ещё не проверен.
