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 并调用