# 答题步推理强度(2026-10-15;2026-10-28 补跑 A/B,issue #134) 2026-10-15 那次没有模型钥匙,只拦截了请求体。2026-10-28 产品提供了临时钥匙(只存在本机 0600 文件里,没有进仓库、日志或 issue),按任务书 T0 第 2 步、T2、T3 跑完了,结果见文末「2026-10-28 实测」。 命令:在 `frontend` 目录执行 `node node_modules/tsx/dist/cli.mjs tests/answer-effort-probe.mts --dry-run`。假请求不离开这台机器。模型对象与产品相同:`providerId: deepseek`,`modelId: deepseek-flash`,带 `url` 和假的 `apiKey`。2026-10-15 起脚本在 `frontend/tests/`,不再放在 `frontend/scripts/research/`。 ## 请求体里实际有什么 | 形状 | thinking | reasoning_effort | max_tokens | | --- | --- | --- | --- | | 今天的答题设置,第 0 步和第 1 步 | `{ type: enabled }` | 无 | 24576 | | 旧的低强度设置(没有产品调用方) | `{ type: enabled, reasoningEffort: low }` | 无 | 10240 | | 新开关 `low` / `medium` / `high` / `max`(只在答题步) | `{ type: enabled }` | 与开关相同 | 24576 | | 续写 | `{ type: disabled }` | 无 | 16384 | 旧的低强度写在 `thinking` 里面,请求体没有 `reasoning_effort`。这证实了任务书 §2.3。记为 BUG-1354,状态 investigating。原先写成 BUG-1351,该号已被数据层占用。线上不用这处设置。 新开关写在供应商选项的最外层。兼容通道把它写成 `reasoning_effort`。开关不设时,两步请求体与改前逐字节一致,样本在 `frontend/tests/fixtures/answer-effort-switch-20261013.json`。 ## 供应商接受度 未跑。没有 `DS_KEY` / `BACKTEST_MODEL_KEY`。`low`、`medium`、`high`、`max` 哪几档能用,要等验收时用临时钥匙跑探针的后半段。 ## 固定 10 题 脚本已能按 `--cases` 跑下面这 10 题,并能按 `--efforts unset,low,medium` 把同一题的几档挨着跑。多档同时跑时并发降为 1,因为强度读的是进程里的环境变量,并行会串档。本机没有钥匙,这 10 题没有跑。 | # | 盘 | 领域 | | --- | --- | --- | | 1 | steve_jobs | career | | 2 | barack_obama | parents | | 3 | elizabeth_taylor | marriage | | 4 | marilyn_monroe | parents | | 5 | judy_garland | health | | 6 | edith_piaf | marriage | | 7 | frida_kahlo | health | | 8 | george_w_bush | career | | 9 | zinedine_zidane | career | | 10 | marilyn_monroe | marriage | ## 耗时与质量 2026-10-15:没有数。2026-10-28 的结果见下一节。 ## 2026-10-28 实测(issue #134) 代码基线:staging `16fcb8c2`(本单不改代码)。脚本:供应商接受度用本机一次性脚本直连 `https://api.deepseek.com/chat/completions`,请求形状与产品相同(`thinking: enabled`,只改 `reasoning_effort`);A/B 用仓库里的 `frontend/scripts/research/consult-biography-backtest.mts`(产品的真实提示词、工具、答题设置与流式处理,引擎结果换成公开名人 golden 盘)。回答原文只留在本机 `scratch/`(不入库)。 ### T0 · 供应商接受度 - 两个模型 `deepseek-flash`、`deepseek-v4-pro`,`reasoning_effort` 不设 / `low` / `medium` / `high` / `max` 各 3 次,**全部 HTTP 200**,没有一档被拒。 - 短问题(推理只有一两百 token)看不出差别。换成一道要多步推理的长问题(`deepseek-flash`,每档 3 次,推理 token 中位数 / 用时中位数): | 档 | 推理 token | 用时 | | --- | ---: | ---: | | 不设 | 5,979 | 45.9 s | | `low` | 2,820(−53%) | 25.9 s | | `medium` | 6,199(+4%) | 42.8 s | | `high` | 6,450(+8%) | 48.4 s | - 判定(任务书 T0 规则):`medium`、`high` 与不设的差在 10% 以内,视为**被忽略**,A/B 去掉;只跑「不设」对「`low`」。 ### T2 / T3 · 10 题 × 3 次(`deepseek-flash`) 两组各一个进程同时跑(并发 3),供应商时段波动两组一样。 | 指标(30 份回答) | A 不设 | B1 `low` | | --- | ---: | ---: | | 答题步推理 token 中位数 | 5,749 | 3,159(−45%) | | 端到端用时中位数 | 34.1 s | 21.6 s(−37%) | | 端到端用时平均 | 34.3 s | 23.2 s | | 失败 / 空答 / 截断 / 非正常结束 | 0 / 0 / 0 / 0 | 0 / 0 / 0 / 0 | | rubric `must_not` 原文命中 | 0 | 0 | | 确定性禁句命中 | 0 | 1(`retrograde_repeat`:「逆行,所以这条路走得慢一些」) | | 正文可见字数中位数 | 11,627 | 11,523 | | 第 0 步(选工具)用时中位数 | 0.70 s | 0.69 s | | 第 0 步选到与问题一致的领域 | 30 / 30 | 30 / 30 | 整场推理 token 合计 172,899 → 105,149。 **人工读稿**:10 题的第 1 次两组并排全读(20 份);第 2、3 次只有上面的自动检查,没有逐份读,这里如实写明。 | 人工四项(10 题 × 第 1 次) | A | B1 | | --- | ---: | ---: | | 缺事实(卡里有、与问题直接相关却没说) | 0 | 0 | | 跑题 | 0 | 0 | | 重复 | 0 | 0 | | 空答 | 0 | 0 | 短评:两组结构一样(结论 → 宫位与宫主 → 分盘 → 大运时间 → 一句追问),引用的宫位、宫主、九分盘和大运区间基本相同;B1 有几题多写了一层小运或分盘细节,没有因为想得少而漏掉要点。B1 另有一处措辞小毛病(一份回答里多了个「这」字)。 ### `deepseek-v4-pro` 抽样(第 1、4、6 题 × 3 次) | 指标(9 份) | A 不设 | B1 `low` | | --- | ---: | ---: | | 推理 token 中位数 | 6,569 | 3,361(−49%) | | 端到端用时中位数 | 80.1 s | 46.7 s(−42%) | | 失败 / 空答 / 截断 | 0 / 0 / 0 | 0 / 0 / 0 | | `must_not` / 禁句 | 0 / 0 | 0 / 0 | ### 判定(任务书 T3 五条门槛) 1. 推理 token 中位数降 ≥ 30%、端到端降 ≥ 20%:flash −45% / −37%,v4-pro −49% / −42% → **满足**。 2. 空答、截断为 0:两组都是 0 → **满足**。 3. `must_not` 命中 ≤ A:0 = 0 → **满足**。(确定性禁句 B1 多 1 处,记在这里。) 4. 人工四项 ≤ A:读过的 10 题第 1 次都是 0 = 0 → **在读过的范围内满足**;第 2、3 次未逐份读。 5. v4-pro 抽样不出现 A 没有的空答或截断:**满足**。 **提议**:答题步默认 `low`,即部署配置设 `CONSULT_ANSWER_REASONING_EFFORT=low`。按任务书,默认值由产品负责人拍板后另一个小提交写进部署配置;本单不改代码。 ### 顺带:第 0 步要不要关思考(issue #135 的数据) 同一批 60 次运行里,第 0 步(只决定调哪个工具)用时中位数 0.70 s(最长 1.42 s),推理 token 中位数约 30(最多 159),60 次全部选对了领域。所以第 0 步关思考最多省约半秒,而且 DeepSeek 思考模式下历史里的工具调用必须带回 `reasoning_content`(本机实测缺了会 HTTP 400,BUG-282 / 937 一类风险)。体检估的「首字前多 3~5 秒」主要不在这一步。