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

LangGraph+ChatOpenAI+Ollama自定义工具函数调用报错问题求助

解决LangGraph自定义工具调用失败的问题

核心原因

自定义工具未正确注册到LangGraph的工具列表,或工具格式不符合LangChain规范,导致Agent无法识别。

具体修复步骤

1. 让自定义工具符合LangChain规范

不管是本地函数还是外部脚本的工具,都需要用LangChain的@tool装饰器或StructuredTool类包装,赋予标准的描述和参数定义。

测试用fake_search示例:

from langchain.tools import tool

@tool
def fake_search(query: str) -> str:
    """模拟搜索工具,返回固定测试结果"""
    return f"模拟搜索结果:{query}的相关信息"

外部脚本external_tools.py中的工具:

# external_tools.py
from langchain.tools import tool

@tool
def external_search(query: str) -> str:
    """外部脚本中的自定义搜索工具"""
    return f"外部搜索结果:{query}"

2. 正确将自定义工具加入Agent的工具集合

构建Agent时,要把自定义工具和社区工具一起传入工具列表,确保Agent能识别所有可用工具。

from langchain_community.tools import TavilySearchResults
from langgraph.prebuilt import create_react_agent
from langchain_openai import ChatOpenAI
# 导入自定义工具
from external_tools import external_search
from local_tools import fake_search

# 初始化LLM(可选ChatOpenAI或Ollama)
llm = ChatOpenAI(model="gpt-3.5-turbo")
# llm = ChatOllama(model="llama3")

# 组装工具列表:社区工具 + 自定义工具
tools = [
    TavilySearchResults(max_results=1),
    fake_search,
    external_search
]

# 创建Agent
agent = create_react_agent(llm, tools)

3. 自定义Agent逻辑的工具调用检查

如果不用create_react_agent而是自定义Agent流程,要确保工具调用节点正确匹配工具集合:

from langgraph.graph import StateGraph, END
from langchain_core.messages import ToolMessage

def call_tool(state):
    tool_calls = state["messages"][-1].tool_calls
    results = []
    for tc in tool_calls:
        # 通过工具名称匹配对应工具
        tool = {t.name: t for t in tools}[tc["name"]]
        result = tool.invoke(tc["args"])
        results.append(ToolMessage(content=str(result), tool_call_id=tc["id"]))
    return {"messages": results}

# 构建图时关联工具调用节点
graph_builder = StateGraph(AgentState)
graph_builder.add_node("call_tool", call_tool)

4. 验证工具名称一致性

LLM生成的工具调用名称必须和自定义工具的name属性完全一致(大小写敏感),可通过打印确认:

print(fake_search.name)  # 输出:fake_search

如需自定义工具名称,可在装饰器中指定:

@tool(name="my_custom_search")
def fake_search(query: str) -> str:
    """模拟搜索工具,返回固定测试结果"""
    return f"模拟搜索结果:{query}的相关信息"

常见错误排查

  • 未用LangChain工具装饰器包装:普通函数无法被Agent识别,必须用@tool或StructuredTool处理。
  • 工具未加入Agent工具列表:即使定义了工具,未传入Agent的工具集合,Agent也无法调用。
  • 工具描述缺失:@tool的文档字符串是LLM识别工具的关键,必须清晰描述功能和参数。

内容的提问来源于stack exchange,提问作者swv

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 01:49:56