e2d6f20361
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_0155nFCgCHtoA7jhSDGmZmMu
6.8 KiB
6.8 KiB
PROGRESS · 普通对话上下文窗口与模型缓存(2026-09-06)
工作树:.worktrees/consultation-context-and-cache-20260906
分支:codex/consultation-context-and-cache-20260906
基线:任务书写 origin/staging @ d8a0f615;开工时 origin/staging 已到 9ce7a374(含 BUG-551/552/553),以当时远端为准。修复提交:bf8ad0d1。
未改 page.tsx、生时校正链路、Skill 正文、引擎。客户端零改动。迁移只加 chat_sessions.context_summary。未 bump Skill。
| 任务 | 状态 | BUG |
|---|---|---|
| 5.1 摘要 + 尾巴历史 + 按模型预算 + 溢出重试 | 完成 | BUG-555 |
| 5.2 后台缓存可见 | 完成 | BUG-556 |
| 5.3 Anthropic 历史断点 | 完成 | BUG-556 |
| 5.4 共享方法段搬进系统块 | 完成 | BUG-556 |
| 5.5 BUG_HISTORY / CHANGELOG / testing | 完成 | — |
实现要点
- 历史 =
context_summary之后的全部消息。超historyBudgetChars时从最旧整条丢;单条 12,000 字截断并写省略标记。 - 摘要在最后一条用户消息、时间行之后、问题之前。检查点在
complete_consultation_response成功后异步触发,不扣点,15 秒 ref 超时,乐观并发。 - 溢出识别后同一请求把历史缩到摘要 + 最后一对再
stream一次。咨询公共事件是封闭联合,不能发 rectification 的attempt.reset,所以重试留在服务端。 - 用量聚合按
actual_model_id给出 7/30 天缓存命中;列表加cacheReadTokens。costMicrousd计价口径未改。
系统块 / 工具结果字节
| 块 | 之前 | 之后 | 变化 |
|---|---|---|---|
jyotishSkillMethodBlock |
28,877 B | 35,323 B | +6,446 B(任务预期 +6.4 KB) |
<jyotish-shared-method> |
无 | 6,396 B | Full-spectrum + Event judgment skeleton |
单领域 career methodology.sections 正文 |
约 13.4 KB(含上述两段) | 7,043 B | 只留 baseline + 领域两段 |
| 三领域 career/marriage/wealth 正文 | 约 25.3 KB | 18,914 B | 同上 |
9 段运行时节选与 providesSkillDiscovery: "on-demand" 未回退。
既有断言改动
| 文件 | 原值 | 新值 | 原因 |
|---|---|---|---|
consultation-session-history |
最近 12 条 × 头部 4000 字 | 按模型预算从最旧丢整条;单条 12,000 + 省略标记 | BUG-555 静默砍结论 |
consultation-methodology |
sections 含 Full-spectrum / Event judgment skeleton | 这两段在系统块;领域清单仍随工具结果 | 工具结果不在缓存前缀里 |
chat-session-authority / consult select |
...,chart_profile_role |
另加 context_summary |
检查点读写 |
application-billing-contract |
三处 usages.push(result.totalUsage) |
一处,在 streamWithOverflowRetry |
溢出重试共用首次 stream |
admin-usage-aggregate-contract |
只有 30 天功能用量 | 另加 cache 7/30 天窗口 | BUG-556 命中率不可见 |
测试
| 命令 | 结果 |
|---|---|
本单相关 npx tsx --test(history / summary / cache contract / methodology / skill-binding / generation-settings / admin usage / onboarding-route) |
58 pass / 0 fail / cancelled 0;摘要超时用例 cancelled 0 |
./node_modules/.bin/tsc --noEmit(先删 .next) |
0 错 |
改动文件 eslint --quiet |
0 error |
page.tsx |
未改 |
npm run build -- --webpack |
编译通过;类型检查停在既有 dossierResponse 路由导出(与 BUG-551/553 相同),未打印 ○ / |
全量 npx tsx --test tests/*.test.ts(排除 tests/database-*.test.ts) |
2726 tests / 2712 pass / 14 fail:Docker 地址池耗尽 + 1 条 onboarding 超时竞态(单跑通过) |
npm run test:db |
blocked:见 BLOCKED.md。迁移在一次性 Postgres 上经 stub 表语法检查通过 |
收尾限制
- 溢出重试只包住
agent.stream()抛错;流开始之后供应商才报超窗时不会第二次缩窗(咨询公共事件不能发attempt.reset)。 - 摘要失败只
console.warn("session context summary failed", error),不打印摘要正文。 costMicrousd仍按全价输入单价。
验收(Claude,2026-09-06,对照 TASK-consultation-context-and-cache-20260906.md)
共用门禁见 PROGRESS-session-list-title-and-order-20260906.md 验收段(e2f4b55c:tsc 0 错、lint 0 error、2770 项测试 29 条环境失败、next build / Static、首屏 gzip +0.61%)。
| 项 | 结论 | 依据 |
|---|---|---|
5.1 迁移 20260906010000_chat_session_context_summary.sql(context_summary jsonb null + 列级 grant) |
通过(test:db 环境缺口) |
本机无 Docker;执行方 BLOCKED.md 已记 Docker 地址池耗尽;部署前必须先跑 Migrate Staging Database |
5.1 历史 = 摘要之后 append-only 尾巴;单条 12,000 + 省略标记;按 context_window 预算 clamp((cw−60k)×1.5, 4k, 40k) 从最旧丢整条;null → 128k |
通过 | consultation-session-history.ts::consultationHistoryWindow / historyBudgetChars / clipConsultationHistoryText;model-catalog.ts 现读 v.context_window |
5.1 检查点摘要:尾巴 >16,000 字才触发、最后一对不进摘要、complete_consultation_response 成功后异步、不扣点、ref 计时器 15 s、默认模型、正则清洗、乐观并发 |
通过 | session-context-summary.ts;checkpointConsultationContext 的 update 带 context_summary->>updatedAt = seen / is null 守卫;messages 数组只追加不删(RPC 全部核过),throughMessageIndex 稳定 |
| 5.1 摘要放最后一条用户消息、时间行之后、问题之前 | 通过 | consultationUserTurnContent;三条路径(agentic / general / legacy)同一函数 |
| 5.1 溢出识别 + 同请求一次降级重试 | 通过(有边界) | isContextOverflowError 覆盖 OpenAI / Anthropic 文案与 400;streamWithOverflowRetry 只包 agent.stream() 抛错,流开始后的供应商报错不再缩窗——执行方已在「收尾限制」写明,接受 |
| 5.2 后台缓存可见 | 通过 | api/admin/usage/aggregate 按 actual_model_id × 7/30 天给 runsWithCache / hitRate / readTokens / writeTokens / noCacheTokens / cacheShare;列表 cacheReadTokens |
| 5.3 Anthropic 最后一条历史加第二断点 | 通过 | agent-generation-settings.ts::cachedHistoryMessage 仅 anthropic 生效 |
| 5.4 Full-spectrum + Event judgment skeleton 进系统块、工具结果只剩领域段 | 通过 | skill-binding.ts <jyotish-shared-method>(+6,446 B);consultation-methodology.ts::sharedConsultationMethodMarkdown;9 段节选未回退 |
| 5.5 BUG-555 / 556、CHANGELOG、testing 清单 | 通过 | — |
结论:通过(test:db 为环境缺口)。修复 SHA bf8ad0d1。部署顺序:先 Migrate Staging Database(本迁移 + bab07187 的 5010000_personal_report_longform_appendices.sql),再 deploy,再核 /api/health。