SOP:思考默认档由 off 改为 low¶
主题目录:
thinking-default-low-20261011/;变更日期 2026-10-11。改动对象:config.yaml、proxy.py,以及复用既有用例脚本thinking-mode-control-20261010/offline_verify.py。
1. 背景¶
2026-10-10 把代理默认改为「完全关思考、仅三类信号升档到 high」(见 thinking-mode-control-20261010/SOP.md)。2026-10-11 实盘核对,off 档过于极端:关掉思考后判断力明显下降,同一批问题上出现「顺着字面作答、不先取证」的稳定偏差(当天多轮对话反复答偏,详见该日会话记录)。用户裁定:默认档由 off 改为 low——开思考、推理强度 low,其它不变。
2. 目标¶
- 默认每步注入
{"thinking":{"type":"enabled"}}+reasoning_effort: low; - 三类升档信号(失败窗口 / 疑难关键词 / 手动提档)保持,升档仍注入
enabled+high; - 手动降档口令(
manual_off)降至最低档off(disabled,完全关思考)——off档保留; skip_models、overrides、fallback_on_reject、escalate参数等一律不变。
3. 前置条件¶
- 可写的
config.yaml与proxy.py,备份已生成(见第 7 章); ./venv/bin/python可用;systemctl --user可用;- 离线验证使用临时端口(假上游 18990、代理 18789),不占用线上 8788。
4. 影响范围¶
- 组件:
token-proxy(systemd --user 服务,监听 0.0.0.0:8788); - 成本影响(已知取舍):所有经
/ds路由的 DeepSeek 请求默认开思考。DeepSeek 官方口径:带 tools 时历史轮次 reasoning_content 会回传并计入上下文,故开思考同时抬高输出侧与后续每一轮的输入侧成本。本次即为此付费,换取判断力; /glm、/mi由skip_models(glm-5.3*、mimo-*)原样放行,不受影响;- 重启约 2 秒,造成一次前缀重建(既有代价,与本次改动无关)。
5. 分步操作¶
步骤 0:备份¶
docgen/backup_ledger.py 建主题目录、按相对项目根备份并登记台账。
cd /home/rain/Documents/services/token_proxy
python3 docgen/backup_ledger.py thinking-default-low-20261011 --backup config.yaml proxy.py
预期:输出两行「备份 …」;thinking-default-low-20261011/backup/README.md 增加两行登记。
步骤 1:改配置(config.yaml 的 thinking 段)¶
默认档由 disabled 改为 enabled,新增 default_effort: low 与 disabled(off 档注入值)。
cd /home/rain/Documents/services/token_proxy
python3 -c "import yaml; yaml.safe_load(open('config.yaml')); print('YAML_OK')"
预期:YAML_OK。关键字段:thinking.default.type=enabled、thinking.default_effort=low、thinking.escalated.type=enabled、thinking.reasoning_effort=high、thinking.disabled.type=disabled;escalate 段(failure_threshold:3、window_steps:8、hold_steps:10、12 个疑难词、manual_on:[获得与神的对话]、manual_off:[无量天尊])保持不变。
坑:default_effort 必须是字符串(DeepSeek 取 low/high/max);写成数字或列表会被 parse_thinking_config 判非法并忽略,表现为「默认档开了思考但不带强度」。
步骤 2:改实现体(proxy.py)¶
五处,最小侵入:
LEVEL_ORDER由两档扩为三档:{"off": 0, "low": 1, "high": 2};parse_thinking_config:解析default_effort(字符串)与disabled(映射),返回字典增两键;_apply_thinking_signals:默认返回由("off","default")改为("low","default");manual_off仍返回off;resolve_thinking_value:三分支——high→escalated+effort;off→disabled、不带 effort;其余(含low)→default+default_effort。默认参数由"off"改为"low";- 启动摘要:默认档补打印 effort,新增「最低=」段。
cd /home/rain/Documents/services/token_proxy
./venv/bin/python -m py_compile proxy.py && echo COMPILE_OK
预期:COMPILE_OK。
降级保护:若 disabled 未配置,off 档会退化为 default(即低档),不会把请求打死。
步骤 3:更新用例脚本(复用既有 offline_verify.py)¶
用例的「默认档」断言由「等于 disabled」改为「等于 enabled+low」;manual_off 相关用例(U4/U6)仍断言 disabled。新增 is_low() 判据,write_config() 的临时配置同步补 default_effort: low 与 disabled: {type: disabled}。
cd /home/rain/Documents/services/token_proxy
./venv/bin/python -m py_compile thinking-mode-control-20261010/offline_verify.py && echo COMPILE_OK
坑:判据改漏一处会让旧语义的用例在低档下「假通过」——凡断言「未升档」的用例(U1/U2r/U5a/U5r/U8/U9r/U10r/U11r)都要从 is_off 改为 is_low,不能只改 U1。
步骤 4:离线验证(假上游 + 临时端口,两遍)¶
cd /home/rain/Documents/services/token_proxy
./venv/bin/python thinking-mode-control-20261010/offline_verify.py
./venv/bin/python thinking-mode-control-20261010/offline_verify.py
预期:两遍均 16/16 通过,逐条一致。失败判断:任一 FAIL 即按第 7 章回滚。
步骤 5:重启生效¶
systemctl --user restart token-proxy ; sleep 2 ; systemctl --user is-active token-proxy
预期:active。
6. 验证¶
- 启动日志(
logs/proxy.log,为二进制流须加-a)应含:
grep -a "思考注入" logs/proxy.log | tail -1
预期含 思考注入=默认={"type": "enabled"}/low | 升档={"type": "enabled"}/high | 最低={"type": "disabled"}(实测 2026-10-11 13:23:31 已见)。
- 之后每步在
logs/usage.jsonl的thinking_level/thinking_reason:普通步应为low/default,升档步为high/*,手动降档后为off/manual_off。 - 观察期看成本与质量:默认开思考后输出侧与输入侧成本会上升,需与判断力改善对照;若成本超预期,优先下调
default_effort或回滚到off。
7. 回滚¶
- 备份位置与台账:
thinking-default-low-20261011/backup/README.md; - 文件:
config.yaml.bak.20261011-132045、proxy.py.bak.20261011-132045; - 步骤:
cd /home/rain/Documents/services/token_proxy
cp thinking-default-low-20261011/backup/config.yaml.bak.20261011-132045 config.yaml
cp thinking-default-low-20261011/backup/proxy.py.bak.20261011-132045 proxy.py
/usr/bin/rm -f logs/state/thinking_levels.json
systemctl --user restart token-proxy ; sleep 2 ; systemctl --user is-active token-proxy
- 回滚触发判据(任一即回滚):① 启动摘要不含上述三段或服务非
active;② 离线验证未达16/16;③ 成本明显超出预期且判断力改善不成立。 - 一键降强度(不整体回滚):把
config.yaml的thinking.default_effort由low改为更保守取值或置空(置空即默认档不带强度),重启即可。
注意:用例脚本 offline_verify.py 已随本次变更在原位更新为 low 语义,不在备份范围内;整体回滚时需要一并改回(判据由 is_low 改回 is_off)。
8. 风险说明¶
| 风险 | 缓解 |
|---|---|
| 默认开思考抬升成本 | 本次为换取判断力的已知取舍;观察期看成本曲线,可下调 default_effort 或一键回滚 |
off 档配置缺失导致降级 |
resolve_thinking_value 有降级分支:无 disabled 时 off 退化为 default,不会打死请求 |
| 用例与实现漂移(假通过) | 用例与实现同批更新、跑两遍;补坏样本验证 is_low 非空转(disabled / enabled+high / 无 effort 三种输入均判 False) |
| 重启造成一次前缀重建 | 与档位切换无关,属重启固有代价;非高峰期执行 |
附录:交付物清单¶
| 文件 | 说明 |
|---|---|
SOP.md |
本文档 |
backup/config.yaml.bak.20261011-132045 |
改前配置 |
backup/proxy.py.bak.20261011-132045 |
改前实现体 |
backup/README.md |
备份台账 |
thinking-mode-control-20261010/offline_verify.py |
既有用例脚本,本次同步更新为 low 语义(原位) |
来源:
/home/rain/Documents/services/token_proxy/thinking-default-low-20261011/SOP.md| 最后更新:2026-10-11 13:24(由build/sync.py同步,请勿在站点侧修改)