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?
Code of Conduct
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?
Code of Conduct