上下文压缩
长时间运行的 agent 迟早会撞上模型的上下文窗口。lite-agent 的上下文压缩能力在不破坏 tool_call/tool_result 配对的前提下缩小对话——所有切割都对齐轮次边界——并且分为两个可组合的层:一组以中间件形式接入的确定性工具集,以及一个替你管理上下文压力的自动化 ContextEngine。
开启压缩
用 compaction() 把 compactor 接入中间件管道,并加上 reactiveCompaction() 作为安全网:
compaction(compactor) 在 beforeModel 中运行 compactor 并换入结果,仅当消息真的变化时发出 compaction 事件。reactiveCompaction() 捕获 provider 抛出的上下文溢出错误,裁剪上下文后重试——仅在尚未流出任何内容时。
基于 @lite-agent/sdk 构建时通常什么都不用配:SDK 默认传 context: {},下面的 ContextEngine 已经激活。context 省略时,底层 core 保持原始消息行为。
工具集
以下确定性 pass 和现成的 Compactor 全部从 @lite-agent/core 导出:
每个 compactor 都实现 Compactor 策略——maybeCompact(messages, usage, instructions?) → CompactResult。可选的 instructions 用于引导手动 compaction(类似 Claude Code 的 /compact <instructions>);结构性 compactor 会忽略它。
ContextEngine
ContextEngine 是自动、常驻的上下文管理,当 context 不是 false 时由内核创建。它持有持久事件日志,为每次请求投影一个 ContextView,按内部压力等级逐级升级(externalize → normalize → select → project → recover),并把每次决策汇报为一个 context_status 事件。ModelProvider 暴露了 provider 原生能力(clearToolUses、clearThinking、compact)时优先使用,并通过 KernelContextOptions 接受 planner / archive 钩子。
可用 createContextEngine 单独创建,或用 projectContext 自行投影视图。
另请参阅
- 九种策略——
Compactor策略接口与自定义 compactor 场景。 - 模型提供方——哪些 provider 暴露原生上下文编辑能力。
- 会话持久化——ContextEngine 所基于的事件日志。
- 工具调用 codec——压缩后的历史如何被编码。