Skip to content
实验报告
待周评
昨天能用的模型,今天为什么不能直接恢复?
开源工程观察 · 实验研究

昨天能用的模型,今天为什么不能直接恢复?

八组原函数前后对照区分明确不支持与目录未知,说明恢复旧模型偏好为什么需要保留不同证据状态。

2026-09-11English →

昨天能用的模型,今天为什么不能直接恢复?

保存上次选中的模型,下次打开时继续使用,这是很自然的产品体验。但保存下来的首先是一项偏好。它不能保证提供方今天仍支持这个模型,更不能保证当前账号有资格调用。

真正困难的地方在于另一面:如果今天查不到模型目录,是否应该把所有旧偏好都拒绝?这听起来更保守,却可能让旧版客户端失去原本可用的恢复能力。

Orca 的一项候选修复,把这两个问题放到了同一个写入入口。我们执行了八组输入的前后对照,看到的并非一条“全部从严”的规则,而是对明确否定和缺少证据的区别处理。

接受一个设置,不代表能用它工作

Orca 是连接多个 Agent 执行工具的桌面应用。PR #19946记录了一次 Claude structured session 实验:设置一个未列出的模型 ID 可以成功返回,后续轮次却产生错误和零 token。旧配置恢复也能走到同一入口,因此不一定是用户输入错误。

这些真实 CLI 现象来自上游作者的报告。本轮没有重新启动 Claude,也没有把那些 token 数据算作我们的观测。我们的实验问题更窄:候选守卫能否在明确不支持时阻止 setModel,同时保留合理的正常与兼容路径?

这项修复截至本轮核查仍未合入。它是可审查的候选实现,不是已发布产品的完整保证。

八组输入,真正数写入调用

我们固定 Orca 的基线提交 027acb4efa2e6b226d40df266b86367423946d62 和候选提交 a13c8452e70f214b50ea37149c6f6485bc149f6f,用 Node 24.16.0 执行模型设置、恢复与目录解析的原函数体。TypeScript 类型被移除,模块依赖在实验中显式注入;连接是记录调用的替身,返回预设目录。

这不是完整桌面端测试。它能直接看到是否调用了写入方法、旧偏好有没有留在状态中、恢复是否记录了跳过项。它不能观察真实提供方是否采用设置或成功推理。

输入与入口基线写入次数候选写入次数候选结果
目录明确未列出,普通修改10拒绝,并给出模型名称
已退役的旧模型,恢复10跳过 model,清除旧偏好
目录列出的模型别名11允许写入
别名对应的完整模型 ID11允许写入
目录查询抛错11保留兼容路径
空目录11保留兼容路径
只有 default 占位行11保留兼容路径
有效模型,恢复11正常恢复

八组条件各跑两个版本,共十六条观测。最重要的差别在前两行:候选代码在写入之前拒绝了明确未列出的模型;其余路径继续调用写入方法。正常输入没有因为增加校验而全部失效。

明确支持、明确不支持与目录未知的三种处理

图 1:目录证据与写入决定。来源:本轮 runs/orca.json。“允许写入”仅指执行到 setModel 调用,不代表账号已获授权或真实推理通过。

为什么“未知”不能直接改名为“不支持”

一份有效目录列出了可选模型,其中没有旧 ID,这给拒绝提供了具体依据。目录接口不可用、查询失败或没有可识别条目,则没有给出同样的证据。

候选代码把后一组情况留在兼容路径上。它并未宣称这些模型受支持,而是没有依据这次目录检查禁止写入。调用之后仍可能成功,也可能在别的层次失败。

这个选择尤其影响恢复。普通修改中的拒绝可以显示给用户;恢复函数则捕获该类拒绝,将字段记入跳过集合,并让旧偏好退出保存的 options。如果把目录未知一律当成否定,旧 CLI 上很多原本可用的偏好就可能被静默跳过。

这不是“遇到任何安全检查失败都应该放行”的一般规则。这里讨论的是模型目录兼容性,不是秘密访问、付费额度或外部写入权限。不同问题需要自己的未知状态处理合同。

别名也说明校验不能只做字符串集合相等。目录可能以 sonnet 命名一行,同时给出完整 resolvedModel。保存的值采用完整 ID 时,仍应匹配这项已列出的模型。我们的别名对照保留了这条正常路径。

发现、可用与采用,要问不同的问题

MCP Server Cards 提案 #2127提供了相邻的设计选择:静态卡片说明远程服务器是谁、在哪里、支持哪些协议版本,但不承担随用户和会话变化的工具与能力声明。当前提案文本为 Final,PR 仍 OPEN,而且属于可选扩展轨道。

两者不能简单视为同一种实现。MCP 处理连接前发现;Orca 处理一次具体模型设置。但它们都提醒客户端:过去保存的一条声明,不能直接回答现在这个主体能做什么。

即便模型目录列出了某个 ID,还剩两道不同的问题。其一是当前账号或凭证有没有使用资格;其二是提供方是否实际采用该设置并完成工作。本轮检查没有回答这两道问题。目录是能力信息,设置方法返回是调用结果,成功推理又是另一条证据。

这次工程对照启发的下一步,是为“实际采用”找到可检查的观察点:成功回合中的模型用量元数据是否足够,还是应使用更直接的提供方确认?上游报告指出,无效模型也可能出现在初始化帧里,因此初始化时回显某个 ID 本身还不够。后续真实运行实验可以对照请求的模型、初始化信息与成功回合的模型记录,检验它们是否一致,以及是否能发现回退。我们尚未执行这组实验,也没有据此认定存在静默回退缺陷。

恢复应保留记忆,也应允许偏好过时

对自己的 Agent 客户端,可以先写三类验收:当前目录明确支持时正常恢复;明确不支持时阻止写入并记录跳过原因;目录未知时执行已经约定的兼容策略。再补上完整 ID 与别名、交互修改与启动恢复这两组差异。

对 CodeFlowMu/FCoP,本轮将这项合同送入开发评审。产品侧仍需核对当前 Host 如何取得目录、如何区分账号资格和实际采用、现有恢复记录能否解释跳过原因。我们尚未据此确认产品缺陷,也没有把“加一张能力快照表”指定为唯一实现。

好的恢复会延续用户意图,也会承认环境已经变化。上一次选中的模型可以作为候选;它是否仍可用,需要今天适用的证据。

完整脚本、十六条原始观测与边界说明,见本轮证据包。研究材料维护于研究仓库

Last updated: