咨询数据卡:缓存留在内存、提前预热、文件只有本人可读 #129

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

来自 #118 代码体检(体检第 6 条),清单第 10 单。由 Claude 直接实现,不交 Grok。

问题

scripts/consult_full_data_cache.py 命中也要每领域每轮读 5.5 MB JSON 再整包 deepcopy(实测约 0.2 s/领域);缓存键含服务器日期,每天首问现算(估 4~7 s);缓存文件 0644,含出生资料,不合 0600 规矩。

改法

进程内按 key 留 2~4 份已解析的包、读视图不深拷(核算 4 GB 主机内存);进入咨询时不等待地预热一次;写文件改用 write_private_json。

验收标准

命中路径 ≤0.05 s/领域;consult_card_facts 逐字节不变;新缓存文件权限 0600;全量 pytest 与基线一致。

规矩

  • 基于 origin/staging,独立工作树 codex/*;只改这一件事。
  • BUG 号开工时按 docs/BUG_HISTORY.md 全文件取最大号 +1。
  • 同时改 frontend/src/app/(app)/page.tsx 的单按清单顺序串行。
  • 体检报告:docs/research/code_health_audit_2026_10_28.md(staging a31b6dda3)
来自 #118 代码体检(体检第 6 条),清单第 10 单。**由 Claude 直接实现,不交 Grok。** ## 问题 `scripts/consult_full_data_cache.py` 命中也要每领域每轮读 5.5 MB JSON 再整包 deepcopy(实测约 0.2 s/领域);缓存键含服务器日期,每天首问现算(估 4~7 s);缓存文件 0644,含出生资料,不合 0600 规矩。 ## 改法 进程内按 key 留 2~4 份已解析的包、读视图不深拷(核算 4 GB 主机内存);进入咨询时不等待地预热一次;写文件改用 `write_private_json`。 ## 验收标准 命中路径 ≤0.05 s/领域;`consult_card_facts` 逐字节不变;新缓存文件权限 0600;全量 pytest 与基线一致。 ## 规矩 - 基于 origin/staging,独立工作树 `codex/*`;只改这一件事。 - BUG 号开工时按 `docs/BUG_HISTORY.md` 全文件取最大号 +1。 - 同时改 `frontend/src/app/(app)/page.tsx` 的单按清单顺序串行。 - 体检报告:`docs/research/code_health_audit_2026_10_28.md`(staging `a31b6dda3`)
Claude added the agent/试点agent/排队 labels 2026-10-28 06:02:33 +08:00
Author
Collaborator

已改完,推上 staging(18c6e130,和 #126 一起部署),正在部署。

三件事:

改前 改后
同一张盘再问一轮,准备数据卡(本机实测,1 个领域) 0.106 秒 0.002 秒
每天第一问 回答路径上现算整包(本机约 5.8 秒) 问题一发出就在后台开算,回答路径上通常已经算好
缓存文件权限(含出生资料) 0644,谁都能读 0600,只有服务本身能读
  • 做法:服务里记住最近 3 张盘已经读好的数据(约 90 MB,4 GB 主机够用),同一张盘再问不再重读 5.8 MB 的文件、也不再复制一遍。
  • 内容不变:我拿改前和改后的代码,对同一张虚构盘的全部领域,首次和之后各算两轮,数据卡逐字节相同。
  • 报告、合盘用的同一类缓存不走这份内存,仍各自读取,避免互相影响。
  • 检查:Python 快速门全部 Python 步骤通过;全量前端测试和 staging 逐条比,没有新失败(一条旧测试写死了函数参数,已改);新增 6 条测试。记为 BUG-1476。
  • 不需要专门真机看;部署后在 staging 连着问两个问题,第二问照常即可。部署好了我再说。
<!-- agent:claude review sha=18c6e1306 verdict=pass staging=16fcb8c2895d780b990ed1cd3610cd723690320d checklist=- --> 已改完,推上 staging(`18c6e130`,和 #126 一起部署),正在部署。 三件事: | | 改前 | 改后 | | --- | --- | --- | | 同一张盘再问一轮,准备数据卡(本机实测,1 个领域) | 0.106 秒 | 0.002 秒 | | 每天第一问 | 回答路径上现算整包(本机约 5.8 秒) | 问题一发出就在后台开算,回答路径上通常已经算好 | | 缓存文件权限(含出生资料) | 0644,谁都能读 | 0600,只有服务本身能读 | - 做法:服务里记住最近 3 张盘已经读好的数据(约 90 MB,4 GB 主机够用),同一张盘再问不再重读 5.8 MB 的文件、也不再复制一遍。 - 内容不变:我拿改前和改后的代码,对同一张虚构盘的全部领域,首次和之后各算两轮,数据卡逐字节相同。 - 报告、合盘用的同一类缓存不走这份内存,仍各自读取,避免互相影响。 - 检查:Python 快速门全部 Python 步骤通过;全量前端测试和 staging 逐条比,没有新失败(一条旧测试写死了函数参数,已改);新增 6 条测试。记为 BUG-1476。 - 不需要专门真机看;部署后在 staging 连着问两个问题,第二问照常即可。部署好了我再说。
Claude added agent/部署中 and removed agent/排队 labels 2026-10-28 11:59:29 +08:00
Author
Collaborator

@jesse 已部署到 staging(线上版本 16fcb8c2,前端和排盘服务都是这一版;门禁、数据库迁移成功,登录页 200、未登录读账户 401 正常)。

不需要专门真机看:在 staging 上用同一张盘连着问两个问题,第二问照常出来即可。

没问题请关单,有问题直接在这里说。

<!-- agent:claude deployed sha=16fcb8c2895d780b990ed1cd3610cd723690320d --> @jesse 已部署到 staging(线上版本 `16fcb8c2`,前端和排盘服务都是这一版;门禁、数据库迁移成功,登录页 200、未登录读账户 401 正常)。 不需要专门真机看:在 staging 上用同一张盘连着问两个问题,第二问照常出来即可。 没问题请关单,有问题直接在这里说。
Claude added agent/待真机 and removed agent/部署中 labels 2026-10-28 12:41:53 +08:00
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: root/Jyotisha#129