chore: remove paper, add summary, update README
This commit is contained in:
32
README.md
32
README.md
@@ -1,6 +1,8 @@
|
||||
# 上下文门控器 (Context Gatekeeper)
|
||||
|
||||
**论文:** https://gitea.ephron.ren/elaina/context-gatekeeper/src/branch/main/paper.md
|
||||
> ⚠️ **项目状态**:代码已完成并通过测试,论文暂未撰写。如需在学术场景使用,建议先在 QuAC/CoQA 等标准数据集上完成对照实验。
|
||||
|
||||
**灵感和背景**:https://gitea.ephron.ren/elaina/context-gatekeeper/src/branch/main/SUMMARY.md
|
||||
|
||||
轻量级上下文选择器,在同一会话中自动从历史对话里选出最小且相关的片段,减少话题污染和控制上下文长度。
|
||||
|
||||
@@ -44,9 +46,9 @@ gate = ContextGatekeeper(token_budget=4000)
|
||||
|
||||
# 添加多轮对话
|
||||
gate.add_turn("如何设计一个 Redis 分布式锁?",
|
||||
"分布式锁需要满足互斥性、死锁避免、性能要求。常用 Redisson 实现。")
|
||||
"分布式锁需要满足互斥性、死锁避免、性能要求。")
|
||||
gate.add_turn("锁的 TTL 设置多少合适?",
|
||||
"TTL 取决于业务操作耗时,建议 3-5 倍 buffer,同时要续期机制。")
|
||||
"TTL 取决于业务耗时,建议 3-5 倍 buffer,同时要续期机制。")
|
||||
|
||||
# 为当前查询选择上下文
|
||||
selected = gate.select("锁的 TTL 设置多少合适?")
|
||||
@@ -74,9 +76,9 @@ context-gatekeeper/
|
||||
├── tests/
|
||||
│ ├── test_gatekeeper.py # 单元测试(9/9)
|
||||
│ └── test_full_evaluation.py # 完整评测
|
||||
├── evaluation_results.json # 评测结果
|
||||
├── paper.md # 技术论文
|
||||
├── SPEC.md # 规格文档
|
||||
├── evaluation_results.json # 评测结果(20轮对话)
|
||||
├── SUMMARY.md # 未完成灵感记录
|
||||
├── SPEC.md # 规格文档
|
||||
└── README.md
|
||||
```
|
||||
|
||||
@@ -86,15 +88,15 @@ context-gatekeeper/
|
||||
# 单元测试
|
||||
pytest tests/test_gatekeeper.py -v
|
||||
|
||||
# 完整评测(20轮对话)
|
||||
pytest tests/test_full_evaluation.py -v
|
||||
# 对照实验(需要 SiliconFlow API key)
|
||||
python test_comparison.py
|
||||
```
|
||||
|
||||
## 算法细节
|
||||
|
||||
### 话题门控判断
|
||||
|
||||
```python
|
||||
```
|
||||
overlap = Σ IDF(t) for t ∈ A(q)∩A(T) / Σ IDF(t) for t ∈ A(q)
|
||||
new_ratio = Σ IDF(t) for t ∈ A(q)\A(T) / Σ IDF(t) for t ∈ A(q)
|
||||
|
||||
@@ -116,12 +118,24 @@ score = 1.5·lex(u_b,q) + 0.7·lex(a_b,q) + 1.0·exact(b,q) + 0.2·recency(b)
|
||||
gain(b|S) = Σ IDF(t) for t ∈ cov(b)\covered(S) / cost(b)^α, α=0.8
|
||||
```
|
||||
|
||||
## 对照实验(50轮对话)
|
||||
|
||||
使用 SiliconFlow Qwen/Qwen3-8B 模型,50轮对话(前35轮Redis,中间10轮Python,最后5轮Redis):
|
||||
|
||||
| 指标 | 无门控(完整50轮) | 有门控 |
|
||||
|------|-----------------|--------|
|
||||
| 召回范围 | 全部50轮 | 仅相关轮次 |
|
||||
| Token节省 | — | **96%** |
|
||||
|
||||
有门控时 Query "Redis 的 GeoHash 用来做什么?" 仅召回轮次46(精确匹配),Python asyncio 轮次全部被过滤。
|
||||
|
||||
## 局限性与适用场景
|
||||
|
||||
**局限性:**
|
||||
- 稀疏检索在语义相似但词形不同时召回率有限
|
||||
- 中文锚点无停用词过滤,高频无意义词可能干扰 IDF
|
||||
- Token 估算为粗略估算(字符数×1.5),与实际有 2-3 倍误差
|
||||
- 最小粒度是整个 block,block 内部无句级裁剪
|
||||
|
||||
**适用场景:**
|
||||
- 资源受限的生产环境(边缘设备、私有部署)
|
||||
|
||||
Reference in New Issue
Block a user