| 1 | # 适配器拥有的思考选项 |
| 2 | |
| 3 | 每个协议适配器随工厂注册纯函数 `ReasoningForConfig`,返回当前连接和模型可用的 |
| 4 | 选项、顺序、显示名称及默认值。核心不定义统一的力度枚举。已创建客户端通过 |
| 5 | `ReasoningProvider` 返回独立的能力副本,外部修改不会改变客户端行为。 |
| 6 | |
| 7 | 配置、桌面菜单、CLI 补全、本地模型目录和请求校验使用同一套声明。查询能力前必须 |
| 8 | 先解析模型级覆盖。扩展供应商的选项由其 `Efforts` 声明提供,在 sidecar 请求前校验。 |
| 9 | |
| 10 | 显式选择必须与声明的 ID 完全一致。不支持的值在网络请求前返回 |
| 11 | `UNSUPPORTED_REASONING_EFFORT`,不再转换到相邻档位。能力元数据缺失时,显式选择 |
| 12 | 返回 `UNKNOWN_MODEL_REASONING`,提示使用 `auto` 或配置协议及档位。空列表本身不能 |
| 13 | 证明模型不支持思考;显式 `reasoning_protocol = "none"` 才声明不支持这些控制。 |
| 14 | 非法能力声明也会报错。 |
| 15 | 只有开关能力的协议,不能通过填写 `supported_efforts` 虚构低、中、高能力。 |
| 16 | |
| 17 | `auto` 保留原有“清除覆盖、使用默认”的界面与 CLI 含义,不等于自适应思考。 |
| 18 | 请求级 override 使用空字符串表示继承,而不是发送字面值 `auto`。保留旧配置加载时 |
| 19 | 对大小写及已退役 `off` 的兼容处理;已有合法 ID 和 TOML 字段名不变。未声明自定义 |
| 20 | 档位时,已保存的 DeepSeek `medium`、`xhigh` 沿用历史请求值 `high`,不重写配置。 |
| 21 | 新的显式选择和请求覆盖仍拒绝未声明的别名。其他非法值明确报错;非法默认值保留供校验,不替换为第一档。 |
| 22 | |
| 23 | | 边界 | 兼容行为 | |
| 24 | | --- | --- | |
| 25 | | Provider TOML | 旧字段与合法 ID 继续可读,加载时不重写文件 | |
| 26 | | 桌面 `EffortInfo.options` | 新增可选元数据,同时保留旧 `levels` | |
| 27 | | 新前端连接旧后端 | 回退读取 `levels` | |
| 28 | | 远程模型目录 | 继续使用原有 `Efforts` 声明 | |
| 29 | | 模型历史 | 不改提示词、工具定义或历史思考内容 | |
| 30 | |
| 31 | 默认请求保留原有序列化。主动修改力度仍可能影响服务端缓存;契约本身不增加提示词 |
| 32 | 内容。实验性 governor 在自动使用 low 前检查适配器声明。本次不移植 Harness 的请求日志架构。 |
| 33 | |
| 34 | `ResolveReasoningEntry` 按“模型覆盖、连接覆盖、当前内置声明”的优先级统一解析。 |
| 35 | 内置声明精确匹配实际请求 URL、API 类型和模型 ID,包括 Token Rhythm 的 |
| 36 | `deepseek-flash` 别名;重命名连接不影响匹配。用户显式选择其他思考协议时,使用该 |
| 37 | 协议的档位,不混入内置协议的档位。界面、启动校验和适配器构造共用解析结果。 |
| 38 | 原始配置只保留用户声明,继承值随内置目录更新。无法判断来源的历史声明仍按显式 |
| 39 | 配置保留,避免覆盖用户修改。 |
| 40 | |
| 41 | 完整写入配置时生成旧版本可读的模型能力快照。可选 `reasoning_defaults` 标记记录 |
| 42 | 自动生成的字段及声明摘要;新版本只剥离未经修改的自动字段,继续继承最新默认值。 |
| 43 | 旧版本仍可读取原有协议、列表和默认值。旧编辑器删除标记或修改声明但保留旧摘要时, |
| 44 | 这些值转为显式配置。设置页增量保存保留无关及未知字段,不写入未变更的继承值。 |
| 45 | |
| 46 | | 字段或格式 | 旧数据 | 新版本读取 | 旧版本读写 | 结论 | |
| 47 | | --- | --- | --- | --- | --- | |
| 48 | | `reasoning_defaults` | 无标记视为显式配置 | 未修改的标记字段继承当前默认 | 忽略标记、读取快照;丢失标记后值视为显式 | 降级可读 | |
| 49 | | 模型能力 `reasoning.state` | 可缺省 | 区分支持、不支持、未知 | 忽略新增元数据 | 旧界面继续使用原字段 | |
| 50 | | 远程目录 `ReasoningUnknown` | 缺省保留原声明语义 | 传递适配器的未知状态 | 忽略新增标记 | 原 `Efforts` 仍有效 | |
| 51 | | 会话模型和 effort | 原存储字段 | 模型变更时作为整体重新绑定 | 存储格式不变 | 无需迁移会话 | |
| 52 | |
| 53 | 会话 effort 属于具体供应商和模型。切换模型时清除继承的 effort,即使两者都支持 |
| 54 | 同名档位;同模型的显式非法选择仍报错,不静默降档。新草稿仅从同模型继承 effort。 |
| 55 | 启动参数通过仅运行时存在的 `EffortModel` 标识继承来源;CLI、桌面、ACP 和 serve |
| 56 | 遵循同一边界。元数据未知时仍可通过 `auto` 清除覆盖。 |
| 57 | |
| 58 | 参考 [DeepSeek Harness 设计](https://github.com/deepseek-ai/deepseek-harness/blob/d347e703908d0406b7a7ef80e3a0e594d86b2215/.agents/notes/implemented/architecture/2026-07-24-adapter-owned-reasoning-effort-capabilities.zh.md) |
| 59 | 独立实现,未复制上游代码。 |
| 60 |