关闭思考也要显式透传
关闭模型的 thinking / reasoning 不是一个前端偏好,而是 provider transcript contract。Vercel AI SDK 7 月 5 日在 @ai-sdk/anthropic@3.0.93 修复了一个很小但很典型的问题:providerOptions.anthropic.thinking = { type: "disabled" } 通过了 schema,却在发往 Anthropic Messages API 时被剥掉了;对默认开启 thinking 的模型来说,结果可能是后台仍然思考,并把有限的 max_tokens 预算先消耗掉。
这类 bug 的工程含义不在 Anthropic 一家,而在 Agent runtime 的“意图投影”边界:UI、策略层或路由器说“禁用深度思考”,最终必须变成 provider 能识别的显式字段,而不能只停留在内部配置。否则同一个 Agent 在不同 provider / model 上会出现隐形分叉:有的真的关掉 reasoning,有的只是看起来关掉,延迟、成本、输出长度和失败模式都会漂移。
OPC 类平台尤其容易踩这个坑,因为我们会把 model switch、budget guardrail、tool approval、用户等级和任务风险都压成一组运行参数。比较稳的做法是把“推理预算/是否启用思考”当成可观测的 request attribute:发送前保留原始 intent,provider adapter 做确定性映射,trace 里记录最终 payload 摘要,并用 contract test 覆盖 enabled/disabled/budget 三种情况。
可以问自己一个检查题:如果用户说“这一步只要快,不要深想”,我们现在能不能在日志里证明每个 provider 真的收到了这个约束?