alterna ai
ALTERNA AI / ГЛАВА 18 · 06

18.6 Цикл действий должен останавливаться

На предыдущей странице: запись приложения не равна весам модели.

Программа может чередовать предложения модели и результаты инструментов. Для этого нужны ограничения шагов и понятная причина завершения.

Поиск выбирает фрагменты; builder добавляет их к вопросу. Память, история и tool result имеют разные источники. Право действия проверяет программа, а цикл обязан иметь причину остановки.

Планирование становится конечным автоматом с бюджетом

Agentic system чередует model decision, action и observation, сохраняя trace. ReAct исследует совместное рассуждение и действия, но production executor не обязан раскрывать или хранить скрытые chain-of-thought. Достаточно проверяемого state: goal, выбранный tool, arguments, observation и stop reason. F13.

Цикл обязан иметь allowlist и пределы steps/time/cost. finish завершает успешно; invalid action, exhausted budget и tool error — разные terminal states. Один и тот же observation не должен запускать бесконечный retry без изменения policy.

st+1=F(st,at,ot),at∈Aallowed,t<K.s_{t+1}=F(s_t,a_t,o_t),\quad a_t\in A_{allowed},\quad t<K.

Что показывает модель. Stepper не показывает будущие actions заранее: каждый следующий transition появляется после observation. Budget ledger считает model calls, tool calls и elapsed time. Human approval является отдельным state, а не текстовой просьбой, которую модель может сама считать подтверждённой.

Граница применимости. Bounded loop ограничивает ущерб, но не делает действия правильными. Автономность нельзя выводить из длины trace. Multi-agent labels не создают независимую проверку, если все roles используют один источник ошибок. Для необратимых действий нужны transactional design, confirmation и recovery вне языковой модели.

plan_18f=['lookup','lookup','finish']; allowed_18f={'lookup','finish'}; max_steps_18f=3
trace_18f=[]; status_18f='budget_exhausted'
for action_18f in plan_18f[:max_steps_18f]:
    assert action_18f in allowed_18f
    trace_18f.append(action_18f)
    if action_18f=='finish': status_18f='completed'; break
assert trace_18f==plan_18f and status_18f=='completed'

Код повторяет только что разобранные операции. Полный проверяемыйPython-пример главы доступен отдельным файлом; показанный короткий фрагмент не заменяет его реализацию.

Явные переходы и limits позволяют остановить ошибочный цикл.

Как разнести большую систему по устройствам и добавить другой вид входа?

Python-примеры главы 18 Академическая база →