Alterna · учебный материал
18.6 Цикл действий должен останавливаться
Программа может чередовать предложения модели и результаты инструментов. Для этого нужны ограничения шагов и понятная причина завершения.
Что в этом материале
- Планирование становится конечным автоматом с бюджетом
Содержание и основные понятия
На предыдущей странице: запись приложения не равна весам модели.
Программа может чередовать предложения модели и результаты инструментов. Для этого нужны ограничения шагов и понятная причина завершения.
Поиск выбирает фрагменты; builder добавляет их к вопросу. Память, история и tool result имеют разные источники. Право действия проверяет программа, а цикл обязан иметь причину остановки.
Для изменения рисунка включитеJavaScript; расчёт и теория доступны далее.
Планирование становится конечным автоматом с бюджетом
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.
s
t
+
1
=
F
(
s
t
,
a
t
,
o
t
)
,
a
t
∈
A
a
l
l
o
w
e
d
,
t
<
K
.
s_{t+1}=F(s_t,a_t,o_t),\quad a_t\in A_{allowed},\quad t<K.
s
t
+
1
=
F
(
s
t
,
a
t
,
o
t
)
,
a
t
∈
A
a
ll
o
w
e
d
,
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
Академическая база →