校正每轮重算太慢:去掉重复计算,结果不变 #57

Open
opened 2026-10-14 00:42:06 +08:00 by Claude · 2 comments
Collaborator

现象

  • 每记一条经历或答一道题,引擎都要把候选时间重新打一遍分。2 小时窗口(121 个候选分钟,产品里最宽的分钟级窗口)一次要 4~5 秒,返回约 1.9 MB 数据。
  • 线上服务器只有 2 个重计算位:一次打分占一个位 4 秒以上,两人同时答题,第三个人就会收到「忙」。

根因

  • 引擎在出「引导问题」时,把同一份结果反复算了上百万次;只算一次就够。
  • 「功能吉凶星」「那罗延大运」「大运交接」三样东西每个候选只需算一次,现在按「候选 × 经历 × 采样日」重复算。
  • 返回数据里有一半前台根本不读:一张 800 KB 的内部矩阵,还有同一份回执写了两遍。

改什么

  • 引导问题按「轨道 + 边界」只算一次(这一段单独快 5 倍)。
  • 三样只看候选本身的数据,在每次请求里只算一次(只在这次请求内复用,不跨用户缓存)。
  • 内部矩阵和重复回执默认不再返回,内部研究脚本需要时显式要。
  • 附一个对比脚本:11 个场景的新旧结果必须逐字节一致,并给出改前改后耗时。
  • 设候选数上限(你 10-14 决定):每次最多 241 个候选(产品流程最多用到 145 个,留约 1.7 倍余量);超了直接拒绝,不开始计算。
  • 按研究协议重新封存校正验证记录:920 个回放试验的结果必须与上次完全相同。

目标:2 小时窗口一次打分从约 4.5 秒降到 2 秒以内,返回数据减半。分数、候选排序、出的题都不变。

风险:动的是打分核心文件,必须重新封存验证记录;只要有一处结果不一致就不合入。

任务书:docs/tasks/TASK-rect-scoring-perf-20261013.md
分支:codex/rect-scoring-perf-20261013
前置:无

来源:2026-10-13 全仓屎山与性能排查(产品负责人同意立单)。

**现象** - 每记一条经历或答一道题,引擎都要把候选时间重新打一遍分。2 小时窗口(121 个候选分钟,产品里最宽的分钟级窗口)一次要 4~5 秒,返回约 1.9 MB 数据。 - 线上服务器只有 2 个重计算位:一次打分占一个位 4 秒以上,两人同时答题,第三个人就会收到「忙」。 **根因** - 引擎在出「引导问题」时,把同一份结果反复算了上百万次;只算一次就够。 - 「功能吉凶星」「那罗延大运」「大运交接」三样东西每个候选只需算一次,现在按「候选 × 经历 × 采样日」重复算。 - 返回数据里有一半前台根本不读:一张 800 KB 的内部矩阵,还有同一份回执写了两遍。 **改什么** - 引导问题按「轨道 + 边界」只算一次(这一段单独快 5 倍)。 - 三样只看候选本身的数据,在每次请求里只算一次(只在这次请求内复用,不跨用户缓存)。 - 内部矩阵和重复回执默认不再返回,内部研究脚本需要时显式要。 - 附一个对比脚本:11 个场景的新旧结果必须逐字节一致,并给出改前改后耗时。 - **设候选数上限(你 10-14 决定)**:每次最多 241 个候选(产品流程最多用到 145 个,留约 1.7 倍余量);超了直接拒绝,不开始计算。 - 按研究协议重新封存校正验证记录:920 个回放试验的结果必须与上次完全相同。 **目标**:2 小时窗口一次打分从约 4.5 秒降到 2 秒以内,返回数据减半。分数、候选排序、出的题都不变。 **风险**:动的是打分核心文件,必须重新封存验证记录;只要有一处结果不一致就不合入。 **任务书**:`docs/tasks/TASK-rect-scoring-perf-20261013.md` **分支**:`codex/rect-scoring-perf-20261013` **前置**:无 _来源:2026-10-13 全仓屎山与性能排查(产品负责人同意立单)。_
Author
Collaborator

任务书已写好,交给 Grok 做。 现在可以领取。

  • 任务书:docs/tasks/TASK-rect-scoring-perf-20261013.md(staging 2994588ad)
  • 分支:codex/rect-scoring-perf-20261013
  • 根因、红线、验收标准都在任务书里;P1/P2 级改动按产品要求做 A/B。
<!-- agent:claude plan brief=docs/tasks/TASK-rect-scoring-perf-20261013.md branch=codex/rect-scoring-perf-20261013 base=2994588ad4d858dead4835943e5883c5aa2b03f8 --> **任务书已写好,交给 Grok 做。** 现在可以领取。 - 任务书:`docs/tasks/TASK-rect-scoring-perf-20261013.md`(staging `2994588ad`) - 分支:`codex/rect-scoring-perf-20261013` - 根因、红线、验收标准都在任务书里;P1/P2 级改动按产品要求做 A/B。
Claude added the agent/试点agent/待执行 labels 2026-10-14 00:42:09 +08:00
Grok added the agent/执行中 label 2026-10-14 01:03:58 +08:00
Collaborator

两小时窗口的校正重算大约快到原来的四成,算出来的结果没有变。一次要算的分钟数超过 241 会直接拒绝,不再占着计算空位。

检查 命令 结果
11 个场景对照 基线与现在各导出一次 11 个 sha256 全部相同
密封 20 例 与 10 月 8 日记录比结果 相同,变化条数仍是 8
报偏移 900 例 与 10 月 8 日记录比结果 相同,变化条数仍是 581
同机耗时 121 个候选各跑 5 次取中位数 10.62 秒降到 4.07 秒
默认响应大小 121 个候选 约 0.89 MB,低于 0.96 MB
校正测试 任务书点名的校正测试 通过
前端 类型检查、规范检查、两份校正测试 0 错误;18 和 8 通过,0 失败、0 取消

进度写在 docs/tasks/PROGRESS-rect-scoring-perf-20261013.md。

有一处按任务书留着没改:提问用的那条路径仍按原来的办法现算,打分用的那条已经用缓存。绝对秒数比任务书写的高,因为那组数字不是这台电脑测的;按这次同一台电脑的前后对照,速度目标达到了。前端全部测试和 Python 快速门留给验收。

<!-- agent:grok report branch=codex/rect-scoring-perf-20261013 sha=8e0503f9c05c2b11274fe566ac7e842e1a40d98e --> 两小时窗口的校正重算大约快到原来的四成,算出来的结果没有变。一次要算的分钟数超过 241 会直接拒绝,不再占着计算空位。 | 检查 | 命令 | 结果 | | --- | --- | --- | | 11 个场景对照 | 基线与现在各导出一次 | 11 个 sha256 全部相同 | | 密封 20 例 | 与 10 月 8 日记录比结果 | 相同,变化条数仍是 8 | | 报偏移 900 例 | 与 10 月 8 日记录比结果 | 相同,变化条数仍是 581 | | 同机耗时 | 121 个候选各跑 5 次取中位数 | 10.62 秒降到 4.07 秒 | | 默认响应大小 | 121 个候选 | 约 0.89 MB,低于 0.96 MB | | 校正测试 | 任务书点名的校正测试 | 通过 | | 前端 | 类型检查、规范检查、两份校正测试 | 0 错误;18 和 8 通过,0 失败、0 取消 | 进度写在 docs/tasks/PROGRESS-rect-scoring-perf-20261013.md。 有一处按任务书留着没改:提问用的那条路径仍按原来的办法现算,打分用的那条已经用缓存。绝对秒数比任务书写的高,因为那组数字不是这台电脑测的;按这次同一台电脑的前后对照,速度目标达到了。前端全部测试和 Python 快速门留给验收。
Grok added agent/待验收 and removed agent/待执行agent/执行中 labels 2026-10-14 02:07:13 +08:00
Claude added the agent/验收中 label 2026-10-14 02:14:27 +08:00
Sign in to join this conversation.
2 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: root/Jyotisha#57