Skip to content

[Feature]: commitTokenThreshold 应基于模型上下文窗口百分比,而非固定值 #1172

@knight78725

Description

@knight78725

Problem Statement

当使用支持大上下文窗口的模型(如 mimo-v2-pro,1M tokens)时,插件的 commitTokenThreshold(默认 20000)会导致过早触发压缩——仅用了模型上下文的 ~2% 就开始归档。由于 OpenViking 插件的压缩机制与 OpenClaw 自带的有损压缩不同,归档的消息可以在后续对话中被重新加载回上下文,因此压缩阈值必须 < 模型上下文窗口的 50%,以预留空间给归档内容回放。目前用户每次切换模型都需要手动计算并修改该值,既不直观也容易出错。

Proposed Solution

将固定的 commitTokenThreshold 替换为基于百分比的阈值,自动从当前模型的 contextWindow 计算得出。例如,设置 commitTokenThresholdRatio: 0.38 表示在模型上下文窗口的 38% 时触发压缩。插件应从 OpenClaw gateway 的模型配置中读取当前模型的 context window 并自动计算有效阈值。如果同时设置了固定值和百分比,百分比优先。

Alternatives Considered

  1. 保留固定值,文档说明用户应手动计算 → 不可行,容易出错且不支持模型切换
  2. 插件运行时自动读取模型 context window 并设为 40%,无需用户配置 → 简单但不够灵活
  3. 由 OpenClaw context engine 将模型 context window 作为 hint 传给插件 → 最理想但需要 OpenClaw API 变更

Feature Area

Session Management

Use Case

我使用 OpenClaw + OpenViking 插件进行长期记忆管理。主力模型 mimo-v2-pro 拥有 1M token 上下文窗口,但偶尔会切换到较小的模型(262K、200K)。我希望压缩阈值能自动适应:

  • 1M 模型:约 400K tokens 时压缩,留足空间给归档消息回放
  • 200K 模型:约 76K tokens 时压缩,仍在安全范围内
  • 切换模型时无需手动修改配置

Example API (Optional)

{
  "openviking": {
    "commitTokenThresholdRatio": 0.38,
    "commitTokenThreshold": 20000
  }
}
优先级commitTokenThresholdRatio > commitTokenThreshold > 默认值 20000设置了 ratio 则有效阈值 = contextWindow * commitTokenThresholdRatio

Additional Context

与插件作者确认过,OpenViking 的压缩机制与 OpenClaw 内置压缩不同——归档消息可以被重新加载回上下文,因此阈值必须 < 模型上下文窗口的 50%。当前默认值 20000 是为小模型设计的保守值,无法适配现代大上下文模型。

Contribution

  • I am willing to contribute to implementing this feature

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Type

    No type

    Projects

    Status

    In progress

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions