改编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
相关产品推荐
相关产品推荐

