squash合并: - 意图识别层论证(8维度+10业界佐证) - 多主题上下文管理愿景+并存论证+补充论证(多轮agentic) - 架构设计文档物理分类(四子目录+INDEX+命名规范+引用同步+边界清晰化) - 前端架构技术债清单归档
7.2 KiB
7.2 KiB
多主题上下文管理愿景
来源:用户架构愿景(2026-06-19)。未来方向,非近期实施。 关联:意图识别层论证(主题检测前置) / 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<conv_id, PerConvState>) - 多主题并行 = 会话内主题级隔离(topic = 轻量会话)
- 架构复用:F-09 per_conv 模式 → 会话内 topic 层级
conv_id(会话)
└─ topics: HashMap<topic_id, {messages, summary, last_active}>
├─ 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<topic_id, summary>)
- 复用 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<topic, summary>) | F-15 压缩基础 |
| 智能切换 | 上下文路由(topic→summary) | 新增 |
| 持久化 | 每主题摘要落 DB | conversation 扩展 |
实现路径(远期,分阶段)
- 主题检测(规则/embedding):消息→主题标签
- 主题分段:ContextManager 按主题边界分段(替代 token 阈值)
- 多主题摘要:每主题 LLM 摘要 + HashMap 存
- 智能切换:当前主题识别 + 摘要路由
- 持久化:主题摘要落 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 阈值)够用。触发条件达成时启动。