e01420178f
The entity pages carry the rejected alternatives and why, so the next reader does not have to reconstruct the argument: minimal patch cannot fill a tier that does not exist, cherry's wire DSL buys four endpoint protocols we do not have, and default_effort lost its only consumer the moment enable_thinking=True became Effort.AUTO.
3.2 KiB
3.2 KiB
type, node_id, title, date
| type | node_id | title | date |
|---|---|---|---|
| design | design:reasoning-effort | 推理档位一等化设计(issue #20 及其一般形式) | 2026-09-05 |
推理档位一等化设计(issue #20 及其一般形式)
正文: 2026-09-04-reasoning-effort-design.md。状态: 2026-09-04 人类已批准。
- 选定方案: 方案 B「能力表档位化 + 源级/请求级双入口」。
Effort八档封闭枚举(含auto)入types.py;ThinkingCapability由can_disable: bool改为supported_efforts: tuple[Effort, ...](「能不能关」=none在不在列表里);ProviderProfile的两个固定片段改为ThinkingWire(off / on_base / effort_key);生效档位 = 请求级 > 源级 >enable_thinking语法糖。 - 触发与真实缺口: issue #20 字面要一条 zhipu profile,但补它不能解决它自己描述的失败——GLM-5.3 官方强制推理(智谱文档、cherry、OpenRouter 三源一致),
none是我们发出去的未定义值;而medium(现 minimax profile 硬编码的档)在 GLM/kimi/deepseek 上根本不存在。缺口是类型表达不了现实,不是表里少一行。 - 人类三项拍板(2026-09-04): 作用域「源级默认 + 请求级覆盖」;档位打空时「默认报错 + 可显式开 nearest 映射」;不可关闭时「报错并给出该模型最低档作为可执行替代」。复核 Codex 异议后追加确认:
effort_fallback随本期实现,不因当前无消费者而推迟。 - 被否决备选及理由: 方案 A 最小补丁(只补 zhipu profile、维持 bool)——
thinking_on填什么档都是错的,can_disable只能在「让下游跑不起来」与「登记一个官方否认的能力」间二选一,治标;方案 C 照抄 cherry 完整 wire DSL(closed operations、effortMap、budgetWire、endpoint-keyed contract)——它需要那层是因为要支持四种端点协议,而本库只有一个 OpenAI 兼容 transport,跨协议转换由 new-api 服务端完成,该复杂度当前无消费者(P1 YAGNI);default_effort字段——自审把enable_thinking=True的语法糖改成Effort.AUTO后失去唯一消费方,厂商默认档降为evidence文本;档位与reasoning_tokens的运行期对账——无可判定的函数关系(实测同档 rt 在 8~56 间跳),报警必成噪声;代下游裁剪采样参数(DeepSeek 思考模式不支持temperature)——那是「默认值掩盖错误」,记入 evidence 而不写进逻辑。 - 审查留痕: Claude 自审揪出两处实质缺陷(词汇缺
auto,导致 9 个纯开关型模型无档可填、等于把要修的 bug 重新实现一遍;五关顺序错置,使「关不掉」的特殊文案被通用分支吞掉)。Codex 独立审推翻两条错误断言: ① 源级extra_body/enable_thinking早已经build_model_fingerprint进缓存 key(ARCH §7.5 有明文),不存在先前稿本断言的「现存毒化缺口」;② 「三项目无调用点」是对不存在的目录做 grep 得到的空结果,reference/下当前并无三项目,迁移安全性只能是推断。另采纳其三条: 删default_effort、补能力表落库规则、列出库内真实会断的调用点(tests/unit/test_thinking.py:128的位置参数构造)。