跳转至

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. 目标

  1. 默认每步注入 {"thinking":{"type":"enabled"}} + reasoning_effort: low;
  2. 三类升档信号(失败窗口 / 疑难关键词 / 手动提档)保持,升档仍注入 enabled + high;
  3. 手动降档口令(manual_off)降至最低档 off(disabled,完全关思考)——off 档保留;
  4. 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. 验证

  1. 启动日志(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 已见)。

  1. 之后每步在 logs/usage.jsonl 的 thinking_level / thinking_reason:普通步应为 low/default,升档步为 high/*,手动降档后为 off/manual_off。
  2. 观察期看成本与质量:默认开思考后输出侧与输入侧成本会上升,需与判断力改善对照;若成本超预期,优先下调 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 同步,请勿在站点侧修改)