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

改编LangGraph多智能体代码遇agent参数传值重复TypeError

解决LangGraph类结构改造中agent_node参数重复错误

错误原因分析

TypeError: Nodes.agent_node() got multiple values for argument 'agent' 本质是同一个参数agent被重复传入——要么是functools.partial预先绑定了agent,后续调用时又显式传入;要么是参数顺序写错导致位置参数和关键字参数冲突。

排查与解决步骤

1. 检查agent_node方法的参数定义

确保类中方法的参数顺序符合LangGraph的调用逻辑:第一个参数是类实例self,第二个是LangGraph传入的state,第三个是业务所需的agent。正确定义示例:

class Nodes:
    def agent_node(self, state, agent):
        # 核心逻辑:用agent处理state中的消息
        response = agent.invoke(state["messages"])
        return {"messages": [response]}

2. 修正functools.partial的使用方式

避免重复绑定或传入agent参数:

  • 错误用法(重复绑定):
    # 错误:partial绑定了agent,后续调用又传一次
    wrong_partial = partial(nodes.agent_node, agent=my_agent)
    # 如果再调用wrong_partial(state, agent=my_agent)就会触发错误
    
  • 正确用法:只通过partial绑定一次agent,后续仅传入state:
    from functools import partial
    
    nodes = Nodes()
    # 绑定agent到partial,生成仅需传入state的函数
    correct_partial = partial(nodes.agent_node, agent=my_agent)
    

3. 检查LangGraph节点注册代码

确保add_node时不再重复传入agent参数:

  • 错误写法:
    graph_builder.add_node("agent", correct_partial, agent=my_agent)
    
  • 正确写法:直接传入绑定好的partial函数即可:
    graph_builder.add_node("agent", correct_partial)
    

4. 替代方案:用Lambda封装(更直观)

如果觉得partial容易混淆,直接用Lambda封装类方法调用,避免参数冲突:

agent_node_lambda = lambda state: nodes.agent_node(state, agent=my_agent)
graph_builder.add_node("agent", agent_node_lambda)

完整可运行示例

from functools import partial
from langchain_openai import ChatOpenAI
from langgraph.graph import StateGraph, MessagesState

class Nodes:
    def agent_node(self, state: MessagesState, agent):
        response = agent.invoke(state["messages"])
        return {"messages": [response]}

# 初始化模型与Agent
llm = ChatOpenAI(model="gpt-3.5-turbo")
my_agent = llm

# 实例化节点类
nodes = Nodes()

# 绑定Agent到节点函数
agent_node = partial(nodes.agent_node, agent=my_agent)

# 构建并运行图
graph_builder = StateGraph(MessagesState)
graph_builder.add_node("agent", agent_node)
graph_builder.set_entry_point("agent")
graph_builder.set_finish_point("agent")

graph = graph_builder.compile()
result = graph.invoke({"messages": [{"role": "user", "content": "请介绍一下LangGraph"}]})
print(result["messages"][-1].content)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 01:10:32