无效聊天历史记录¶
此错误在预构建的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)
。 这种中断可能是由以下一种方式触发的:- 您手动设置了
interrupt_before = ['tools']
在create_react_agent
中 - 工具之一抛出了一个未被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,并调用