Skip to content

[Feature] max_context_tokens=0 默认填充模型上下文窗口,对计费类 API 不友好,建议增加防御性告警 #8556

@Reisenbug

Description

@Reisenbug

Description / 描述

provider.max_context_tokens 配置项说明为"如果为 0,则自动从模型元数据填充"。
查看代码发现:
max_context_tokens=0 时,会用 LLM_METADATAS(来自 models.dev,https://models.dev/api.json) 里该模型的上下文窗口大小填充;查不到回退到 fallback_max_context_tokens = 128000

问题是"模型上下文窗口"默认被当作了"每次携带的历史 token上限"。现在主流模型的窗口也都很大,意味着历史会积累十几万甚至几十万token才触发截断。
平时没有问题,因为有轮数截断,一般来说碰不到模型上下文窗口的上限,所以0长期无害。
但轮数截断失效的时候,0就发力了
我本人就因此踩坑(直接pull master用的,不要学习我ww):比如#8226 曾误删 enforce_max_turns 传递,已由 #8530 修复,轮数截断失效,单次请求最高达 111,351 token
这其实还好,主要问题是平稳两个月的单次平均 token突然指数级增长,全程无任何告警,难以自行定位。
即便是release,只要轮数截断因为某种原因失效或者用户没有配置应该也会出问题。

改进建议(需兼顾存量用户)
当单次实际携带的上下文 token 超过某阈值时输出,warning,提示用户上下文可能异常膨胀。不改变任何现有逻辑,仅增加可见性,让用户能及时发现,避免像我一样烧了大量 token 才察觉

调整0的语义可能需要考虑对现有用户的影响。

Use Case / 使用场景

No response

Willing to Submit PR? / 是否愿意提交PR?

  • Yes, I am willing to submit a PR. / 是的,我愿意提交 PR。

Code of Conduct

Metadata

Metadata

Assignees

No one assigned

    Labels

    area:providerThe bug / feature is about AI Provider, Models, LLM Agent, LLM Agent Runner.enhancementNew feature or request

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions