OpenClaw 模型路由与 Guardian 交接:从手动切换到 Fail-Closed 闭环
#OpenClaw #Guardian #模型路由 #FailClosed
记录 OpenClaw、llama-server、路由 controller 与 GPU Guardian 之间的职责拆分、交接协议和真实恢复闭环。基础安装与 provider 配置见《OpenClaw 配置续集》,当前任务状态见《OpenClaw 后续功能规划》。
一、问题边界
desktop 的 RTX 5080 同时服务本地推理和桌面应用。OpenClaw 默认访问
192.168.2.10:11435 上的 llama-server,但游戏、图像生成和模型测评会占用显存。这里需要解决的不是简单的“进程启停”,而是:
-
停模型前先把 OpenClaw 切到允许的备用 provider,并排空在途请求;
-
恢复本地前确认端口、进程、模型身份和上下文参数均正确;
-
任一步失败都保持云端或停止继续动作,不能留下半切换状态;
-
人工关闭模型不能被 Guardian 擅自重新拉起。
二、组件职责
| 组件 | 唯一职责 | 明确禁止 |
|---|---|---|
| Guardian | 观察 GPU、冷却时间、所有权和维护窗 | 直接修改 OpenClaw 配置 |
| Controller | 切换默认、agent 和已有 session 的模型路由 | 启停未知模型或绕过排空 |
| 模型切换脚本 | 启停冻结清单中的 llama-server | 在旧实例未停止时启动第二实例 |
| OpenClaw | 承载会话和工具调用 | 自行解释 Guardian 状态并执行系统命令 |
Controller 是模型路由的唯一所有者。Guardian 即使未来启用真实动作,也只能通过冻结的交接接口发出请求。
三、三阶段交接协议
| 阶段 | 成功条件 | 失败处理 |
|---|---|---|
PrepareStop |
备用路由生效,活动 run、队列和待发送回复连续为空 | 保持本地模型,不授权停止 |
PrepareStart |
OpenClaw 仍处于安全备用路由 | 不启动模型 |
RestoreLocal |
/health、实际 GGUF、单实例和端口均通过 |
继续保持备用路由 |
排空不能只检查一次。controller 会核对活动 agent run、后台任务、cron、待发送消息和
session 状态;任何超时或不确定结果都拒绝进入下一阶段。
四、实现中的关键修复
1. Windows 到 N100 的 stdin 挂起
早期实现把 JSON 经 stdin 交给远端 CLI,PowerShell 等待子进程时可能无限挂起。正式脚本改用独立 SSH 进程、固定编码 payload、连接超时和进程硬上限;超时后终止子进程,并且不会继续执行停模型动作。
2. PowerShell 5.1 返回值差异
Windows PowerShell 5.1 与 pwsh 对外部进程属性和 JSON 对象的行为不同。正式覆盖前完成
PS5.1 parser、mock 成功链、本地不健康链和排空超时链验证。
3. Agent 模型配置形态
新增 mail-summary 后,模型配置同时存在字符串和 {primary} 两种形态。controller
只增加这两种已知结构的兼容,不接受任意嵌套对象;未知形态继续 fail closed。
4. 会话规模导致单命令超时
切换十余个 session 可能超过单条远程命令的默认预算。正确方向是为 controller 的受控单命令建立与会话规模相关的预算和固定 harness,而不是增大 OpenClaw 全局超时。
五、真实闭环结果
受控窗口已经完成:
1 | 切换备用路由 |
最终状态为 LocalRestored,OpenClaw healthy,正式模型和上下文参数一致。两份正式
controller 脚本均在受限备份后覆盖,哈希与冻结候选一致。
这不等于 Guardian 已进入生产自动模式。当前仍为:
-
dryRun=true; -
无
-EnableActions; -
旧自动动作任务 Disabled;
-
人工或外部停止记为
ManualOrExternalStop。
六、近期手动 GPU 模式
近期 GPU 会被游戏占用,llama-server 由用户手动关闭。此时:
-
Guardian 不自动拉起模型;
-
健康检查应把它识别为计划停机,而不是 Guardian 故障;
-
OpenClaw 是否使用云端 fallback 由独立的错误与隐私矩阵决定;
-
邮件、照片、文件和家庭内部状态不得因本地模型离线而自动上云。
后续 OC-25 会补齐 compaction、session drain、错误分类和 fallback 矩阵。在此之前,不要把“本地端口不可达”简化为“所有请求均可安全转云”。
七、回滚与验收原则
每次变更前备份正式脚本和活动配置,恢复时至少核对:
-
llama-server 仅有一个正式实例;
-
11435 listener 的进程和模型身份正确;
-
/health与/v1/models一致; -
OpenClaw defaults、agent 和 session 路由恢复;
-
cron、Guardian ownership 与 maintenance marker 无残留。
完整的工具审批边界见《OpenClaw Exec 审批与生命周期治理》。
