You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

LangGraph切换AzureChatOpenAI时遇无效工具调用错误求助

解决AzureChatOpenAI替换ChatOpenAI后LangGraph工具调用无效问题

问题概述

跟随LangGraph官方教程实现算术工具调用Agent时,将LLM从ChatOpenAI替换为AzureChatOpenAI后,执行工具调用请求出现无效工具调用错误。错误提示为:

无效工具调用:无法解析工具调用内容。请确认工具调用格式正确,包含合法的工具名称与参数。

代码仅修改了LLM初始化部分,其余逻辑与教程一致,调用请求为:Add 3 and 4. Multiply the output by 2. Using the local tool。

错误原因

  1. Azure模型版本兼容性:部分旧版本Azure OpenAI模型(如gpt-3.5-turbo-0613)对结构化工具调用的支持不完善,无法正确生成LangGraph所需的工具调用格式。
  2. 语法错误:assistant函数返回语句存在多余闭合括号,导致消息结构异常,工具调用解析失败。
  3. 工具绑定格式差异: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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 12:10:12