事件类型
客户端 → 平台
平台 → 客户端
所有服务端事件都有全局唯一 id 与 processed_at 时间戳,按处理顺序排列,构成可完整回读的事件历史。
集成事件
事件相关的三个接口:SSE 实时流
- live-only:流只转发连接建立后的实时事件,不回放历史。
- 服务端每 15 秒发送 : ping 注释帧保活,客户端应忽略。
- 收到 session.deleted 事件后服务端会主动关闭连接。
- 每个 data: 载荷与事件列表接口返回的 Event JSON 结构相同。
增量预览(event deltas)
默认情况下,agent.message 在内容完整后才作为一条事件下发。若想在 UI 上做逐字流式渲染,用 event_deltas 查询参数订阅增量预览:{"type":"event_start","event":{...}}),随后若干 event: event_delta 帧携带 content_delta 增量;可订阅 agent.message 与 agent.thinking 两类。注意:
- 预览帧自身没有 id / processed_at,不写入事件历史;缓冲完成后的完整事件(权威记录)随后照常下发,客户端应以完整事件对齐最终状态。
- span.model_request_end 会关闭未收敛的预览。
- 本接口的 query 参数白名单只有 event_deltas(及 beta);携带其他参数(types、limit 等)返回 400。
列出历史事件
处理自定义工具调用
Agent 调用自定义工具时的完整回路:- 平台派发 agent.custom_tool_use 事件:含本次调用的 id、工具 name、按 input_schema 生成的 input 参数对象。
- 会话进入 idle,session.status_idle 的 stop_reason.type 为 requires_action,event_ids 列出全部等待中的调用。
- 你的应用执行工具逻辑。
- 回发 user.custom_tool_result:custom_tool_use_id 必填(对应调用事件的 id);content 可选(至多 20 块,text / image / document);失败时置 is_error: true 并在 content 中说明错误。省略 content 即空结果,同样合法。
- 全部等待中的调用被解决后,会话回到 running,Agent 带着结果继续。
requires_action 期间的发送约束
- 会话处于 idle(requires_action) 时,发送接口只接受 resolution 事件(user.custom_tool_result / user.tool_confirmation)与 user.interrupt;此时发 user.message 会整批被拒(400),消息不会排队。
- resolution 匹配错误分三类:目标 ID 未知 / 跨会话 / 类型不匹配返回 404;目标已被解决或取消返回 409;同一批里两条 resolution 指向同一个等待事件,解析阶段直接 400。任一项失败整批拒绝、零写入。
打断与引导
- running 期间:可以继续发送 user.message 与 user.interrupt。追加的消息排队到下一个循环边界生效,用于中途引导;interrupt 则要求 Agent 停下当前工作。
- idle(requires_action) 期间:发送 user.interrupt 会取消整组等待中的自定义工具调用与审批请求;取消不产生逐条回执,以事件流中的下一条生命周期事件为准。
- 恢复空闲会话:对处于 idle(end_turn) 的会话直接发送新的 user.message 即可继续,沙箱状态与对话历史都在。
会话事件数据加密
创建会话时加上 x-events-encrypted: true,业务内容型事件会按你在开放平台登记的密钥加密后再落库。开关只在创建时生效,之后不能改,也不会出现在 Session 响应里。 启用前先到开放平台用户中心提交日志加密密钥:https://bigmodel.cn/usercenter/safety-mgmt/logkeys 。创建时平台会先探测密钥:没有可用密钥或加密服务不可达,会返回 400,且不会创建会话。加密范围
同一会话可以同时有明文控制事件和加密业务事件。Agent 执行时平台会临时解密必要内容——这是降低落库暴露面的静态加密,不是平台自己也解不开的端到端零知识。
列表与流里长什么样
加密事件不会回明文 content,而是给一个独立信封。GET /v1/sessions/:id/events 与 SSE 都走同一套形状:跟踪用量
两个粒度:span.model_request_end 事件携带该次模型请求的 model_usage;Session 对象的 usage 字段累计整个会话的 input_tokens / output_tokens / cache_read_input_tokens,随 GET /v1/sessions/:id 返回。调试建议
- UI 状态机以 session.status_* 事件为权威依据;不要仅凭一条 evaluated_permission: “ask” 的工具事件就渲染审批 UI,等待 idle(requires_action) 的 event_ids 确认。
- 排查问题时优先回读事件历史(order=asc),完整的事件序列几乎总能还原现场。
- 长连接注意处理 15 秒 ping 帧与网络中断重连;重连后先补齐缺口再继续消费流。
下一步
工具权限
工具审批的完整流程
管理会话
状态机与运维操作
本页对应 OpenAPI
Session:发送事件、列出事件、订阅实时事件