Skip to content

feat: Turn轮次策略解耦为可插拔 Policy Hook#450

Open
benemorphy wants to merge 43 commits into
lsdefine:mainfrom
benemorphy:main
Open

feat: Turn轮次策略解耦为可插拔 Policy Hook#450
benemorphy wants to merge 43 commits into
lsdefine:mainfrom
benemorphy:main

Conversation

@benemorphy
Copy link
Copy Markdown
Contributor

概要

ga.pyturn_end_callback 硬编码的轮次策略(if turn % N == 0 连锁)重构为可插拔策略链,保持行为完全一致的前提下,允许外部注册/取消自定义策略。

动机

turn_end_callback 中硬编码了5个 if/elif 轮次策略:

  • turn % 75 == 0 且非plan → 强制 ask_user
  • turn % 7 == 0 → 无效重试警告
  • turn % 10 == 0 → 注入全局记忆
  • plan模式 turn≥10 %5==0 → Plan Hints
  • plan模式 turn≥120 → 上限警告

这些策略与核心流程耦合,新增/修改策略需要修改核心代码,不利于模块化扩展。

改动内容

核心改动

Before (硬编码):

if turn % 75 == 0 and (not _plan):
    next_prompt += f"\n\n[DANGER] ..."
elif turn % 7 == 0:
    next_prompt += f"\n\n[DANGER] ..."
elif turn % 10 == 0:
    next_prompt += get_global_memory()

if _plan and turn >= 10 and turn % 5 == 0:
    next_prompt = f"[Plan Hint] ..." + next_prompt
if _plan and turn >= 120:
    next_prompt += f"\n\n[DANGER] ..."

After (可插拔策略链):

# 注册(__init__中)
self._turn_policies = [
    self._policy_danger_ask_user,
    self._policy_danger_retry,
    self._policy_inject_memory,
    self._policy_plan_limit,
]

# 执行(turn_end_callback中)
for policy in self._turn_policies:
    next_prompt += policy(turn, _plan, next_prompt) or ""

每个策略独立为方法:

def _policy_danger_ask_user(self, turn, _plan, next_prompt):
    """每75轮强制ask_user(非plan模式)"""
    if turn % 75 == 0 and (not _plan):
        return f"\n\n[DANGER] ..."
    return ""

def _policy_danger_retry(self, turn, _plan, next_prompt):
    """每7轮禁止无效重试"""
    ...

def _policy_inject_memory(self, turn, _plan, next_prompt):
    """每10轮注入全局记忆"""
    ...

def _policy_plan_limit(self, turn, _plan, next_prompt):
    """Plan模式上限检测"""
    ...

行为等价性

所有策略的触发阈值、输出内容与重构前完全一致。

benechen added 30 commits May 10, 2026 07:07
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant