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