上下文长度的处理:超限、截断与预估
上下文超限是最常见也最容易被误解的错误。它不是「你的请求格式错了」,而是「你给模型的东西太多了」。
超限是请求级错误,不该重试
换渠道、换模型都一样超限。把它归入可重试错误,是重试策略里最常见的一个错误配置。
对应到网关: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 随时可查。
- 点赞
- 收藏
- 关注作者
评论(0)