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