用 Anthropic SDK 调 gpt-oss-120b 的踩坑
想用 Anthropic 的 SDK 去跑一个兼容接口的开源模型,结果在成功拿到响应之前,我先被三个“理所当然”的假设给坑了。这次实测的对象是 Sakura AI Engine 提供的
下一篇
AI Agent发邮件最忌讳的就是“自作主张” →
gpt-oss-120b,虽然号称兼容,但实际部署时有几个细节极其阴险。最先让我犹豫的是注册流程。明明写着免费额度(每月 3000 次),结果注册时强制要求绑信用卡。我本以为这是某种自动扣费陷阱,但实测下来,信用卡只是身份验证。只要你不主动切换到按量计费计划,超过额度后只会触发 Rate Limit,不会偷偷扣钱。
真正折磨人的是代码实现,尤其是当你习惯了标准的 API 调用逻辑时。
第一个坑:401 认证失败
直接用 api_key="your_token" 传参,结果直接报 anthropic.AuthenticationError: 401。
结论: 很多兼容端点不走 x-api-key 请求头,而是走 Bearer Auth。在 Anthropic SDK 里,得把参数名从 api_key 改成 auth_token 才能跑通。
from anthropic import Anthropic
client = Anthropic(
auth_token="你的TOKEN", # 注意这里不能写 api_key
base_url="https://api.ai.sakura.ad.jp",
)第二个坑:响应解析报错
好不容易调通了,结果在打印结果时崩了,报错 'ThinkingBlock' object has no attribute 'text'。
结论: 习惯性写 resp.content[0].text 的人注意了,如果模型输出了思考过程(Thinking Block),content[0] 拿到的可能不是文本块。必须通过过滤来提取纯文本。
正确写法:
# 不要直接用 resp.content[0],要过滤 type
text_content = [b.text for b in resp.content if b.type == "text"]
print("".join(text_content))对比来看,同一个模型用 OpenAI SDK 调完全没问题,但一旦切换到 Anthropic SDK 兼容模式,这些细微的协议差异就会变成 Bug。对于想尝试这种“跨 SDK 兼容”方案的朋友,建议直接把上述两个点写在你的实战指南里,能省掉至少一小时的调试时间。