如何解决初始化ChatOpenAI时的'tuple'对象无'invoke'属性错误
问题修复方案
错误根源
你遇到的AttributeError: 'tuple' object has no attribute 'invoke'错误,是因为定义llm变量时末尾多了一个英文逗号,Python会自动将该表达式的结果包装成元组(tuple),而非预期的ChatOpenAI实例,自然无法调用.invoke()方法。
另外代码中还有一处缩进错误:workflow = StateGraph(State)被错误缩进在summarization_node函数内部,导致后续代码无法识别workflow变量。
具体修复步骤
- 修正llm变量定义
找到这一行代码:
llm = ChatOpenAI(model="openai/gpt-4o-mini",openai_api_base="https://openrouter.ai/api/v1", temperature=0),
去掉末尾的逗号,修改为:
llm = ChatOpenAI(model="openai/gpt-4o-mini",openai_api_base="https://openrouter.ai/api/v1", temperature=0)
- 修正workflow的缩进
将summarization_node函数内的workflow = StateGraph(State)移到函数外部,确保它和后续的workflow.add_node等代码处于同一缩进层级。修正后的代码片段如下:
def summarization_node(state: State): ''' Summarize the text in one short sentence ''' prompt = PromptTemplate( input_variables=["text"], template="Summarize the following text in one short sentence.\n\nText:{text}\n\nSummary:" ) message = HumanMessage(content=prompt.format(text=state["text"])) summary = llm.invoke([message]).content.strip() return {"summary": summary} # 把这一行移出函数,放在这里 workflow = StateGraph(State) # Add nodes to the graph workflow.add_node("classification_node", classification_node) workflow.add_node("entity_extraction", entity_extraction_node) workflow.add_node("summarization", summarization_node) ...
验证修复
完成上述修改后,重新运行代码,llm会成为正确的ChatOpenAI实例,workflow也能被正常识别,即可成功调用.invoke()方法并执行整个LangGraph工作流。
内容的提问来源于stack exchange,提问作者tomxiong
相关产品推荐
相关产品推荐

