会话回放 产品与架构
别名:
replaySession
从事件序列折叠重建出可重发的对话:`user_message` / `assistant_message` 事件折叠成消息,`tool_call` 与 `tool_result` 事件折叠成带 `toolCalls` 的 assistant 消息和 `role: 'tool'` 消息——输出的正是模型期望的消息形状,可以直接重新塞给模型,会话恢复不需要任何特殊逻辑。
它是什么
会话回放(replaySession)是从事件序列折叠重建出可重发的对话:user_message / assistant_message 事件折叠成消息,tool_call 与 tool_result 事件折叠成带 toolCalls 的 assistant 消息和 role: 'tool' 消息。注意工具调用是两条独立事件,回放时以「assistant 的 toolCalls + tool 消息」的形式重建——这正是模型期望看到的工具调用上下文。
关键性质:输出可直接重发
折叠规则不是随便定的——它输出的正是第 02 章定义、第 07 章 Agent Loop 一直在用的 OpenAI 风格消息形状(role: 'tool' 消息的 tool_call_id 与 assistant 消息的 tool_calls[].id 配对)。这意味着回放出来的数组可以直接重新塞给模型——会话恢复不需要任何特殊逻辑,只需要「把事件折叠成消息,重新发一遍」。
两条读路径的分工
展示用投影、恢复用事件日志:聊天界面走 messages 投影表(快路径,跳过工具事件),重发请求、恢复上下文走 replaySession(事件溯源路径)。如果你发现投影和事件对不上,那一定是写路径没走同一个事务(第 10 章)。断线重续时客户端「从第 N 条事件之后开始补」的机制见第 16 章。