作用是:修复消息历史中的”悬空工具调用”(dangling tool calls)问题。
当 AIMessage 包含 tool_calls 但没有对应的 ToolMessage 响应时,就会出现悬空工具调用。常见场景:用户中断了对话、请求被取消
流程:
1 扫描消息历史,找出所有 AIMessage 中的 tool_calls
2 比对这些 tool_call_id 是否已有对应的 ToolMessage
3 对于缺失的工具响应,在对应的 AIMessage 之后立即插入一个合成的 ToolMessage:
ToolMessage(
content="[Tool call was interrupted and did not return a result.]",
tool_call_id=tc_id,
name=tc.get("name", "unknown"),
status="error",
)
before_model
接收一个 messages 列表,对其做修改后返回
修改后的消息通过 LangGraph 的 add_messages reducer 合并到状态中
限制:消息会被 reducer 追加到列表末尾,无法精确控制插入位置
wrap_model_call
接收完整的 ModelRequest(包含 messages)和一个 handler 回调
可以任意修改 request.messages,然后通过 request.override(messages=…) 替换,再传给 handler
优势:可以在消息列表的任意位置插入/修改消息