Skip to content

feat: 支持按第三方 Provider 和模型配置上下文窗口 #1307

Description

@DavidShawa

发帖前必读

  • 我已经搜索过现有 Issues,没有找到重复。
  • 这是功能建议,不是 Bug 报告或使用问题。
  • 使用问题请前往 Discussions。

要解决的问题

目前未知模型的上下文窗口通常按 200K 处理,CLAUDE_CODE_AUTO_COMPACT_WINDOW 又只能全局设置,无法为同一 Provider 下的不同模型分别配置。

第三方 Provider 完成模型映射后,实际模型信息没有参与中央上下文预算,可能导致:

  • 状态栏显示的上下文占用不准确。
  • 自动压缩触发过早或过晚。
  • 小窗口模型在压缩前就被 Provider 拒绝。
  • [1m] 等本地设置与第三方模型实际能力不一致。
  • OpenAI、Gemini、Grok 的超窗错误无法稳定触发反应式压缩。

相关代码主要位于:

  • src/utils/context.ts
  • src/services/compact/autoCompact.ts
  • src/query.ts
  • src/utils/model/modelCapabilities.ts
  • 各第三方 Provider 的 model mapping 和 API adapter

建议方案

增加以 Provider + 实际模型 ID 为键的模型能力配置,支持分别设置上下文窗口和最大输出,并让状态栏、自动压缩及超窗恢复统一使用该配置。

考虑过的替代方案

继续使用全局 CLAUDE_CODE_AUTO_COMPACT_WINDOW,但它无法支持同一 Provider 下窗口不同的多个模型。

为各 Provider 增加单独的环境变量,但它仍然无法区分同一 Provider 下的不同模型。

维护第三方模型硬编码表,但它无法覆盖本地模型、自定义端点和用户自定义部署。

补充信息

建议同时将 OpenAI、Gemini 和 Grok 常见的上下文超限错误统一转换为内部的 Prompt is too long,作为配置不准确时的反应式压缩兜底。

该功能不需要为每个 Provider 实现独立的压缩算法,只需要让现有统一压缩逻辑获得准确的模型上下文能力。

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions