Install
openclaw skills install diagnose-openclaw-model-routing-and-fallback-usage用于分析 OpenClaw 中“某个 provider/模型为什么看起来没被用上”、主模型与 fallback 实际是否生效、以及 ClaudeCodeCLI 协作任务为何中断。遇到这些情况就应触发:用户提到“没请求打到 local-router”“明明注册了模型却没流量”“Agent 到底在用哪个模型”“fallback 有没有发生”“为什么日志里看不到候选切换”“code 143 / SIGTERM / Exec failed”“需要结合当前配置和日志做严谨归因”。也适用于区分“provider 被调用”与“provider 下某个特定模型被调用”这两类常见混淆。
openclaw skills install diagnose-openclaw-model-routing-and-fallback-usage这个技能帮助你把 OpenClaw 的 Agent 配置、provider 注册信息和运行日志串起来,判断“请求到底发到了哪里、为什么某个模型没有被实际使用、fallback 是否真的发生过”,并补充分析 ClaudeCodeCLI 协作执行中断的根因。
Exec failed、code 143、中途被杀、无 stdout 等现象,需要给出可执行的规避方案。先区分用户到底在问“provider 没被调用”,还是“provider 下某个模型没被调用”
local-router 这个 provider 是否被请求命中local-router/claude-opus-4-6-thinking 这个具体模型是否被 Agent 主链或 fallback 链使用读取当前各 Agent 的主模型配置
main、coder、writer 当前绑定的模型。main → local-router/gpt-5.4coder → local-router/gpt-5.4writer → local-router/gpt-5.4读取默认 fallback 链,而不是只看 provider 的 models 列表
agents.defaults.model 的 primary 和 fallbacks。local-router/gpt-5.4aigocode-gpt/gpt-5.4-codexopenai-codex/gpt-5.4local-router/gpt-5.3-codexaigocode-gpt/gpt-5.3-codex检查目标模型只是“已注册”,还是“已绑定”
local-router/claude-opus-4-6-thinking 所在位置。models.providers.local-router.models[]provider 中存在 只表示“可选”,不表示“当前执行链会使用”。给出第一层诊断结论:为什么用户感觉没请求发到某个模型
local-router/claude-opus-4-6-thinking,那“感觉没流量”是正确的同时纠正另一种常见误解:不能把“没打到目标模型”误说成“没打到 provider”
local-router/gpt-5.4,所以请求确实在打 local-router provider。OpenClaw fallback model: gpt-5.4 via http://localhost:8317/v1补充历史与当前状态的区别,避免把旧日志当成当前事实
requested=local-router/claude-opus-4-6-thinkingcandidate_failed... reason=rate_limitaigocode-gpt/gpt-5.4-codex检查辅助链路,避免只盯主 Agent
memos-local-openclaw-plugin 的 summarizer 使用 claude-sonnet-4-6http://localhost:8317/v1针对“是否所有请求到 local-router/gpt-5.4 都成功”做日志核验
2026-03-14T05:32:22.073+08:00embedded run agent endisError=truemodel=gpt-5.4provider=local-routererror=500 Post "https://chatgpt.com/backend-api/codex/responses": EOF区分“没有看到 fallback 证据”与“没有发生 fallback”
requested=local-router/gpt-5.4 → 0 条candidate_failed requested=local-router/gpt-5.4 → 0 条candidate_succeeded requested=local-router/gpt-5.4 → 0 条解释为什么 OpenClaw fallback model: gpt-5.4 via http://localhost:8317/v1 不能直接当作 fallback 发生证据
给出严谨结论,而不是过度下判断
local-router/gpt-5.4 是当前主模型当用户追问 ClaudeCodeCLI 中断原因时,先解读退出码
Exec failed (..., code 143) 进行归因。143 = 128 + 15SIGTERM结合执行现象判断是外层 exec/调度问题,而非 Claude 本身逻辑错误
mild-breezefailed给出高概率原因排序
stdin / heredoc / pipeline 方式不稳/tmp/claude_review_prompt.txtclaude -p < /tmp/claude_review_prompt.txt在后续流程中改用结果落盘,而不是只依赖 stdout
claude -p... > /tmp/claude_review_output.txt 2>/tmp/claude_review_error.txt
改用后台任务 + 轮询方式管理长任务
在正式大任务前加最小健康探针
claude -p "reply with OK"
区分多层超时并单独处理
输出时直接闭环,不把“继续捞结果”再抛回给用户
❌ 看到 provider 里注册了某模型,就认定它在被使用
→ 失败原因:models.providers.local-router.models[] 只能证明“可用”,不能证明“某个 Agent 正在引用它”
✅ 先查 Agent 主模型和 fallback 链,再判断模型是否真在执行链路中
❌ 把“没打到 local-router/claude-opus-4-6-thinking”理解成“没打到 local-router provider”
→ 失败原因:provider 命中和具体模型命中是两层概念
✅ 分别判断 provider 流量和模型流量;当前确实在打 local-router,但主走的是 local-router/gpt-5.4
❌ 只看当前 provider 声明,不看 fallback 链
→ 失败原因:某模型不在 fallback 链里,就算主模型失败也不会自然切过去
✅ 核对 agents.defaults.model 的完整 fallback 列表
❌ 看到 OpenClaw fallback model: gpt-5.4 via http://localhost:8317/v1 就断言“本次请求发生了 fallback”
→ 失败原因:这类日志更像配置/调试打印,不一定是逐请求决策日志
✅ 以 requested=...、candidate_failed、candidate_succeeded 这类更强证据为准
❌ 因为没查到标准 fallback 日志,就断言“完全没有 fallback”
→ 失败原因:日志打点可能不完整,错误也可能发生在 provider 适配器层
✅ 表述为“当前没有看到清晰完整的 fallback 决策证据”,避免过度结论
❌ 把一次 500 EOF 失败忽略掉,继续说“所有请求都成功”
→ 失败原因:只要存在一条明确失败日志,就足以推翻“全成功”
✅ 先确认是否有任意失败样本,再谈成功率和 fallback 概率
❌ 把 code 143 当作 ClaudeCodeCLI 自身功能错误
→ 失败原因:143 通常是 SIGTERM,更像外层调度/会话终止
✅ 优先从 exec 包装层、会话回收、超时策略和 stdin 生命周期分析
❌ 直接前台等待长任务 stdout 作为唯一结果来源
→ 失败原因:会话被回收时,stdout 常常拿不到,导致“任务做了但结果丢了”
✅ 把 stdout/stderr 都落盘,并用后台轮询接回结果
❌ 用 heredoc / stdin 重定向跑长时间 CLI,而不做探针
→ 失败原因:包装层对子进程树和输入流生命周期不稳定
✅ 先跑 claude -p "reply with OK" 探针,再启动正式任务
agents:
main:
model: local-router/gpt-5.4
coder:
model: local-router/gpt-5.4
writer:
model: local-router/gpt-5.4
defaults:
model:
primary: local-router/gpt-5.4
fallbacks:
- aigocode-gpt/gpt-5.4-codex
- openai-codex/gpt-5.4
- local-router/gpt-5.3-codex
- aigocode-gpt/gpt-5.3-codex
models:
providers:
local-router:
models:
- local-router/gpt-5.4
- local-router/gpt-5.3-codex
- local-router/claude-opus-4-6-thinking
- claude-sonnet-4-6
local-router/gpt-5.4 并非全成功2026-03-14T05:32:22.073+08:00
embedded run agent end
isError=true
model=gpt-5.4
provider=local-router
error=500 Post "https://chatgpt.com/backend-api/codex/responses": EOF
requested=local-router/claude-opus-4-6-thinking
candidate_failed... reason=rate_limit
fallback -> aigocode-gpt/gpt-5.4-codex
requested=local-router/gpt-5.4 -> 0
candidate_failed requested=local-router/gpt-5.4 -> 0
candidate_succeeded requested=local-router/gpt-5.4 -> 0
memos-local-openclaw-plugin summarizer:
model = claude-sonnet-4-6
endpoint = http://localhost:8317/v1
session = mild-breeze
status = failed
duration ≈ 3m1s
Exec failed (..., code 143)
claude -p < /tmp/claude_review_prompt.txt
claude -p... > /tmp/claude_review_output.txt 2>/tmp/claude_review_error.txt
claude -p "reply with OK"
agents.mainagents.coderagents.writeragents.defaults.modelmodels.providers.local-router.models[]claude CLI,并允许将输出重定向到临时文件。code 143 的分析依赖类 Unix 退出码语义:143 = 128 + 15 = SIGTERM。references/claudecodecli-exit-code-143-sigterm-reference.md — reference documentationreferences/openclaw-fallback-log-interpretation-reference.md — reference documentation