LangGraph切换AzureChatOpenAI时遇无效工具调用错误求助
解决AzureChatOpenAI替换ChatOpenAI后LangGraph工具调用无效问题
问题概述
跟随LangGraph官方教程实现算术工具调用Agent时,将LLM从ChatOpenAI替换为AzureChatOpenAI后,执行工具调用请求出现无效工具调用错误。错误提示为:
无效工具调用:无法解析工具调用内容。请确认工具调用格式正确,包含合法的工具名称与参数。
代码仅修改了LLM初始化部分,其余逻辑与教程一致,调用请求为:Add 3 and 4. Multiply the output by 2. Using the local tool。
错误原因
- Azure模型版本兼容性:部分旧版本Azure OpenAI模型(如gpt-3.5-turbo-0613)对结构化工具调用的支持不完善,无法正确生成LangGraph所需的工具调用格式。
- 语法错误:assistant函数返回语句存在多余闭合括号,导致消息结构异常,工具调用解析失败。
- 工具绑定格式差异:AzureChatOpenAI与ChatOpenAI在工具绑定的默认格式上存在细微差异,需显式指定调用格式。
解决方案
1. 修复代码语法错误
修改assistant函数的返回语句,移除多余的闭合括号:
def assistant(state: MessagesState): return {"messages": [llm_with_tools.invoke([sys_msg] + state["messages"])]}
2. 确保Azure模型支持工具调用
登录Azure门户,检查OpenAI部署的模型版本,确保使用gpt-3.5-turbo-1106、gpt-4-1106-preview及以上版本,这些版本原生支持结构化工具调用。
3. 显式指定工具调用格式
在绑定工具时,显式设置tool_call="auto"参数,确保模型生成标准的工具调用格式:
llm_with_tools = llm.bind_tools(tools, tool_call="auto")
若上述方法无效,可尝试手动转换工具为OpenAI函数格式并绑定:
from langchain_core.tools import convert_to_openai_function functions = [convert_to_openai_function(t) for t in tools] llm_with_tools = llm.bind_functions(functions)
4. 验证工具描述格式
确保工具的docstring参数描述清晰、类型准确,Azure模型对工具定义的解析要求更严格:
def multiply(a: int, b: int) -> int: """计算两个整数的乘积 参数: a: 第一个整数 b: 第二个整数 """ return a * b def add(a: int, b: int) -> int: """计算两个整数的和 参数: a: 第一个整数 b: 第二个整数 """ return a + b
验证
修改完成后重新运行调用代码,执行工具调用请求,通过pretty_print()查看消息流,确认工具调用被正确解析并执行,最终得到计算结果。
内容的提问来源于stack exchange,提问作者Tonino Fernandez
相关产品推荐
相关产品推荐

