问题出现得很突然,日志倒是留得挺全。为了用 prompt caching,在 anthropic 0.39 里直接给 messages.create 传 betas=['prompt-caching-2024-07-31'],Python 抛 TypeError,原文 unexpected keyword argument 'betas',升到 0.42 后参数位置又换了。
刚开始盯着「缓存要 beta 头与 cache_control 同时给才生效」,折腾了半个多小时,排掉了。
原因不止一个,得分开看。betas 不是 create 的一等参数 要走 extra_headers。另一种情况是0.34 前后请求头键名改过一次。
另外,锁文件里仍是旧版本 升级没有真正装上。
动手时先确认运行时真实版本
python -c "import anthropic;print(anthropic.__version__)"
接着用 curl 验证缓存字段是否被接受
curl -s -o /dev/null -w '%{http_code}' https://api.anthropic.com/v1/messages -H "x-api-key: $KEY" -H 'anthropic-version: 2023-06-01' -H 'anthropic-beta: prompt-caching-2024-07-31' -H 'Content-Type: application/json' -d @req.json
升级并锁定版本后重装
pip install -U anthropic==0.42.0
等前面都确认过,再在调用处补 cache_control 再跑一次
python -c "print({'type':'text','text':'...','cache_control':{'type':'ephemeral'}})"
当时还开着另一个排查窗口,两边日志对照着看才定位到。
同一份数据我导出了两份,一份留底,一份拿来试。
别只看报错消失,验证要多做一步。调用返回 200,usage 里出现 cache_creation_input_tokens,代码里不再抛 TypeError。
beta 功能的入口每次都可能变,遇到关键字报错先看当前版本的函数签名,别照抄半年前的示例。线上能稳定复现的问题都不算难,难的是只在大流量下才出现的那种。
