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