contextgate
ContextGate — a context-folding gate plugin for DeepSeek Harness (DSH) / Cordis. Intercepts LLM request streams and folds oversized conversation history into a summary to keep context length under control.
安装
此插件尚未提供可验证的 bundle,或兼容性检查未通过。请先阅读仓库说明。 阅读完整 README ↗
说明文档
阅读完整 README ↗ContextGate
上下文闸门 · A context-folding gate plugin for DeepSeek Harness (DSH) / Cordis
ContextGate 是一个部署在 LLM 请求瀑布(waterfall)中的闸门插件:它观测每一次 LLM 请求的上下文规模,当历史消息超出阈值时,由 LLM gatekeeper(小模型)逐条判断中间历史与当前任务的相关性,只保留相关消息,把无关历史折叠为一条摘要后重发请求——把上下文长度控制在窗口内,显著节省 token。
请求 → [ContextGate 闸门] ──超阈值?── 否──→ 直通
│
是
↓
LLM gatekeeper 逐条判断相关性
├─ 高置信(≥0.85)→ 自动折叠
├─ 低置信 → UI 询问用户(折叠/不折叠)
└─ 失败/超时 → 回退规则折叠(head + 摘要 + tail)
↓
重发请求(仅一次,带逃逸标记)
特性
- 瀑布闸门:监听
llm/stream事件,在请求进入模型路由前拦截,天然与 DSH 的 agent/compaction 流程兼容。 - LLM gatekeeper(Phase 2):超阈值后调用小模型(自动选择轻量模型,可用
gatekeeper.model指定)对候选历史逐条输出keep / confidence判断;drop 项最低置信度 ≥confidence阈值则自动折叠,否则经 UI 询问用户确认。 - 规则折叠回退(Phase 1):gatekeeper 不可用/失败/超时时,回退到 "head + 摘要 + tail" 规则折叠,保证闸门始终可用。
- fail-open:闸门内部任何异常都不会阻塞请求——直接放行原请求,绝不卡死 harness。
- 防递归:重发请求与 gatekeeper 自身调用都带逃逸标记(
WeakSet),不会被再次折叠;辅助调用(如 compaction / session-title,带purpose的请求)直接直通。 - token 估算:优先使用 DSH 的
tokenMeter服务精确估算,不可用时回退到字符数 / 3 的启发式估算。 - 运行观测:注册
contextgate_status工具,模型可随时查看请求数、折叠次数、gatekeeper 统计(自动/确认/拒绝/回退)、节省的 token 等。
工作原理
- 每次 LLM 请求(
llm/stream)到达时,闸门检查它是否属于目标会话(默认仅当前会话)。 - 估算请求消息总 token 数;未超阈值(默认 12000)则原样直通,零开销。
- 超过阈值后,把消息拆分为
head(任务陈述)+mid(候选历史)+tail(最近消息)。 - gatekeeper 判断:把最新用户请求 + 头部任务陈述 + 截断后的候选列表(每条 150 字符)发给小模型,要求输出 JSON 判定每条候选的
keep与confidence。 - 决策:drop 项最低置信度 ≥ 0.85 → 自动折叠;否则弹出 UI 问题询问用户(折叠 / 不折叠);用户拒绝则原样直通。
- 折叠:保留
head+ 被判定相关的候选原文 +tail,无关候选替换为一条结构化摘要消息;系统提示追加说明"历史已被临时折叠、完整内容仍在会话日志中"。 - 重发折叠后的请求(带逃逸标记,只折叠一层),并记录统计。
折叠摘要示例:
[ContextGate 折叠摘要] 82 条中间历史消息(约 73058 tokens)经 AI 判定与当前任务无关,已折叠。
其余 6 条相关历史已保留。完整历史仍保存在会话日志中,如需查看请明确要求恢复。