#OpenClaw #Guardian #模型路由 #FailClosed

记录 OpenClaw、llama-server、路由 controller 与 GPU Guardian 之间的职责拆分、交接协议和真实恢复闭环。基础安装与 provider 配置见《OpenClaw 配置续集》,当前任务状态见《OpenClaw 后续功能规划》

一、问题边界

desktop 的 RTX 5080 同时服务本地推理和桌面应用。OpenClaw 默认访问
192.168.2.10:11435 上的 llama-server,但游戏、图像生成和模型测评会占用显存。这里需要解决的不是简单的“进程启停”,而是:

  1. 停模型前先把 OpenClaw 切到允许的备用 provider,并排空在途请求;

  2. 恢复本地前确认端口、进程、模型身份和上下文参数均正确;

  3. 任一步失败都保持云端或停止继续动作,不能留下半切换状态;

  4. 人工关闭模型不能被 Guardian 擅自重新拉起。

二、组件职责

组件 唯一职责 明确禁止
Guardian 观察 GPU、冷却时间、所有权和维护窗 直接修改 OpenClaw 配置
Controller 切换默认、agent 和已有 session 的模型路由 启停未知模型或绕过排空
模型切换脚本 启停冻结清单中的 llama-server 在旧实例未停止时启动第二实例
OpenClaw 承载会话和工具调用 自行解释 Guardian 状态并执行系统命令

Controller 是模型路由的唯一所有者。Guardian 即使未来启用真实动作,也只能通过冻结的交接接口发出请求。

三、三阶段交接协议

阶段 成功条件 失败处理
PrepareStop 备用路由生效,活动 run、队列和待发送回复连续为空 保持本地模型,不授权停止
PrepareStart OpenClaw 仍处于安全备用路由 不启动模型
RestoreLocal /health、实际 GGUF、单实例和端口均通过 继续保持备用路由

OpenClaw 本地模型调用与云端回退流程

PrepareStop、PrepareStart 与 RestoreLocal 交接时序

排空不能只检查一次。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
2
3
4
5
6
切换备用路由
→ 排空请求
→ 停止 llama-server 释放显存
→ SYSTEM 任务加载正式 UD IQ3_S
→ 核对 11435、单实例、模型身份
→ RestoreLocal

最终状态为 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 审批与生命周期治理》