Skip to content

会话上下文压缩

上下文压缩只针对当前这一会话:把早先轮次压成摘要,让后面模型调用时带的活跃窗口小一点。

这和改记忆库里存的长记忆不是一码事。要动存储条目,看 长期记忆


现在默认就开着,零配置

新建的机器人自动压缩默认启用,阈值、比例、摘要模型一个都不用配——Memoh 全按聊天模型的 context_window 比例来:

  • 会话可压缩历史超过窗口约 50%:本轮结束后后台压。
  • 后台没追上、涨过约 75%:下一轮发送前同步压。
  • 两条路都把原始历史压回窗口约 40%

唯一的真前提:聊天模型必须在模型设置里声明 context_window。没有它,自动策略没有预算基准,永远不会触发。见 提供方与模型

默认值变更之前建的机器人保留原有设置、按原语义跑(见下面的 legacy 模式)。


配置项

要调也还是可以调:

字段说明
Compaction Enabled默认开。关掉即禁用本机器人的自动压缩。
Compaction Threshold输入 token 阈值。0(默认)= 上面的自动比例策略;大于 0 切到 legacy 绝对阈值模式。
Compaction Ratio压多狠。只在 legacy 模式下生效——阈值为 0 时这个字段直接隐藏。
Compaction Model可选的专用摘要模型。默认继承聊天模型;设过 override 也可以清回 Use chat model (default)

摘要模型怎么选

启用的 chat 模型基本都行,唯一限制:provider 必须尊重输出 token 上限。OpenAI Codex 系模型当不了摘要模型——下拉框里直接筛掉了。

要注意的场景:机器人主聊天模型本身就是 Codex 时,自动压缩因为没有可继承的合法模型会静默不跑。这种情况显式配一个 Compaction Model。


立刻压

两路:

状态区

  1. 打开当前对话。
  2. 打开会话状态区。
  3. Compact Now

上面也有上下文占用、缓存、技能等,方便你判断要不要现在压。

斜杠命令

text
/compact

text
/compact run

手动压缩会尽量全量压(不止压到自动目标线),并且绕过自动压缩失败后的短冷却。


压缩保真度

摘要器现在按类型化的会话记录工作,几个对质量有实际影响的行为:

  • 工具调用和结果永不拆开——一次 tool 交互要么整体留在原始历史、要么整体进摘要。
  • 媒体降级为 [image] / [file] 标记,不塞原始数据。
  • 空的、被截断的、压完不比原文小的摘要直接拒收,不会存成结果。
  • 跨多个 workspace 的会话里,摘要保留"哪段话在哪台机器上发生"的信息。

普通 chat、discuss、pipeline 类对话现在都会压。


记录

机器人详情 Compaction tab 可看各次:成功/失败、摘要或预览、涉多少条消息、起止时间、若有的模型与用量。用来确认自动有没有在跑、失败原因等。

常见失败原因

跑不了时报 compaction.model_unavailable 并带具体原因:摘要模型未配置、不是 chat 模型、被禁用、provider 被禁用、provider 不支持输出上限(Codex)、模型没有已知 context window。/compact 在聊天里报同样的状态。


context_window

Memoh 拿当前 chat 模型的 context_window 对照本会话,网页状态区、/status 都能看到离上限多近。注意 token 是粗估(约 4 字符/token),百分比当参考就好,别当精确值。


和「记忆压缩」的区别

作用范围怎么触发结果
上下文压缩当前活跃会话自动 / 状态区 / /compact本会话里较早内容变摘要,方便后面几轮继续聊
记忆压缩长期记忆提供方Memory tab改库里记忆条目,不是单会话 prompt

一路聊太长了 → 上下文压缩。
存下来的记忆又脏又重 → 去 Memory 里做那类维护。


接下来

Published under AGPLv3