问题: _active_topic 只在 continue 时更新,switch 后停留在旧值,导致 overlap 计算失效。 修复: - select() 每次都更新 _active_topic(无论是否切换) - 同步调用 topic_gate.update_active_topic() 保持两份状态一致 同时更新 TopicGate 实例的活跃话题状态,解决两份状态独立的问题。
- anchor.py: 锚点提取(中文 2/3-gram、英文单词、代码标识符) - block.py: 对话块数据结构 - topic_gate.py: 话题门控(overlap/new_ratio 判断切换) - sparse.py: 稀疏召回(BM25/IDF-overlap + exact match 加分) - selector.py: 最小覆盖贪心选择 - gatekeeper.py: 完整流程封装 - tests/: 单元测试 + 端到端测试(含 MiniMax API 验证) 特性: - 纯 Python,无额外模型依赖 - 支持 2 核 2G 环境 - 话题门控 + 稀疏召回 + 最小覆盖选择