Skip to content

isolated session 模型切换死循环 #57501

@kabudaren

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
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions