# 多主题上下文管理愿景

> 来源:用户架构愿景(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<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 扩展 |

## 实现路径(远期,分阶段)

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 阈值)够用。触发条件达成时启动。
