
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_前缀
解决步骤
- 打开
libs/partners/anthropic/langchain_anthropic/chat_models.py文件。 - 定位到
_BUILTIN_TOOL_PREFIXES列表定义(约第 154~164 行)。 - 在列表末尾或已有前缀如
"tool_search_"之后,添加"advisor_"。 - 确保修改后列表中包含:
"text_editor_", "computer_", "tool_search_", "advisor_"等。 - 验证 PR #38686 是否已合并到当前安装的版本中,或手动应用此一行修复。
- (可优先尝试)直接在代码中添加
"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。



