Практические замечания: когда следует остановить цикл агента? DeepSeek Harness и Pi Give
Пошаговое руководство по практическим рекомендациям: когда следует остановить цикл агента? DeepSeek Harness и Pi предоставляют контракты, проверки и готовые блоки кода для команд, использующих эту схему.
Источники: When Should an Agent Loop Stop? DeepSeek Harness and Pi Give Two Completely Different Answers
В следующих заметках описывается практический подход к вопросу «Когда агенту следует прекратить цикл? DeepSeek Harness и Pi дают совершенно разные ответы». Основное внимание уделяется контрактам, проверкам и местам для вставки кода, а не мотивационной составляющей. На этапе обзора сначала запишите контракт: необходимые входные данные, сигнал успешного выполнения и действия при частичной неудаче. Такой список поможет сохранять честность при последующих изменениях кода. Рядом с функциональными результатами записывайте время выполнения и стоимость токенов или запросов. Отображение затрат с самого начала предотвращает неожиданные счета при переходе от демо-версии к общим средам.
Введение: вопрос, который никто не задает, пока что-то не сломается
Вопрос о том, когда подход «Открытие» работает наилучшим образом, решается путем рассмотрения его как измеримой поверхности. Соберите один идеальный пример работы, один случай сбоя и запись о возврате к предыдущему состоянию перед расширением объема работ. Храните конфигурацию вне кода приложения. Файлы среды, хранилища секретов и флаги функций должны находиться в одном месте, чтобы операторы могли их проверять, не читая весь код. Используйте инструменты с узкими схемами и четкими метками о побочных эффектах. Хостам необходимо знать, какие вызовы изменяют состояние, прежде чем они автоматически согласятся на это.
504 Gateway Timeout
Часть 1 — Что на самом деле означает «остановка» (это не одно и то же)
В части 1 рассматривается, какой этап остановки работает лучше всего при рассмотрении его как измеримой величины. Соберите один идеальный пример выполнения, один случай сбоя и запись о возврате к предыдущему состоянию перед расширением объема работ. Документируйте одновременно успешный и восстановительный пути. Повторные попытки, проверки человеком и обработка неработающих сообщений являются частью продукта, а не элементами последующей доработки. Используйте инструменты с узкими схемами и четкими метками побочных эффектов. У операторов должна быть возможность узнать, какие вызовы изменяют состояние, прежде чем они автоматически одобрят их.
Model Request
↓
Assistant Response
↓
Tool Calls
↓
Tool Results
↓
Model reviews results
↓
Turn End
↓
Agent Idle
↓
Follow-up / Goal / Scheduler
↓
Next Turn
Часть 2 — Почему это важно сейчас, а не позже
Часть 2. Почему этот этап работает лучше всего, когда рассматривается как измеримая среда. Соберите один идеальный пример работы, один случай сбоя и записку о возврате к предыдущему состоянию перед расширением объёма работ. Предпочитайте небольшие, тестируемые единицы вместо обширных скриптов. Когда какой-то шаг сбивается, причина сбоя должна указывать на конкретную ответственность, а не на запутанную цепочку операций. Используйте инструменты с узкими схемами и чёткими метками побочных эффектов. У операторов должна быть возможность узнать, какие вызовы изменяют состояние, прежде чем они автоматически одобрят действия. Часть 2. Почему этот этап работает лучше всего, когда рассматривается как измеримая среда. Соберите один идеальный пример работы, один случай сбоя и записку о возврате к предыдущему состоянию перед расширением объёма работ. Записывайте время выполнения, а также стоимость токенов или запросов рядом с функциональными результатами. Очевидность затрат с самого начала предотвращает неожиданные расходы при переходе с демо-среды в общедоступные среды.
Часть 3 — Как это на самом деле работает: разбор механизма
Для части 3 «Этапы выполнения» необходимо заранее определить входные данные, ответственного за выполнение шага и критерии завершения перед изменением кода. Операторы должны иметь возможность перезапустить шаг с известной точки контроля, не догадываясь о скрытом состоянии. Конфигурацию следует хранить отдельно от кода приложения. Файлы среды, хранилища конфиденциальных данных и флаги функций должны находиться в одном месте, чтобы операторы могли их проверять, не читая весь кодовый граф. Аутентификация происходит на шлюзе, а повторная авторизация — на уровне обработки данных. Один только токен-носитель не является границей между тенантами.
Assistant:
"I've created PR #1234."
model stopped ≠ turn stopped
3.2 Второй уровень: завершение пакетной обработки инструментом
Для двухэтапной схемы из 3 и 2 уровней необходимо заранее определить входные данные, ответственного за выполнение шага и критерии завершения перед изменением кода. Операторы должны иметь возможность перезапустить шаг с известной точки контроля, не догадываясь о скрытом состоянии. Необходимо одновременно задокументировать успешный сценарий выполнения и сценарий восстановления. Повторные попытки, проверки человеком и обработка неработоспособных сообщений являются частью продукта, а не этапом последующей доработки. Аутентификация происходит на шлюзе, а повторная авторизация — на уровне данных. Один только токен-носитель не является границей между тенантами.
# Illustrative example — conceptual pseudocode, not an official API
while has_more_tool_calls:
response = call_model()
tools = parse_tool_calls(response)
execute_tools(tools)
Model
↓
create_pr()
↓
200 OK
↓
PR #1234
Goal
└─ Goal Round
└─ Turn
├─ Step
│ ├─ Model Request
│ └─ Tool Calls
├─ Step
│ ├─ Model Request
│ └─ Tool Calls
└─ ...
3.3 Когда же на самом деле заканчивается этап?
На этапе 3 3 So необходимо заранее определить входные данные, ответственного за шаг и критерии завершения перед изменением кода. Операторы должны иметь возможность перезапустить шаг с известной точки контроля, не догадываясь о скрытом состоянии. Лучше использовать небольшие, тестируемые единицы вместо обширных скриптов. При сбое шага он должен указывать на конкретную причину, а не на сложную структуру обработки данных. Аутентифицировать пользователя у входа в систему, а повторно авторизовывать — на уровне обработки данных. Один только токен-носитель не является границей между разными тенантами. На этапе 3 3 So необходимо заранее определить входные данные, ответственного за шаг и критерии завершения перед изменением кода. Операторы должны иметь возможность перезапустить шаг с известной точки контроля, не догадываясь о скрытом состоянии. Регистрировать время выполнения, стоимость токенов или запросов вместе с функциональными результатами. Отображение затрат на раннем этапе предотвращает неожиданные счета при переходе от демо-среды к общедоступным средам.
3.4 Ловушка булевых значений: shouldContinue()
При работе над этапом булевых значений сначала запишите условия работы функции: необходимые входные данные, сигнал о успешном выполнении и действия при частичной неудаче. Такой чек-лист поможет избежать ошибок при последующих изменениях кода. Храните конфигурацию вне кода приложения. Файлы с настройками, хранилища секретов и флаги функций должны находиться в одном месте, чтобы операторы могли их проверять, не читая весь код. Фиксируйте название инструмента, хэш аргументов, время задержки и результат каждого вызова. Без такой информации отладка циклов занимает часы.
Plugin A → false
Plugin B → true
Plugin C → false
shouldContinue(): boolean
3.5 Стоимость такой архитектуры
При работе над этапом 3.5 «Стоимость» сначала запишите условия контракта: необходимые входные данные, сигнал успешного выполнения и действия при частичной неудаче. Такой чек-лист поможет сохранять честность при последующих изменениях кода. Документируйте одновременно успешный сценарий работы и сценарий восстановления. Повторные попытки, проверки со стороны человека и обработка неработоспособных сообщений являются частью продукта, а не элементами последующей доработки. Фиксируйте название инструмента, хеш аргументов, время задержки и результат каждого вызова. Без такой записи отладка циклов занимает часы.
Prompt → Search → Answer
3.6 Ответ Pi: делайте циклы маленькими, разделяйте операцию «continue» на две API
При работе над этапом 3 6 Pi s сначала запишите условия работы: необходимые входные данные, сигнал о успешном выполнении и действия при частичной неудаче. Такой список помогает сохранять честность при последующих изменениях кода. Предпочитайте небольшие, тестируемые модули большим скриптам. Если какой-то шаг не сработает, причина должна быть связана с конкретной функцией, а не с запутанной цепочкой операций. Записывайте название инструмента, хеш аргументов, время задержки и результат каждого вызова. Без такой информации отладка занимает много времени. При работе над этапом 3 6 Pi s сначала запишите условия работы: необходимые входные данные, сигнал о успешном выполнении и действия при частичной неудаче. Такой список помогает сохранять честность при последующих изменениях кода. Регистрируйте время выполнения и стоимость токенов или запросов рядом с функциональными результатами. Отслеживание затрат с самого начала предотвращает неожиданные расходы при переходе с демо-среды в общедоступные среды.
// Illustrative example — conceptual pseudocode, not an official API
while (true) {
while (hasMoreToolCalls || pendingMessages.length > 0) {
callModel();
executeTools();
}
const followUps = await getFollowUpMessages();
if (followUps.length > 0) {
pendingMessages = followUps;
continue;
}
break;
}
Inner Loop
↓
More tools? More steering?
↓
No
↓
Outer Loop
↓
Any follow-up?
↓
No
↓
Agent End
Steering = you are changing my direction right now
Follow-up = you were about to let me stop, but I'm giving you one more thing
3.7 Размещение DSH и Pi рядом
Этап 3.7 «Размещение DSH» работает наилучшим образом, если рассматривать его как измеримую поверхность. Соберите один пример успешной работы, один случай сбоя и запись о возврате к предыдущему состоянию перед расширением объёма работ. Храните конфигурацию вне кода приложения. Файлы среды, хранилища секретов и флаги функций должны находиться в одном месте, чтобы операторы могли их проверять, не читая весь граф. Обеспечьте доступ к инструментам с узкими схемами и чёткими метками побочных эффектов. Хостам необходимо знать, какие вызовы изменяют состояние, прежде чем они автоматически одобрят их.
DSH Pi
Goal Outer Loop
↓ │
Goal Round Follow-up Queue
↓ │
Turn ▼
↓ Inner Loop
Step │
↓ Steering + Tool Calls
Model ↔ Tools ↔ Inbox │
↓ ▼
Turn-Stopping turn_end
↓ │
Turn End ▼
agent_end
3.8 Более тихое, но очень полезное дополнение Pi: shouldStopAfterTurn
Этап 3.8 Pi s работает наилучшим образом, когда его рассматривают как измеримую поверхность. Соберите один пример успешного выполнения, один случай сбоя и запись о возврате к предыдущему состоянию перед расширением объема работ. Документируйте одновременно путь успешного выполнения и путь восстановления. Повторные попытки, проверки человеком и обработка неработающих сообщений являются частью продукта, а не этапом последующей доработки. Обеспечьте доступ к инструментам с узкими схемами и четкими метками побочных эффектов. Хостам необходимо знать, какие вызовы изменяют состояние, прежде чем они автоматически одобрят операцию.
shouldStopAfterTurn() ≠ killEverything()
Agent
↓
fix bug
↓
run tests
↓
tests pass
↓
turn_end
↓
shouldStopAfterTurn = true
↓
agent_end
3.9 Более похожая на машину состояний архитектура DSH
Этап 3 9 DSH работает наилучшим образом, когда его рассматривают как измеримую среду. Соберите один идеальный пример работы, один случай сбоя и записку о возврате к предыдущему состоянию перед расширением объёма работ. Предпочитайте небольшие, тестируемые единицы вместо обширных скриптов. Когда какой-то шаг сбивается, причина сбоя должна указывать на конкретную ответственность, а не на запутанную цепочку операций. Используйте инструменты с узкими схемами и чёткими метками побочных эффектов. У операторов должна быть возможность узнать, какие вызовы изменяют состояние, прежде чем они автоматически одобрят действия. Этап 3 9 DSH работает наилучшим образом, когда его рассматривают как измеримую среду. Соберите один идеальный пример работы, один случай сбоя и записку о возврате к предыдущему состоянию перед расширением объёма работ. Записывайте время выполнения, а также стоимость токенов или запросов рядом с функциональными результатами. Отображение стоимости на раннем этапе предотвращает неожиданные счёты при переходе от демо-среды к общедоступным средам.
3.10 Почему вопрос «почему всё остановилось» важнее, чем кажется
На этапе 3 10 «Почему» необходимо определить входные данные, ответственного за выполнение шага и критерии завершения перед изменением кода. Операторы должны иметь возможность перезапустить шаг с известной точки контроля, не догадываясь о скрытом состоянии. Конфигурацию следует хранить отдельно от кода приложения. Файлы среды, хранилища секретов и флаги функций должны находиться в одном месте, чтобы операторы могли их проверять, не читая весь код. Аутентификация происходит на шлюзе, а повторная авторизация — на уровне обработки данных. Один только токен не является границей между тенантами.
Agent stopped.
Agent stopped because:
- task completed?
- user cancelled?
- token limit hit?
- tool error?
- process crashed?
- blocked by policy?
- waiting on a human?
3.11 Pi намеренно не включает всё это в ядро
Для целенаправленной реализации этапа 3.11 необходимо заранее определить входные данные, ответственного за выполнение этапа и критерии завершения перед изменением кода. Операторы должны иметь возможность перезапустить этап с известной точки контроля, не догадываясь о скрытом состоянии. Необходимо одновременно задокументировать успешный сценарий выполнения и сценарий восстановления. Повторные попытки, проверки человеком и обработка неработоспособных сообщений являются частью продукта, а не последующими улучшениями. Аутентификация происходит на шлюзе, а повторная авторизация — на уровне данных. Один только токен-носитель не является границей между тенантами.
3.12 Цена этого выбора
На этапе 3 12 The price необходимо заранее определить входные данные, ответственного за выполнение шага и критерии завершения перед внесением изменений в код. Операторы должны иметь возможность перезапустить шаг с известной точки контроля, не догадываясь о скрытом состоянии. Лучше использовать небольшие, тестируемые модули вместо обширных скриптов. При сбое шага причина должна быть связана с конкретной функцией, а не с запутанной структурой обработки данных. Аутентифицируйте данные на входе и повторно авторизуйте их на уровне обработки данных. Одного только токена недостаточно для определения границ использования ресурсов. На этапе 3 12 The price необходимо заранее определить входные данные, ответственного за выполнение шага и критерии завершения перед внесением изменений в код. Операторы должны иметь возможность перезапустить шаг с известной точки контроля, не догадываясь о скрытом состоянии. Записывайте время выполнения, стоимость токенов или запросов вместе с функциональными результатами. Отображение стоимости на ранних этапах предотвращает неожиданные счета при переходе от демо-среды к общедоступным средам.
3.13 Инструменты, подлежащие голосованию: concludesTurn
При работе над разделом «3.13 Инструменты, осуществляющие обработку», сначала запишите контракт: необходимые входные данные, сигнал о успешном выполнении и действия при частичной неудаче. Такой чек-лист помогает избегать ложных изменений в коде позже. Храните конфигурацию отдельно от кода приложения. Файлы среды, хранилища секретов и флаги функций должны находиться в одном месте, чтобы операторы могли их проверять, не читая весь код. Фиксируйте название инструмента, хэш аргументов, время задержки и результат каждого вызова. Без такой записи отладка циклов агента занимает часы.
3.14 Даже выбор между AND/OR отражает философию проектирования
При работе над этапом 3.14 обязательно сначала запишите описание процесса: необходимые входные данные, сигнал успешного завершения и действия при частичной неудаче. Такой чек-лист поможет сохранять честность при последующих изменениях кода. Документируйте одновременно обычный путь выполнения и путь восстановления. Повторные попытки, проверки со стороны человека и обработка неработоспособных сообщений являются частью продукта, а не элементами последующей доработки. Фиксируйте название инструмента, хеш аргументов, время задержки и результат каждого вызова. Без такой записи отладка занимает часы.
Tool A → concludesTurn = true
Tool B → false
Tool C → false
3.15 Конкурентность добавляет ещё один уровень сложности
При работе над этапом «3 15 Concurrency adds» сначала запишите контракт: необходимые входные данные, сигнал о успехе и действия при частичной неудаче. Такой чек-лист помогает сохранять честность при последующих изменениях кода. Предпочитайте небольшие, тестируемые единицы кода вместо обширных скриптов. Когда какой-то шаг терпит неудачу, ошибка должна указывать на конкретную ответственность, а не на запутанную цепочку операций. Записывайте название инструмента, хеш аргументов, время задержки и результат каждого вызова. Без такой информации отладка занимает часы. При работе над этапом «3 15 Concurrency adds» сначала запишите контракт: необходимые входные данные, сигнал о успехе и действия при частичной неудаче. Такой чек-лист помогает сохранять честность при последующих изменениях кода. Регистрируйте время выполнения и стоимость токенов или запросов рядом с функциональными результатами. Отслеживание затрат на раннем этапе предотвращает неожиданные расходы при переходе с демо-среды в общедоступные среды.
A = create PR
B = inspect dependency graph
C = run security scan
3.16 max-tokens: классический пример противоречия подхода «просто попробуйте снова»
Параметр max-tokens наиболее эффективно функционирует, когда рассматривается как измеримая величина. Соберите один идеальный пример работы, один случай сбоя и запись о возврате к предыдущему состоянию перед расширением объема работ. Храните конфигурацию вне кода приложения: файлы среды, хранилища секретов и флаги функций должны находиться в одном месте, чтобы операторы могли их проверять, не читая весь кодовый граф. Установите лимиты на количество токенов за ход и за сессию — инструменты с агентным подходом активно расширяют контекст, и жесткие ограничения предотвращают появление неожиданных счетов.
Model:
"I'm about to call deploy_production with
{ ... half-finished JSON ...
3.17 Разделение на функции только для чтения и функции с побочными эффектами
На этапе read-only лучший результат достигается при рассмотрении его как измеримой поверхности. Сначала зафиксируйте один идеальный пример работы, один случай сбоя и записку о возврате к предыдущему состоянию, прежде чем расширять объем работ. Документируйте одновременно успешный и восстановительный пути выполнения. Повторные попытки, проверки со стороны людей и обработка некорректных сообщений являются частью продукта, а не этапом последующей доработки. Обеспечьте доступ к инструментам с узкими схемами и четкими метками о побочных эффектах. Хостам необходимо знать, какие вызовы изменяют состояние, прежде чем они автоматически одобрят операцию.
Часть 4 — Что чаще всего делают неправильно
Часть 4: Какой этап работает лучше всего, если рассматривать его как измеримую среду? Соберите один идеальный пример работы, один случай сбоя и записку о возврате к предыдущему состоянию перед расширением объёма работ. Предпочитайте небольшие, тестируемые единицы кода вместо обширных скриптов. Когда какой-то шаг сбивается, причина сбоя должна указывать на конкретную ответственность, а не на запутанную цепочку операций. Используйте инструменты с узкими схемами и чёткими метками о побочных эффектах. Администраторам необходимо знать, какие вызовы изменяют состояние системы, прежде чем они автоматически одобрят операцию. Часть 4: Какой этап работает лучше всего, если рассматривать его как измеримую среду? Соберите один идеальный пример работы, один случай сбоя и записку о возврате к предыдущему состоянию перед расширением объёма работ. Записывайте время выполнения, а также стоимость токенов или запросов рядом с функциональными результатами. Отображение стоимости на раннем этапе предотвращает неожиданные счёты при переходе от демо-среды к общедоступным средам.
DISCOVERED → MODIFIED → TESTING → PR_CREATED → CI_RUNNING →
WAITING_REVIEW → CHANGES_REQUESTED → MERGED → DEPLOYING → OBSERVING → VERIFIED
Часть 5 — оценка
На этапе принятия решений в части 5 необходимо заранее определить входные данные, ответственного за выполнение шага и критерии завершения перед изменением кода. Операторы должны иметь возможность перезапустить шаг с известной точки контроля, не догадываясь о скрытом состоянии. Конфигурацию следует хранить отдельно от кода приложения. Файлы среды, хранилища секретов и флаги функций должны находиться в одном месте, чтобы операторы могли их проверять, не читая весь кодовый граф. Аутентификация происходит на шлюзе, а повторная авторизация — на уровне обработки данных. Один только токен-носитель не является границей между тенантами.
Часть 6 — Как это на самом деле влияет на практику
На этом этапе шестой части необходимо определить входные данные, ответственного за выполнение шага и критерии завершения перед изменением кода. Операторы должны иметь возможность перезапустить шаг с известной точки контроля, не догадываясь о скрытом состоянии. Необходимо задокументировать как успешный, так и аварийный сценарии работы. Повторные попытки, проверки человеком и обработка неработоспособных сообщений являются частью продукта, а не этапом последующей доработки. Аутентификация происходит на шлюзе, а повторная авторизация — на уровне данных. Один только токен-носитель не является границей между тенантами.
Current side-effect state: UNKNOWN
Can it be resolved against external facts? YES
→ query the PR
→ query the branch
→ query the commit
→ query remote state
PR exists → continue the existing workflow
PR absent → retry creation
Goal:
all v1 imports removed
AND unit tests pass
AND integration tests pass
AND PR created
Заключение: предложение, которое стоит сохранить
В заключение важно на этапе планирования определить входные данные, ответственного за выполнение шага и критерии завершения перед изменением кода. Операторы должны иметь возможность перезапустить шаг с известной точки контроля, не догадываясь о скрытом состоянии. Лучше использовать небольшие, тестируемые единицы вместо обширных скриптов. При сбое шага он должен указывать на конкретную причину, а не на сложную цепочку операций. Аутентифицируйтесь у шлюза и повторно авторизуйтесь на уровне обработки данных. Один только токен-носитель не является границей между тенантами. В заключение важно на этапе планирования определить входные данные, ответственного за выполнение шага и критерии завершения перед изменением кода. Операторы должны иметь возможность перезапустить шаг с известной точки контроля, не догадываясь о скрытом состоянии. Записывайте время выполнения, стоимость токенов или запросов вместе с функциональными результатами. Отображение затрат на раннем этапе предотвращает неожиданные счета при переходе от демо-среды к общедоступным средам.
Если вы хотите выразить свою признательность, вы можете поддержать меня следующими способами:
На этапе планирования запишите сначала условия работы: необходимые входные данные, сигнал о успешном выполнении и действия при частичной неудаче. Такой чек-лист поможет сохранять честность при последующих изменениях кода. Храните конфигурацию отдельно от кода приложения. Файлы среды, хранилища секретов и флаги функций должны находиться в одном месте, чтобы операторы могли их проверять, не читая весь код.
Чек-лист операционной работы
На этапе составления чек-листа операционной работы определите входные данные, ответственного за шаг и критерии завершения перед внесением изменений в код. Операторы должны иметь возможность перезапустить шаг с известной точки контроля, не догадываясь о скрытом состоянии системы.
Рассматривайте этот этап как контракт между входными данными и проверенными выходными результатами. Дайте названия создаваемым объектам, определите критерии успешного выполнения и откажитесь от молчаливого частичного завершения работы.
Аутентифицируйтесь у шлюза и повторно авторизуйтесь на уровне плоскости данных. Один только токен-носитель не является границей тенантности.
Создавайте контрольные точки после дорогостоящих операций. Механизм возобновления работы не должен снова взимать плату за один и тот же вызов большой языковой модели при повторной попытке обработки последующего узла.
Фиксируйте версии зависимостей и записывайте хэш изображения, с использованием которого выполнялась демонстрация. Воспроизводимость важнее устного опыта сотрудников.
Документируйте как успешный, так и восстановительный сценарии работы. Повторные попытки, человеческое участие и обработка некорректных сообщений являются частью продукта, а не его дополнительными улучшениями.
Перед внедрением стека заморозьте версии, сделайте копию «золотого» отчета для критической цепочки операций и уточните шаги возврата к предыдущему состоянию. В совместных средах необходимы ограничения на частоту запросов, проверки принадлежности пользователя и четко определенный ответственный за обновление секретов. Лучше выбирать надежность, даже если она кажется скучной, чем умные одноразовые демонстрации.
Примечание для пакета a95f0d36f035: не храните ключи поставщика в репозитории, установите лимит токенов на одну сессию и сохраняйте отчеты рядом с фикстчерами для оценки, чтобы последующие замены моделей можно было сравнивать.
Для этапа 0 по усилению безопасности определите входные данные, ответственного за шаг и критерии завершения перед изменением кода. Операторы должны иметь возможность перезапустить шаг с известной точки контроля, не догадываясь о скрытом состоянии. Лучше использовать небольшие, проверяемые на функциональность блоки кода, чем обширные скрипты. При сбое шага причина должна быть связана с конкретной функцией, а не с запутанной цепочкой операций.
Подробности усиления безопасности 0/816: измерьте время выполнения, класс ошибки и расход токенов для этой записи, затем решите, следует ли сохранить изменение на основе фиксированного набора вопросов, а не на основе единичных примеров.
При работе над первым этапом записи по усилению безопасности сначала запишите контракт: необходимые входные данные, сигнал успешного выполнения и что происходит при частичной неудаче. Такой чек-лист помогает сохранять честность при последующих изменениях кода. Записывайте временные показатели и стоимость токенов или запросов рядом с функциональными результатами. Очевидность затрат с самого начала предотвращает неожиданные расходы при переходе с демо-среды в общедоступные среды.
Подробности усиления безопасности 1/816: измерьте время выполнения, класс ошибки и расход токенов для этой записи, затем решите, следует ли сохранить изменение на основе фиксированного набора вопросов, а не на основе единичных примеров.
Второй этап усиления безопасности работает наилучшим образом, когда его рассматривают как измеримую поверхность. Соберите один идеальный пример работы, один случай сбоя и запись о возврате к предыдущему состоянию перед расширением объема работ. Документируйте одновременно успешный и восстановительный пути работы. Повторные попытки, проверки человеком и обработка неработающих сообщений являются частью продукта, а не последующими доработками.
Подробности усиления безопасности 2/816: измеряйте время выполнения, класс ошибки и расход токенов для этого этапа, затем принимайте решение о сохранении изменений на основе фиксированного набора критериев, а не на основе единичных примеров.
Для третьего этапа усиления безопасности определите входные данные, ответственного за выполнение шага и критерии завершения перед изменением кода. Операторы должны иметь возможность перезапустить шаг с известной точки контроля, не догадываясь о скрытом состоянии. Рассматривайте этот этап как контракт между входными данными и проверенными выходными результатами. Дайте названия создаваемым элементам, определите критерии успеха и не допускайте молчаливого частичного завершения работы.
Подробности усиления безопасности 3/816: измерьте время работы стены, класс ошибки и расход токенов для этой записи, затем решите, следует ли сохранять изменения на основе фиксированного набора вопросов, а не на основе единичных примеров.