Перейти к содержимому

Обзор RE-PLAN

RE-PLAN позволяет цепочке реагировать во время выполнения: после шага один или несколько чекеров оценивают прогресс и могут решить повторить шаг, откатиться к более ранней контрольной точке и запустить всё заново, перезапустить с начала или завершить неудачей — всё в рамках бюджета, чтобы не зациклиться навсегда.

Цели отката — это шаги, которые вы отмечаете как контрольные точки:

LLMStepDescription(
number=2,
title="Risk assessment",
aim="Assess the risks.",
checkpoint=True,
checkpoint_name="risk_phase",
)

Настройте RE-PLAN с помощью ReplanPolicy на цепочке. Здесь основанный на правилах чекер повторяет текущий шаг каждый раз, когда ошибка содержит “rate limit”:

from mmar_carl import (
ReasoningChain, ReplanPolicy, RuleBasedReplanCheckerConfig, ReplanAction,
)
policy = ReplanPolicy(
checkers=[
RuleBasedReplanCheckerConfig(
error_substrings=["rate limit"],
action_on_match=ReplanAction.RETRY_CURRENT_STEP,
),
],
)
chain = ReasoningChain(steps=steps, replan_policy=policy)

Переключайте на уровне шага с помощью replan_enabled=True/False (по умолчанию — политика цепочки).

Вердикт чекера запрашивает одно из значений ReplanAction:

ДействиеЭффект
CONTINUEПродолжить в обычном режиме.
RETRY_CURRENT_STEPПовторить только что завершившийся шаг.
REPLAN_FROM_CHECKPOINTОткатиться к контрольной точке и запустить заново оттуда.
RESTART_CHAINНачать всю цепочку сначала.
FAILНемедленно завершить цепочку неудачей.

ReplanPolicy объединяет:

ПолеТипНазначение
enabledboolГлавный переключатель (по умолчанию True).
checkerslist[...CheckerConfig]Чекеры, которые голосуют.
aggregationReplanAggregationConfigКак объединяются голоса (см. чекеры).
triggerReplanTriggerConfigКогда проводить оценку (после каждого шага / только при неудачах / только на контрольных точках / для конкретных шагов).
budgetsReplanBudgetConfigЗащита от бесконечного перепланирования.

ReplanBudgetConfig предотвращает бесконечные циклы:

ПолеПо умолчаниюНазначение
max_replans_per_chain3Всего действий RE-PLAN за запуск.
max_replans_per_step2Перепланирований, связанных с одним шагом.
max_visits_per_checkpoint—Ограничение повторных входов в контрольную точку.
fail_on_budget_exhaustion—Завершить неудачей (вместо продолжения) при исчерпании бюджета.

Детерминированный пример RE-PLAN из репозитория (mock-клиент, без API-ключа) запускает цепочку из 3 шагов для служебной записки. Шаг 2 на первой попытке выдаёт NEEDS_REPLAN; основанный на правилах чекер находит эту подстроку, повторяет шаг с обратной связью, и вторая попытка завершается успешно.

from mmar_carl import ReplanPolicy, RuleBasedReplanCheckerConfig, ReplanAction
policy = ReplanPolicy(
enabled=True,
checkers=[
RuleBasedReplanCheckerConfig(
name="risk_quality_guard",
result_substrings=["NEEDS_REPLAN"],
action_on_match=ReplanAction.RETRY_CURRENT_STEP,
feedback_on_match=["Add explicit mitigation ownership and concrete risks."],
)
],
)
chain = ReasoningChain(steps=steps, max_workers=1, replan_policy=policy)
result = chain.execute(context)
for event in result.replan_events:
print(event.step_number, event.final_action, event.rollback_target)

result.replan_events фиксирует каждое решение RE-PLAN — шаг, выбранное действие, подсчёт голосов чекеров (event.aggregation) и цель отката, если она есть.