96 lines
2.6 KiB
Markdown
96 lines
2.6 KiB
Markdown
# 上下文门控器 · 未完成的灵感
|
||
|
||
> 这是一个被暂时搁置的项目,记录在此作为未来工作的起点。
|
||
|
||
---
|
||
|
||
## 灵感来源
|
||
|
||
大语言模型在多轮对话中面临两个核心问题:
|
||
|
||
1. **上下文污染**:历史话题干扰当前话题,导致回答偏离
|
||
2. **上下文膨胀**:历史长度线性增长,计算成本上升,容易超出 context window
|
||
|
||
现有方案多依赖 embedding 模型或向量检索,在资源受限环境下难以部署。
|
||
|
||
---
|
||
|
||
## 核心想法
|
||
|
||
设计一个**无需额外模型**的轻量级上下文选择器:
|
||
- 用**话题门控**判断继续还是切换(基于锚点 overlap)
|
||
- 用**稀疏检索**(BM25/IDF)替代向量检索
|
||
- 用**最小覆盖贪心**选择最相关的历史片段
|
||
|
||
---
|
||
|
||
## 已完成的部分
|
||
|
||
- [x] 完整代码实现(纯 Python,无第三方模型依赖)
|
||
- [x] 四阶段流程:锚点提取 → 话题门控 → 稀疏召回 → 最小覆盖选择
|
||
- [x] 单元测试 9/9 通过
|
||
- [x] 与 Qwen/Qwen3-8B(SiliconFlow)的端到端联调
|
||
- [x] 50轮对话对照实验(Token 节省 96%)
|
||
- [x] 两轮子代理代码评审,发现并修复了 2 个严重 bug
|
||
- [x] README.md 完整文档
|
||
|
||
---
|
||
|
||
## 未完成的部分
|
||
|
||
- [ ] 在标准数据集(QuAC/CoQA)上与 Attentive History (BERT) 做对照实验
|
||
- [ ] 与 last-N 基线的量化对比
|
||
- [ ] 论文撰写(在标准学术数据集上验证后才写)
|
||
- [ ] 消融实验(各模块贡献度分析)
|
||
- [ ] 中文停用词表(提升锚点质量)
|
||
- [ ] 句级裁剪(目前最小粒度是整个 block)
|
||
- [ ] tiktoken 精确 token 估算
|
||
|
||
---
|
||
|
||
## 关键发现
|
||
|
||
### 对照实验(50轮对话)
|
||
|
||
| 指标 | 无门控(完整50轮) | 有门控 |
|
||
|------|------------------|--------|
|
||
| 召回范围 | 全部50轮 | 仅相关轮次 |
|
||
| Token节省 | — | **96%** |
|
||
| 回答质量 | 正确 | 正确 |
|
||
|
||
### 发现的 bug
|
||
|
||
1. `_active_topic` 在话题切换后不更新(已修复)
|
||
2. `TopicGate` 实例状态与 `_active_topic` 不同步(已修复)
|
||
|
||
---
|
||
|
||
## 相关工作(待深入)
|
||
|
||
| 论文 | 方法 | 与本文的关系 |
|
||
|------|------|-------------|
|
||
| Attentive History Selection (2019) | BERT + 注意力软选择 | 需要GPU,本文纯规则 |
|
||
| The Complexity Trap (2025) | 简单丢弃旧observation | 证明了简单选择≈复杂压缩 |
|
||
| DiSCo (2024) | LLM蒸馏稀疏检索 | 需要训练,本文无需训练 |
|
||
|
||
---
|
||
|
||
## 启动建议
|
||
|
||
```bash
|
||
cd context-gatekeeper
|
||
pip install -e .
|
||
|
||
# 运行测试
|
||
pytest tests/test_gatekeeper.py -v
|
||
|
||
# 对照实验(需要 SiliconFlow API key)
|
||
python test_comparison.py
|
||
```
|
||
|
||
---
|
||
|
||
## 仓库地址
|
||
|
||
https://gitea.ephron.ren/elaina/context-gatekeeper
|