Skip to content

[Feature] 自动压缩阈值不可配置,且带日期后缀的模型 ID 匹配不到内置目录导致上下文窗口被低估 #786

Description

@li99952

Affected area

Model providers

Problem statement (what should this solve)

LiveAgent 会在上下文占用约 50% 时自动触发压缩(compaction),但触发阈值无法配置,且部分模型会被过早压缩。排查发现两个相关根因:

  1. 压缩阈值硬编码:阈值由 crates/agent-gui/src/lib/chat/compaction/policy.ts 的公式计算——阈值 = contextWindow − maxOutputToken × factor,其中 factor 固定为 1.5(发送前优化)/ 1.2(回合中途保护),没有任何设置项可调。当 maxOutputToken ≈ contextWindow / 3(很多模型的典型配比)时,优化阈值约为窗口的 50%。

  2. 带日期后缀的模型 ID 匹配不到内置目录:用第三方中转接入官方模型时,模型 ID 常带厂商前缀与日期后缀(例如 deepseek-ai/deepseek-v4-pro-0813)。内置模型目录 crates/agent-ui/src/lib/models/catalog.generated.ts 里只有不带后缀的 deepseek-v4-pro(contextWindow=1,000,000 / maxOutputToken=384,000)。按 ID 精确匹配失败后,normalizeProviderModelConfig 会落到供应商 fallback 兜底值(实测被记成 contextWindow=400,000 / maxOutputToken=142,000),使上下文窗口被低估到真实值的一半左右,进一步导致自动压缩过早触发。

Proposed behavior

  1. 为自动压缩触发阈值提供可配置项(阈值系数或百分比),让用户能调整压缩时机。

  2. 模型目录匹配时对模型 ID 做归一化:去掉日期/版本后缀(如 -0813-0731)与厂商前缀(如 deepseek-ai/),再回退匹配内置目录,而不是直接落到 fallback 兜底值。这样 deepseek-ai/deepseek-v4-pro-0813 就能正确匹配到 deepseek-v4-pro 的 contextWindow=1,000,000 / maxOutputToken=384,000。

Estimated change scope

  • crates/agent-gui/src/lib/chat/compaction/policy.ts(阈值常量与 resolveCompactionThreshold
  • crates/agent-ui/src/lib/settings/index.tsnormalizeProviderModelConfig / getProviderModelDefaults 的模型 ID 归一化匹配)
  • crates/agent-ui/src/lib/models/catalog.generated.ts(目录匹配的候选来源)

Alternatives considered

临时 workaround:用户在设置里手动把每个带后缀模型的 contextWindow / maxOutputToken 改成正确值(limitsSource 会变为 user)。但每个中转、每个模型都要手动改一遍,且带后缀 ID 无法随目录更新自动修复,所以希望从匹配逻辑层面根治。

Pre-submit checklist

  • I searched existing issues and pull requests and found no duplicates.
  • This proposal is focused on a single feature or improvement.
  • I understand a PR should come after this issue is confirmed by maintainers, otherwise it will be converted to draft.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions