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 中移除未回答的工具调用,要么添加 ToolMessages,其 tool_call_ids 与未回答的工具调用匹配
- 使用修改后的消息列表调用
graph.update_state(config, {'messages': ...})
- 恢复图,例如调用
graph.invoke(None, config)
- 使用
- 提供与现有工具调用匹配的 ToolMessages 并调用