Skip to content

isolated session 模型切换死循环 #57501

Description

@kabudaren

OpenClaw Issue: isolated session 模型切换死循环

问题描述

创建 isolated cron 任务时,无论使用什么模型都会触发 LiveSessionModelSwitchError

  • 百炼模型(qwen3.5-plus/kimi-k2.5)看到 Runtime 中的 model=anthropic/claude-opus-4-6 → 尝试切换到 Opus → 被拦截 → fallback → 也失败
  • Opus 模型(claude-opus-4-6)看到 Runtime 中的 model=anthropic/claude-opus-4-6 → 尝试切换(自己切自己)→ 死循环

复现步骤

  1. 创建 isolated cron 任务:
{
  "name": "test-cron",
  "schedule": {"kind": "cron", "expr": "0 10 * * *"},
  "sessionTarget": "isolated",
  "payload": {
    "kind": "agentTurn",
    "model": "bailian/qwen3.5-plus",
    "message": "测试任务"
  }
}
  1. 执行任务:
openclaw cron run --jobId <id>
  1. 错误输出:
LiveSessionModelSwitchError: Live session model switch requested: anthropic/claude-opus-4-6

根因分析

isolated session 的 Runtime 行使用主 agent 的 primary model,而不是 payload.model

isolated session 启动
  ↓
OpenClaw 注入 system prompt,包含:
  Runtime: model=anthropic/claude-opus-4-6  ← 来自主 agent 配置
  + 加载 AGENTS.md/TOOLS.md/MEMORY.md
  ↓
模型看到 Runtime 中的模型名称
  ↓
触发模型切换逻辑:"检测到可用模型 X,请求切换"
  ↓
死循环/失败

核心问题

  1. isolated session 的 Runtime 行应该匹配 payload.model,而不是主 agent 的 primary
  2. lightContext: true 没有过滤 Runtime 行中的 model 信息
  3. 模型切换逻辑是"看到就切换",不是"不同才切换"

影响范围

  • ❌ 所有 isolated cron 任务无法使用百炼模型(成本增加)
  • ❌ 无法在 isolated session 中使用 Opus(死循环)
  • ❌ 自动任务(早报、巡检、备份)全部失败

建议修复

方案一:Runtime 行匹配 payload.model(推荐)

修改位置:isolated session 创建逻辑

当前行为

runtimeInfo.model = agentConfig.primaryModel; // 主 agent 的 primary

期望行为

runtimeInfo.model = payload.model || agentConfig.primaryModel; // 优先使用 payload.model

方案二:lightContext 过滤 Runtime 行

修改位置:lightContext 处理逻辑

期望行为

if (lightContext) {
  systemPrompt = systemPrompt.replace(/Runtime:.*\n/, '');
  // 或至少过滤 model 字段
}

方案三:模型切换逻辑优化

修改位置:模型切换判断逻辑

当前行为

if (availableModels.includes(requestedModel)) {
  switchModel(requestedModel); // 看到就切换
}

期望行为

if (availableModels.includes(requestedModel) && currentModel !== requestedModel) {
  switchModel(requestedModel); // 不同才切换
}

临时解决方案(已验证)

将主 agent 的 primary model 改为百炼模型:

{
  "agents": {
    "defaults": {"model": {"primary": "bailian/qwen3.5-plus"}},
    "list": [{"id": "main", "model": {"primary": "bailian/qwen3.5-plus"}}]
  }
}

代价

  • 主会话默认使用百炼模型
  • 需要 Opus 时手动指定(/model opus

收益

  • ✅ cron 任务恢复正常
  • ✅ 日常消耗大幅降低(百炼免费)

环境信息

  • OpenClaw 版本:2026.3.28
  • Node.js: v22.20.0
  • OS: Darwin 24.4.0
  • 配置路径:~/.openclaw/openclaw.json

优先级

🔴 高优先级 - 影响所有自动任务的正常运行

标签

bug cron isolated-session model-switching

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Fields

    Priority

    None yet

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions