因为 opencode 现在依赖的库 @ai-sdk/anthropic 的逻辑是 从开头的 message_start 读 input_tokens, 末尾的 message_delta 读 output_tokens, 但大部分逆向/兼容渠道在最后的 message_delta.usage 中返回真实的 input_tokens, 所以导致上下文不一致
修复方案:
- 使用自定义 SDK, 我单独改了一版2.0.57, 修复了 input_tokens 的问题, 发布到了 npmjs
@hank9999/ai-sdk-anthropic-v2-modified
在配置文件里自定义 渠道 SDK 里就可以了正常了
"npm": "@hank9999/ai-sdk-anthropic-v2-modified"
PS: 目前版本号: 2.0.57-patch-1
- 等待提交的 PR 合并, 等PR合并 bakcport 到 v2 再被 opencode 更新可能要等好久…
fix(anthropic): read real output_tokens in message_delta block by hank9999 · Pull Request #11611 · vercel/ai · GitHub
