# 多主题上下文管理愿景 > 来源:用户架构愿景(2026-06-19)。未来方向,非近期实施。 > 关联:[意图识别层论证](./意图识别层论证-2026-06-19.md)(主题检测前置) / F-15 上下文管理(基础已落地) ## 愿景 **无感多主题对话(交织并行)**:同一对话中多主题**交织并行**(A-B-A-B,非线性前 A 后 B 分段),系统自动识别主题归属 + 多主题上下文并存 + 交织路由,实现: - ✅ **省 token**:每主题独立摘要,非全历史(交织场景 A-B 混杂,主题隔离收益更大) - ✅ **提速**:短上下文(当前主题摘要),LLM 处理快 - ✅ **提精准**:主题聚焦(B 噪声不干扰 A 处理),LLM 注意力集中,回复更准 ### 场景(交织并行,用户深化) ``` 消息1 → 主题 A(新,如"处理 bug X") 消息2 → 主题 B(新,A 仍活跃,如"加 feature Y") 消息3 → 主题 A(补充,A-B 交织) 消息4 → 主题 B(补充,A-B 并行) ``` **关键**:多主题**同时活跃 + 交织**(非"前 A 段|后 B 段"线性,非"一主题完成才切")。主题数不定(2+)。 ### 意图识别 = 核心前置(用户深化) **多主题并存 → 每消息必须识别"归属哪个主题"**(否则无法路由:消息3 是 A 补充还是新主题 C?)。 - **意图识别**(输入意图/会话意图)= 多主题并存的**前置依赖**(每消息主题归属) - 多主题并存是意图识别的**核心应用场景** - 两者**绑定**:做多主题并存,必须先做意图识别 - **触发条件调整**:多主题并存需求 = 意图识别的强触发(非仅图片/文档输入 或 工具>40) ## 与 F-09 多会话的关系(架构复用) - **F-09 多会话**(已落地 d899c58)= **会话级隔离**(conv_id,`HashMap`) - **多主题并行** = **会话内主题级隔离**(topic = 轻量会话) - **架构复用**:F-09 per_conv 模式 → 会话内 topic 层级 ``` conv_id(会话) └─ topics: HashMap ├─ topic A(消息1,3...) ├─ topic B(消息2,4...) └─ ... ``` **多主题 = F-09 多会话的"会话内"深化**(topic 级 per-conv)。PerConvState/ContextManager 隔离模式复用到 topic 层。 ## 与现有架构关系 | 现有 | 现状 | 愿景进化 | |---|---|---| | **F-15 上下文管理**(分段 archived_segment / 压缩 compressed) | ✅ 已落地(commit 4194842 等),按 **token 阈值**(budget*0.6)触发压缩 | **主题感知**:按主题边界分段,非 token 阈值 | | **ContextManager**(context.rs) | 单摘要/单分段 | **多摘要并存**(每主题一份) | | **意图识别**(预留 coordinator/intent.rs) | 空白(近期不做) | **主题检测前置**(主题=意图维度;图片/文档输入时启动) | | **router**(模型路由) | 静态 weight | 主题/意图→模型(远期) | ## 多主题识别与摘要 ### 主题切换检测 - **embedding 相似度**:当前消息 vs 历史主题向量,相似度低于阈值 = 新主题 - **LLM 分类**:fast model 判主题归属(准但延迟) - **关键词/规则**:主题关键词变化(快但弱) - **渐进**:规则→embedding→LLM(随规模升级) ### 每主题独立摘要 - 主题段(主题边界内消息)→ LLM 摘要 → **多摘要并存**(ContextManager 扩展:HashMap) - 复用 F-15 `compress_prompt` 四段式(意图/决策/文件/约束),按主题 - 摘要触发:主题切换时(非 token 阈值) ### 上下文按主题分段 - 当前:`build_eviction_units` 三元组(保护区 + 可压缩) - 愿景:主题边界分段(每主题一段,切换时归档前主题 + 摘要) ## 智能摘要切换 ### 当前主题识别 - 用户消息 → 归属主题(检测:延续当前主题 / 切换新主题 / 回到旧主题) ### 上下文路由(主题→摘要) - 当前主题摘要 + 关键历史(其他主题摘要压缩/可选展开) - 无感切换(用户不手动切,系统自动选摘要) ### 场景 - 用户聊主题 A(代码)→ 切主题 B(闲聊)→ 回主题 A:系统保留 A 摘要,B 切换时归档,回 A 时恢复 A 摘要(非全历史 reload) ## 收益量化(预估) - **省 token**:多主题对话,每主题摘要 ~500-1000 token,vs 全历史 ~5-10K token(累积),**降幅 80%+**(长对话多主题) - **提速**:短上下文(当前主题),LLM 首 token 快 + 处理快 - **提精准**:主题聚焦,LLM 不被跨主题噪声干扰 ## 可行性 | 组件 | 实现 | 基础 | |---|---|---| | 主题检测 | embedding/LLM/关键词 | 新增(intent.rs 扩展) | | 多主题摘要 | ContextManager 扩展(HashMap) | F-15 压缩基础 | | 智能切换 | 上下文路由(topic→summary) | 新增 | | 持久化 | 每主题摘要落 DB | conversation 扩展 | ## 实现路径(远期,分阶段) 1. **主题检测**(规则/embedding):消息→主题标签 2. **主题分段**:ContextManager 按主题边界分段(替代 token 阈值) 3. **多主题摘要**:每主题 LLM 摘要 + HashMap 存 4. **智能切换**:当前主题识别 + 摘要路由 5. **持久化**:主题摘要落 DB(跨会话恢复) ## 风险评估(用户深化·误判代价不对称) ### 误判代价不对称(核心风险) - **不做多主题**(全历史 A-B 混杂):LLM 信息在,可能跑题但**用户可纠正**(信息未丢) - **多主题误判**(消息3[A 补充]误判为 B):路由 B 上下文 → LLM 用 B 回 A → **完全错位**(比全历史更糟,信息丢失) **误判 > 不隔离代价**。意图识别准确性是**硬约束**(必须高准确,否则不如不做)。 ### fallback 策略(前提,降误判代价) - **低置信度→全历史**:意图识别不确定时**不隔离**(安全降级,避免走偏) - **摘要并存**:即使误判 A/B 摘要都在,信息不丢(LLM 可选/用户纠正) - **用户显式纠正**:"这是 A 主题"→ 重新路由(手动 override) ### 复杂度 vs 收益 vs 准确性 - **复杂度**(高):主题识别(意图瓶颈)+ 多主题上下文管理(HashMap/交织路由/摘要)+ 持久化 - **收益**(中,长对话交织):省 token + 提精准 - **准确性风险**(高):embedding/LLM 分类中文意图+交织主题挑战大,准确率不够→误判走偏→比不做更糟 ## 结论(近期不值得,远期可行) - **近期不值得**:复杂度高 + 意图准确性瓶颈 + 误判代价不对称 → ROI 低。F-15(token 阈值)+ F-09(多会话手动切)够用 - **远期可行**:意图识别准确率有保障(技术成熟/数据积累)+ 长对话交织场景多时,**fallback 是前提**(低置信度降级全历史) ## 触发条件(何时做) - 当前 F-15(token 阈值压缩)够用,多主题是**长对话多主题场景**优化 - 触发:用户反馈长对话跨主题时上下文混乱 / token 成本高 / 回复跑题 - 依赖:意图识别(主题检测)**准确率有保障 + fallback 健壮**(非仅预留就绪) ## 与意图识别关系 - **主题识别 = 意图识别的一种**(主题是意图维度:代码/闲聊/搜索/项目/...) - 意图识别预留(图片/文档输入时启动),主题摘要可**先于完整意图识别**(主题检测独立于模型路由) - 两者共享前置层(coordinator/intent.rs 落地) ## 备注 - 用户原话:「多主题识别与摘要 + 智能摘要切换 → 无感多主题对话 + 上下文压缩(省 token)+ 提速 + 提精准」 - 这是**远期愿景**,近期 F-15(token 阈值)够用。触发条件达成时启动。