ChatAnthropic.bind_tools() crashes with KeyError: ‘parameters’ on advisor_ built-in tool

用户在调用 ChatAnthropic.bind_tools() 方法时,传入了一个包含 "type": "advisor_20260301" 的工具字典。该工具是 advisor-middleware 的本地模式注入的服务器端工具规格。问题出现在 langchain-anthropic 1.4.8

ChatAnthropic.bind_tools() crashes with KeyError: 'parameters' on advisor_ built-in tool

ChatAnthropic.bind_tools() crashes with KeyError: ‘parameters’ on advisor_ built-in tool

快速结论:该错误发生在使用 ChatAnthropic.bind_tools() 绑定 advisor_ 前缀的 Claude 内置工具时,原因是 advisor_ 未加入 _BUILTIN_TOOL_PREFIXES 列表,导致工具字典被错误地送入通用转换函数。优先将 "advisor_" 添加到 _BUILTIN_TOOL_PREFIXES 中。

问题场景

用户在调用 ChatAnthropic.bind_tools() 方法时,传入了一个包含 "type": "advisor_20260301" 的工具字典。该工具是 advisor-middleware 的本地模式注入的服务器端工具规格。问题出现在 langchain-anthropic 1.4.8 版本中。

报错原文

Traceback (most recent call last):
  File "", line 14, in <module>
    model.bind_tools([advisor_tool]).invoke('hello')
  File ".../langchain_anthropic/chat_models.py", line 1884, in bind_tools
    else convert_to_anthropic_tool(tool, strict=strict)
  File ".../langchain_anthropic/chat_models.py", line 2226, in convert_to_anthropic_tool
    input_schema=oai_formatted["parameters"],
KeyError: 'parameters'

原因分析

根本原因是 advisor_ 缺少在 _BUILTIN_TOOL_PREFIXES 这个内置工具前缀列表中。代码中,_is_builtin_tool() 函数通过检查工具字典的 type 字段是否以这些前缀开头来判断是否为内置工具。当 advisor_20260301 未通过检查时,bind_tools() 将其错误地送入 convert_to_anthropic_tool() 函数——该函数期望传入一个标准的函数风格模式(包含 parameters 键),而 advisor_ 工具规格是 Anthropic 原生工具声明,不包含 parameters 字段,因此触发 KeyError

环境排查

  • 确认 langchain-anthropic 版本:报错涉及版本为 1.4.8
  • 确认是否为 advisor-middleware 的本地模式注入的工具
  • 确认工具字典的 type 字段是否包含 advisor_ 前缀

解决步骤

  1. 打开 libs/partners/anthropic/langchain_anthropic/chat_models.py 文件。
  2. 定位到 _BUILTIN_TOOL_PREFIXES 列表定义(约第 154~164 行)。
  3. 在列表末尾或已有前缀如 "tool_search_" 之后,添加 "advisor_"
  4. 确保修改后列表中包含:"text_editor_", "computer_", "tool_search_", "advisor_" 等。
  5. 验证 PR #38686 是否已合并到当前安装的版本中,或手动应用此一行修复。
  6. (可优先尝试)直接在代码中添加 "advisor_"_BUILTIN_TOOL_PREFIXES 后,重新运行脚本。

验证方法

运行如下最小化测试代码,确认不再抛出 KeyError: 'parameters'

from langchain_anthropic import ChatAnthropic

model = ChatAnthropic(model="claude-sonnet-4-6")

advisor_tool = {
    "type": "advisor_20260301",
    "name": "advisor",
    "model": "claude-sonnet-4-6",
    "max_uses": 3,
    "max_tokens": 1024,
}

model.bind_tools([advisor_tool]).invoke("hello")

若不再崩溃且正常返回,说明修复生效。同时可运行单元测试 test_advisor_is_builtin_tool(如 PR #38686 中包含的测试),确认 _is_builtin_tool({"type": "advisor_20260301", ...}) 返回 True

参考来源

langchain-ai/langchain #38644

GamsGo AI

AI 工具推荐

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

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

了解 GamsGo AI

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

celebrityanime
celebrityanime
文章: 12663

发表回复

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