本计划用于将《重构设计方案》落地为代码变更。重点:结构优雅、职责边界清晰、低耦合;允许较大改动,做好中文注释;测试由你侧充分覆盖。
交付:
- 确认并写死“previous_response_id 未命中时 sessionId 策略”:已确认采用 生成新的
sess_<uuid> - 确认 ResponseIndex 清理策略(maxEntries + maxAge)默认值
验收:
- README 决策项补全
交付:
sessionManager/ResponseIndex.{h,cpp}sessionManager/ContinuityResolver.{h,cpp}sessionManager/TextExtractor(或工具函数文件)
验收:
- 编译通过
- 最小单测/自测:
- ResponseIndex bind/get/cleanup
- ContinuityResolver:
- responses + previous_response_id hit/miss
- zeroWidth decode ok/miss
- hash path 调用旧逻辑(结果一致)
交付:
GenerationRequest新增:- endpointType(Chat/Responses)
- previousResponseId(optional)
RequestAdapters:- responses adapter 解析 previous_response_id
- 抽取 input/messages/input_items 的文本集合
验收:
- 对同一请求,TextExtractor 输出稳定可预测
交付:
- GenerationService:
- 开头调用 ContinuityResolver 得到 sessionId
- Session 全局 map 用 sessionId getOrCreate
- gate key 统一为 sessionId
- responses:生成 responseId 并 Early bind 到 ResponseIndex
- Completed:Late commit(session history/hash/lastResponseId/time)
验收:
- 两轮 responses 续接通过
- SSE 快速续接通过
交付:
- ResponsesJsonSink/ResponsesSseSink:确保
id总能输出
验收:
- responses 的 JSON 与 SSE 均能在早期拿到 responseId
- 新增:
aiapi/src/sessionManager/ResponseIndex.h/.cpp - 新增:
aiapi/src/sessionManager/ContinuityResolver.h/.cpp - 新增:
aiapi/src/sessionManager/TextExtractor.h/.cpp(或SessionTextUtils.*)
- 修改:
GenerationRequest.h增加 endpointType、previousResponseId - 修改:
RequestAdapters.cpp负责填充上述字段
- 修改:
GenerationService.cpp接入 ContinuityResolver - 修改:
Session.cpp/Session.h(必要时)补齐 session_st 字段语义(sessionId/lastResponseId 等) - Gate key:统一 sessionId
- 修改:
ResponsesJsonSink.*、ResponsesSseSink.*确保 id 输出
- Early bind 时机太晚导致 SSE 场景第二轮 miss
- 规避:在 Started 事件 emit 前就 bind
- Hash 规则误改导致历史会话全部断链
- 规避:Hash 计算逻辑完全复用旧函数;加回归对比日志/测试
- ZeroWidth 文本来源不全导致某些客户端断链
- 规避:TextExtractor 覆盖 input + messages + input_items;并取最后出现的零宽 id
- ResponseIndex 清理策略过激导致续接不稳定
- 规避:默认 maxAge 足够长(例如 1h/6h),maxEntries 足够大;清理只在插入或定时触发
- Chat:ZeroWidth/Hash 两模式均正常,Hash 结果不变
- Responses:
- 每次返回
id - previous_response_id 优先续接
- previous_response_id miss -> 新会话(符合选定策略)
- 支持 input/messages/input_items 的 ZeroWidth 解析
- SSE 快速续接稳定(验证 Early bind)
- 每次返回
- Session 全局 map key 仍为 sessionId
- 关键日志具备:source/sessionId/responseId/hit-miss