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