Anthropic Chat Model: expose “strict”: true for client tool definitions

这个报错发生在 n8n 的 Anthropic Chat Model 节点无法将工具定义中的 strict: true 参数透传给 Anthropic API 时,导致模型可能输出不符合 JSON Schema 的空参数工具调用。优先确认 n8n 版本与 @langchain/anthropic 依

快速结论:这个报错发生在 n8n 的 Anthropic Chat Model 节点无法将工具定义中的 strict: true 参数透传给 Anthropic API 时,导致模型可能输出不符合 JSON Schema 的空参数工具调用。优先确认 n8n 版本与 @langchain/anthropic 依赖版本是否支持 strict,并检查 n8n 是否有对应开关参数。

适用环境:n8n 2.37.7(其他版本可能不同)、lmChatAnthropic 节点 typeVersion 1.6、@n8n/n8n-nodes-langchain.agent 1.9、@langchain/anthropic 1.5.6、模型 claude-opus-5

最快修复方案:暂无确认的一步修复方案。由于该问题被维护者定性为功能增强请求而非 Bug,当前 n8n 版本中没有已验证的配置或代码修改实现 strict 透传。可优先尝试等待 n8n 官方版本更新,或在官方社区论坛中推动该功能落地。

注意事项:官方已将该 Issue 关闭并引导至论坛讨论,关闭时间为 2026-09-06,目前没有官方修复版本。数据表明 12.4% 的 tool_use 块存在完全空参数的情况,会引发额外模型重试,影响执行成本,但实际影响取决于你的工具 Schema 编写方式。

问题场景

用户运行 n8n 2.37.7 中的 Anthropic Chat Model 节点(lmChatAnthropic 1.6),配合 Agent 节点(typeVersion 1.9)和四个由子工作流支持的工具,使用 claude-opus-5 模型并启用了 adaptive thinking、流式输出和 prompt caching。通过透明代理监控 n8n 与 api.anthropic.com 之间的网络流量,发现所有请求中 Anthropic 工具定义均未携带 strict: true,导致模型生成的部分工具调用参数不符合 Schema 约束,甚至出现完全空参数调用。

报错原文

Anthropic Chat Model: expose "strict": true for client tool definitions
strict observed on tool definitions: false on all 165 tool-bearing requests
blocks with completely empty input: {}: 33 (12.4%)

原因分析

Anthropic 的工具调用默认非严格模式,JSON Schema 中的 required 列表只作为生成参考,模型仍可能输出不符合规范的工具调用。Anthropic 官方提供 strict: true 参数来通过受限采样保证工具输入符合 Schema,但 n8n 源码中没有 strict 相关处理——既没有节点参数、也没有 bindTools(tools, { strict: true })withConfig({ strict: true }) 调用。Tools Agent 只检查模型是否暴露 bindTools 方法并直接委托绑定,不传任何选项。

可能原因:这是 n8n 框架层的功能缺失,而非模型或依赖 bug。值得注意的是 @langchain/anthropic 从 1.4.0 起就支持 strict custom tools,而 2.37.7 锁定的是 1.5.6,能力存在但 n8n 没有暴露接口。此外,独立发现的问题:为 $fromAI 提供默认值会使该参数在生成的 Schema 中变为可选(generateZodSchema 应用 .default(value),但 z.object(...).required() 不会去除 ZodDefault),导致 JSON Schema 中没有 required 数组,用户可能误以为已设置“必填”而实际上并非如此。

环境排查

  • n8n 核心版本:2.37.7(请核实你的版本是否有更新或回退的差异)
  • Anthropic Chat Model 节点(lmChatAnthropic)typeVersion:1.6
  • Agent 节点(@n8n/n8n-nodes-langchain.agent)typeVersion:1.9
  • @langchain/anthropic 依赖版本:1.5.6(确认是否 ≥1.4.0,strict 支持从 1.4.0 开始)
  • 模型:claude-opus-5(adaptive thinking、streaming、prompt caching 5m)
  • zod 版本:3.25.76(仅与 $fromAI 默认值问题相关)

解决步骤

  1. 确认问题根源:在 n8n 与 API 之间部署透明代理,检查出站 /v1/messages 请求中的工具定义是否包含 "strict": true。如果全部为 false 或缺失,则确认是 n8n 层没有透传。
  2. 检查 n8n 是否有隐藏参数或环境变量:阅读你当前 n8n 版本的源码,搜索 strictbindTools 的处理逻辑。如果在 n8n 节点中找不到任何 strict 处理,基本确认是功能缺失。
  3. 检查 $fromAI 默认值陷阱:检查所有使用 $fromAI(key, description, type, default) 的工具描述。如果你提供过 default 值,该参数会变成可选项,Schema 中不会有 required 数组。即使工具说明文字写“Required”,Schema 也不会真正执行必填校验。这是一个容易无意触发的问题,需要单独修正。
  4. 在 n8n 社区论坛提出功能需求:官方已将本 Issue 关闭,引导用户到 n8n 社区论坛 讨论。如果你想推动该功能实现,可在论坛上提交功能请求。
  5. 关注上游版本更新:持续关注 @langchain/anthropic 和 n8n 的新版本发布,检查更新日志中是否有 strict 参数支持。

验证方法

验证方式是在代理层检查所有出站请求的工具负载:确认每个请求中的每个工具定义都包含 "strict": true。同时对比开启 strict 前后的数据:统计 tool_use 块中 input: {}(完全空参数)的出现频率,以及因此触发的额外模型往返次数。如果 strict 生效,空参数调用应降至接近 0。此外,检查 $fromAI 生成的 Schema 是否包含 required 数组——如果缺少,说明默认值陷阱仍在影响 Schema 生成。

参考来源

n8n-io/n8n #37914 — Anthropic Chat Model: expose “strict”: true for client tool definitions

n8n-io/n8n #37915 — AI Agent: return tool-schema validation failures to the model as recoverable errors instead of terminating the execution

GamsGo AI

AI 工具推荐

想把多个 AI 模型放在一个入口?

GamsGo AI 集成 ChatGPT、DeepSeek、Gemini、Claude、Midjourney、Veo 等常用模型,适合写作、绘图、视频和日常 AI 工作流。

了解 GamsGo AI

推广链接:通过此链接购买,我可能获得佣金,不影响你的价格。

这个方案解决了吗?

celebrityanime
celebrityanime
文章: 22073

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注