声明:本站文章均为作者个人原创,图片均为实际截图。如有需要请收藏网站,禁止转载,谢谢配合!!!

作用是:修复消息历史中的”悬空工具调用”(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
优势:可以在消息列表的任意位置插入/修改消息