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