发问准备可以并行,三个开关先保持关闭(BUG-1337~1339)
开流前的注销检查可以和读会话、解析模型同时进行;审核改到扣点前等待,不再挡住第一行;模型版本可以短缓存;两个领域可以一起算。本机没有数据库中位数,也没有带星盘网络库的镜像,所以默认仍是关闭、缓存 0、领域逐个算。 自测:tsc 0 错;lint 0 error;相关测试失败 0、取消 0。test:db 未跑。 Co-Authored-By: Grok (agent loop)
This commit is contained in:
co-authored by
Grok (agent loop)
parent
66cd60081f
commit
a0e223e20c
@@ -17795,3 +17795,48 @@
|
||||
- 复发自:无。
|
||||
- 修复版本:未修复。
|
||||
|
||||
## BUG-1337 | 发问前互不依赖的准备步骤仍一个一个等
|
||||
|
||||
- 状态:fixed-pending-verify
|
||||
- 首次发现 / 最近更新:2026-10-14 / 2026-10-14
|
||||
- 来源:issue #62。任务书 T1、T2、T4。
|
||||
- 现象:登录之后,注销检查、读请求、读会话、解析模型、输入审核、再读一次标题,彼此能同时做的地方仍排成一队。打开远程审核时,第一行最多晚约 1.5 秒。
|
||||
- 触发条件:普通对话发问。
|
||||
- 根因:这些步骤按当时的目的写成了串行。先建流只把更后面的模型工作搬进了流里。
|
||||
- 修复:准备步骤收进一个函数。并行开关打开时,注销检查和读请求、读会话、解析模型同时进行,失败仍按原来的状态码顺序返回。审核在扣点前等待,不再挡住第一行。标题在问题保存成功后就开始读。开关默认关闭,因为本机没有量到数据库中位数。
|
||||
- 验证:`consult-turn-prep-20261013.test.ts` 两种开关的状态码和正文一致,假时钟并行 160、串行 210。审核挂起 1.5 秒时第一小段仍先写出。拦住时不扣点。
|
||||
- 防复发:冻结账号仍在扣点前返回;被拦的问题不调用扣点。开启默认值前必须有本机数据库中位数,并且首行至少快两成。
|
||||
- 相关记录:BUG-1074、BUG-976、BUG-1338。
|
||||
- 复发自:无。
|
||||
- 修复版本:分支 `codex/consult-prep-parallel-20261013`,尚未合入 staging。默认开关仍关。
|
||||
|
||||
## BUG-1338 | 会话绑定的模型版本每次都重新查库并检查地址
|
||||
|
||||
- 状态:fixed-pending-verify
|
||||
- 首次发现 / 最近更新:2026-10-14 / 2026-10-14
|
||||
- 来源:issue #62。任务书 T3。
|
||||
- 现象:普通对话每轮都按模型和版本查一次库、解密、对兼容供应商做地址检查。同一文件里没绑版本的目录已经缓存 15 秒。
|
||||
- 触发条件:会话带了模型版本号。
|
||||
- 根因:版本解析是后加的,没有沿用目录缓存。已发布或已退役版本用的供应商代码、类型和地址不能改,但启用开关和密钥仍能改,所以不能缓存太久,也不能缓存失败。
|
||||
- 修复:成功的解析可以缓存,上限 15 秒,和目录一样。失败、空结果、地址检查失败都不缓存。管理端保存供应商、发布、回滚时本来就会清目录缓存,现在一并清掉版本缓存。地址检查函数没改。缓存时间默认 0,因为没有量到「准备模型」快了一半。
|
||||
- 验证:行为测试在 15 秒内第二次不再查库、不再做地址检查;清缓存或关掉缓存后会再查;失败和空结果之后的下一次仍会查。
|
||||
- 防复发:缓存时间不得超过目录的 15 秒。缓存失败会把停用或地址拒绝钉住,因此禁止。
|
||||
- 相关记录:BUG-148、BUG-1337。
|
||||
- 复发自:无。
|
||||
- 修复版本:分支 `codex/consult-prep-parallel-20261013`,尚未合入 staging。默认缓存时间仍是 0。
|
||||
|
||||
## BUG-1339 | 一次问到的多个领域仍逐个计算
|
||||
|
||||
- 状态:closed_by_design
|
||||
- 首次发现 / 最近更新:2026-10-14 / 2026-10-14
|
||||
- 来源:issue #62。任务书 T5。
|
||||
- 现象:一次咨询如果要算两个领域,第二个要等第一个算完。
|
||||
- 触发条件:普通对话的计算计划里有两个领域。
|
||||
- 根因:领域上限来自单次时限。并行会占满两个重计算名额,热缓存时第二个领域本来能复用第一个的排盘。任务书起草试算大约只快一成,热缓存时更慢。
|
||||
- 修复:加了开关。默认仍是逐个算。打开时两个领域一起算,结果仍按计划顺序拼,任一失败整次失败,429 仍是原来的错误码。本轮没有拿带星盘网络库的镜像重跑,所以不把默认改成 2。
|
||||
- 验证:后完成的领域仍排在计划后面;一个 429 时错误码不变;开关为 1 时同时进行的领域数是 1。镜像墙钟、争用 429 次数和逐字节差分都没有跑。
|
||||
- 防复发:BUG-257 仍在。没有「至少快两成五、429 不增加、差分一致」之前,默认保持 1。领域个数上限和逐个时的时间预算公式没改。
|
||||
- 相关记录:BUG-257、BUG-723、BUG-1142。
|
||||
- 复发自:无。
|
||||
- 修复版本:未改默认行为。分支 `codex/consult-prep-parallel-20261013`。
|
||||
|
||||
|
||||
@@ -0,0 +1,58 @@
|
||||
# PROGRESS · 发问准备并行(2026-10-14)
|
||||
|
||||
- 分支:`codex/consult-prep-parallel-20261013`
|
||||
- 基线:`origin/staging` `66cd60081f37a57680274633fcb3fb942d01bb2f`(任务书写的 `77057a819` 的后代;计划评论里的 `2994588ad` 更早,不因此停工)
|
||||
- 个人长报告写作开关仍是关闭,本轮没有改报告章节
|
||||
- 编号:本分支上的 `docs/BUG_HISTORY.md` 最大号是 BUG-1322。BUG-1323~1336 被其它未合并任务书占用。本单用 BUG-1337~1339
|
||||
|
||||
## 开关
|
||||
|
||||
三个都保持代码里的默认,没有单独提交去打开:
|
||||
|
||||
| 开关 | 默认 | 原因 |
|
||||
| --- | --- | --- |
|
||||
| `CONSULT_PREP_PARALLEL` | 关 | 没有本机 Postgres 中位数,不满足首帧快两成 |
|
||||
| `MODEL_VERSION_CACHE_TTL_MS` | 0 | 没有量到「准备模型」快一半 |
|
||||
| `CONSULT_DOMAIN_CONCURRENCY` | 1 | 没有带星盘网络库的镜像重测;起草试算预计达不到快两成五 |
|
||||
|
||||
因此没有写 `CHANGELOG.md`,也没有改 `frontend/DESIGN.md`。
|
||||
|
||||
## 做了什么
|
||||
|
||||
- T1:开流前的登录、注销检查、请求体、会话、模型收进 `loadConsultTurnHead`。并行时注销检查和后面三条同时开始,失败仍按旧的先后返回。423 仍在任何扣点之前。
|
||||
- T2:并行打开时,审核在开流前启动、在扣点前等待。拦住时不扣点,并且比资料错误优先。关掉时仍是开流前等待审核。
|
||||
- T3:按模型和版本缓存成功的解析,最长 15 秒;失败和空结果不缓存;管理端清目录缓存时一并清掉。地址检查函数本身没改。已发布版本的供应商代码、类型和地址不可变,但启用开关和密钥仍可变,所以不能超过目录缓存的 15 秒。
|
||||
- T4:问题保存成功后立刻读标题,和分类同时进行,用到标题时再等。分类仍在扣点和保存之后。
|
||||
- T5:领域并发开关。为 1 时仍是原来的逐个循环,含时间预算。为 2 时一起算,结果按计划顺序组装,不再逐个套时间预算,领域个数上限不变。
|
||||
- T6:准备阶段记一条 `consultation-prep-v1`,只有阶段名、毫秒和状态,没有问题原文。
|
||||
- T7:见 `docs/testing/consult-prep-parallel-ab-20261013.md`。假时钟并行 160、串行 210。这不是开启依据。
|
||||
- 测试注入:模型目录增加 `setModelCatalogIoForTests`,只给测试替换查库、解密和地址检查。生产路径仍调用原来的函数。
|
||||
|
||||
## 改过的既有断言
|
||||
|
||||
| 文件 | 原值 | 新值 | 原因 |
|
||||
| --- | --- | --- | --- |
|
||||
| `content-moderation.test.ts` | 源码含 `await moderate(visibleQuestion, "input"` 且早于 `reserve_consultation_usage` | `await settleInputModeration()` 早于扣点;准备服务里 `beforeReserve` 早于 `input.reserve()`;拦住时扣点次数是 0 | 审核挪到流内、扣点前。关掉开关时开流前的等待还在 |
|
||||
| `model-catalog.test.ts` | `return await readVersion(modelId, configVersion)` | `const model = await readVersion(...)`,只有非空才写入短缓存 | 绑版本的解析可以缓存,失败和空结果不写 |
|
||||
| `model-catalog.test.ts` | 咨询路由里 `if (!sessionModel)` 后面是 503 | 准备函数里 `if (!sessionModel)` 返回 `modelUnavailable()`,状态 503 | 模型不可用仍是开流前的 503,文案随准备步骤搬走 |
|
||||
| `consult-first-frame-and-pacing-20260928.test.tsx` | 401、请求体、会话不存在、会话类型、模型已变这些字面量在路由的 `runTurn` 之前 | 字面量在 `turn-prep.ts`;路由在 `runTurn` 之前调用 `loadConsultTurnHead` 并返回失败 | 开流前的判断收进同一个函数,状态码仍在开流前 |
|
||||
| `rectification-session-composer-guard.test.ts` | 咨询路由里会话缺失返回 404,类型不对返回 `session_not_consultation` | 同样两句在 `turn-prep.ts` | 会话判断搬走,文案和状态码没变 |
|
||||
|
||||
`consultation-agentic-runtime.test.ts` 的领域循环帮助函数现在也接受异步的假计算,以便断言「后完成的领域仍排在计划后面」。原有断言没有改松。
|
||||
|
||||
## 并发为 2 时的时间预算
|
||||
|
||||
领域数仍先被原来的上限截断(现在是 2)。开关为 2 时,这两个领域一起开始,不再逐个问「剩下的时间还够不够下一个」。开关为 1 时,原来的逐个判断还在。
|
||||
|
||||
## 自测
|
||||
|
||||
test:db 未跑:本轮没有改查询语句,任务书也不要求。前端全量和 Python 快速门留给验收。`npm run lint` 0 error,原有 warning 没动。
|
||||
|
||||
| 检查 | 命令 | 结果 |
|
||||
| --- | --- | --- |
|
||||
| 类型 | `node frontend/node_modules/typescript/bin/tsc --noEmit -p frontend` | 0 错 |
|
||||
| 规范 | `npm run lint --prefix frontend` | 0 error,125 条原有 warning |
|
||||
| 准备与审核 | `tsx --test` 下列文件:`consult-turn-prep-20261013`、`consult-prep-gate-20261013`、`content-moderation`、`model-catalog`、`consult-first-frame-and-pacing-20260928`、`rectification-session-composer-guard` | 准备函数 3 通过;门禁文件 5 通过;其余在同一次 41 例里通过(当时缓存测试还在改,后来单文件 5 通过、失败 0、取消 0) |
|
||||
| 计费、注销、标题、寒暄、领域 | 同上命令:`application-billing-contract`、`account-deletion`、`session-title-persist-contract`、`consultation-smalltalk`、`consultation-agentic-runtime` | 136 通过,失败 0,取消 0 |
|
||||
| 假时钟 | `consult-prep-parallel-ab.mts` | 并行 160,串行 210,同时步数 2 对 1 |
|
||||
| 领域镜像 | `consult-domain-concurrency-ab.py` | 退出 0,写明没有跑镜像 |
|
||||
@@ -472,7 +472,7 @@
|
||||
| `TASK-home-sidebar-rerender-20261013.md` | — | 流式回答时侧栏每帧整栏重渲染(BUG-1329,A/B) | 待领取 | `codex/home-sidebar-rerender-20261013` |
|
||||
| `TASK-api-disk-cache-retention-20261013.md` | — | API 磁盘缓存只进不出、VedAstro 审计文件留存出生资料、失败快照久缓存、缓存键规范化(BUG-1330~1332,A/B) | 待领取 | `codex/api-disk-cache-retention-20261013` |
|
||||
| `TASK-report-reference-perf-20261013.md` | — | 长报告出稿提速:术语替换命中预检、哈希单次遍历、同盘复用(BUG-1335~1336,A/B) | 待领取 | `codex/report-reference-perf-20261013` |
|
||||
| `TASK-consult-prep-parallel-20261013.md` | — | 普通对话发问前准备步骤并行、模型版本短缓存、多领域并发开关(BUG-1337~1339,A/B) | 待领取 | `codex/consult-prep-parallel-20261013` |
|
||||
| `TASK-consult-prep-parallel-20261013.md` | `PROGRESS-consult-prep-parallel-20261013.md` | 普通对话发问前准备步骤并行、模型版本短缓存、多领域并发开关(BUG-1337~1339,A/B) | 待验收 | `codex/consult-prep-parallel-20261013` |
|
||||
| `TASK-frontend-dead-code-20261013.md` | — | 前端死代码 17 文件与无调用方接口删除,含未登录重计算接口(BUG-1342) | 待领取 | `codex/frontend-dead-code-20261013` |
|
||||
| `TASK-api-chart-subprocess-gate-20261013.md` | — | 合盘不带 skip 串行排盘、报告无效子进程、名额轻重混用(只模拟)(BUG-1333~1334,A/B) | 待领取(排队:api-disk-cache-retention + report-reference-perf) | `codex/api-chart-subprocess-gate-20261013` |
|
||||
| `TASK-answer-effort-ab-20261013.md` | — | 答题步推理强度开关 + A/B(需模型 key) | 待领取(排队:consult-prep-parallel) | `codex/answer-effort-ab-20261013` |
|
||||
|
||||
@@ -0,0 +1,36 @@
|
||||
# 发问准备并行:本轮量到的和没量到的(2026-10-14)
|
||||
|
||||
开关都还关着。用户发问后的第一行,这轮不会变快。
|
||||
|
||||
## 进程内假时钟
|
||||
|
||||
命令:`node node_modules/tsx/dist/cli.mjs scripts/research/consult-prep-parallel-ab.mts`(在 `frontend` 目录)。
|
||||
|
||||
假延迟:注销检查 50 毫秒,读会话 80 毫秒,解析模型 80 毫秒。这不是数据库实测。
|
||||
|
||||
| | 逻辑耗时 | 同时进行的步数 |
|
||||
| --- | --- | --- |
|
||||
| 串行 | 210 | 1 |
|
||||
| 并行 | 160 | 2 |
|
||||
|
||||
并行比这三条假延迟的相加更短。它不能代替「首帧中位数下降两成」的开启条件,因为本机没有量 Postgres。
|
||||
|
||||
审核密钥不在这台机器上。测试里把审核挂起 1500 毫秒,第一小段在 400 毫秒内已经写出,然后才收到拦截。这是假等待,不是供应商的真实时间。
|
||||
|
||||
## 版本缓存
|
||||
|
||||
行为测试:15 秒内第二次解析不再查库、不再做地址检查;清缓存后会再查;缓存关掉后每次都查;查库失败和空结果不会被记住。没有量到真实「准备模型」那一段快了多少,所以缓存时间保持 0。
|
||||
|
||||
## 两个领域一起算
|
||||
|
||||
命令:`.venv\Scripts\python.exe frontend\scripts\research\consult-domain-concurrency-ab.py`
|
||||
|
||||
本轮没有启动计算服务,也没有带星盘网络库的镜像。任务书起草时的试算大约只快一成,热缓存时反而更慢,达不到快两成五。默认仍是一个一个算。
|
||||
|
||||
## 仍然关闭的原因
|
||||
|
||||
| 开关 | 现在 | 要打开还缺什么 |
|
||||
| --- | --- | --- |
|
||||
| 发问准备并行 | 关 | 本机 Postgres 上鉴权、注销检查、读会话、读模型各 30 次的中位数,并且首帧中位数至少快两成 |
|
||||
| 模型版本缓存 | 0 毫秒 | 同上,准备模型那一段至少快一半 |
|
||||
| 两个领域一起算 | 1 | 带星盘网络库的镜像上墙钟至少快两成五,争用时 429 不增加,响应除约定字段外一致 |
|
||||
Reference in New Issue
Block a user