上下文长度的处理:超限、截断与预估

举报
Rolle 发表于 2026/11/15 18:20:37 2026/11/15
【摘要】 上下文超限是最常见也最容易被误解的错误。它不是「你的请求格式错了」,而是「你给模型的东西太多了」。

上下文超限是最常见也最容易被误解的错误。它不是「你的请求格式错了」,而是「你给模型的东西太多了」。

超限是请求级错误,不该重试

换渠道、换模型都一样超限。把它归入可重试错误,是重试策略里最常见的一个错误配置。

对应到网关:401 多半是 Key 本身错误、过期或被撤销;403 多半是分组不允许访问目标模型,或者上游凭据失败。

把两者混为一谈,会让你往完全错误的方向查。

count_tokens 可以用来做预检

在真正发起请求前,先估算 token 数,超预算就提前截断历史或给出提示,比让请求失败再重试友好得多。

站点级限流保护的是站点,单 Key 级限流保护的是「一个 Key 不会拖垮所有人」。

如果没有 Key 级限流,一个写错循环的脚本就能把共享池子的额度全部吃掉,其他用户跟着受影响。

但计数可能只是估算

跨协议转换场景下,计数很可能退化成基于字符长度的本地估算,而不是模型原生 tokenizer 的结果。留出安全边际。

在 Claude Code 里配置 ANTHROPIC_BASE_URL=https://aiminis.info、再填上 ANTHROPIC_AUTH_TOKEN,工具链就能直接跑起来,不需要改任何 SDK 代码。

截断策略要可配置

保留最近 N 轮、保留完整某轮、保留系统提示——不同业务的合理策略不同,不该由网关替所有人决定。

在网关层做这件事,比让每个业务方自己判断要靠谱得多。

实操:Anthropic 协议入口:注意 base 里没有 /v1。

先用 count_tokens 估算,再决定要不要截断历史。

curl "https://aiminis.info/v1/messages" \
  -H "x-api-key: sk-gw-你的密钥" \
  -H "anthropic-version: 2023-06-01" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "claude-sonnet-4-5",
    "max_tokens": 1024,
    "messages": [{"role": "user", "content": "你好"}],
    "stream": false
  }'

# 注意 Anthropic 侧的 Base URL 约定:
#   ANTHROPIC_BASE_URL=https://aiminis.info   (不加 /v1)
#   OpenAI 侧的 base_url=https://aiminis.info/v1

几个容易踩的坑

  • 把「今日额度」「并发上限」「账户余额」当成同一个东西。
  • 日/周/月窗口用的时区没说清楚,用户看到的数字和自己的记录对不上。
  • 没有 Key 级限流,一个跑飞的脚本把共享额度吃完。
  • 结算重试没有幂等约束,同一笔用量被记了两次。

小结

把可观测性做在前面,后面所有的优化才有依据。

文中的示例接口都可以在 https://aiminis.info/ 上直接验证,用量与额度在用户中心 https://aiminis.info/console 随时可查。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。