call_model 图节点接收到格式不正确的消息列表时。具体来说,当存在 AIMessages 个 tool_calls(LLM请求调用工具)而没有相应的 ToolMessage(工具调用的结果返回给LLM)时,该列表格式不正确。
可能存在几个原因导致您看到此错误:
- 在调用图时,您手动传递了一个格式不正确的消息列表,例如
graph.invoke({'messages': [AIMessage(..., tool_calls=[...])]})。 - 在从
tools节点(即 [ToolMessage](https://reference.langchain.com/python/langchain/messages/#langchain.messages.ToolMessage)的列表)接收更新之前,图被中断了,并且您使用了一个不是 None 或 ToolMessage 的输入来调用它,例如graph.invoke({'messages': [HumanMessage(...)]}, config)。这种中断可能是以下方式之一触发的:- 您在
create_agent中手动设置了interrupt_before = ['tools']。
- 您在
- 其中一个工具抛出了一个未被 ToolNode 处理的错误 (
"tools")。
故障排除
为了解决这个问题,您可以执行以下操作之一:- 不要使用格式错误的消息列表调用图
- 在发生中断(手动或由于错误)的情况下,您可以:
- 提供
ToolMessage对象以匹配现有的工具调用,并调用graph.invoke({'messages': [ToolMessage(...)]})。 注意:这将把消息添加到历史记录中,并从起始节点运行图。- 手动更新状态并从中断处恢复图:
- 使用
graph.get_state(config)从图状态获取最新消息列表 - 修改消息列表,从 AIMessages 中移除未回答的工具调用
- 使用
- 手动更新状态并从中断处恢复图:
ToolMessage对象,其中包含与未回答的工具调用匹配的tool_call_ids,3. 使用修改后的消息列表调用graph.update_state(config, {'messages': ...}),4. 恢复图,例如调用graph.invoke(None, config)