三类事件#
Zett Agent 把“事件”这个词用在三种不同的东西上。选对哪一种,决定了你的 UI 是能实时更新,还是悄无声息地什么都不做。
类型 |
发送方式 |
接收方 |
典型用途 |
|---|---|---|---|
|
|
任何用户应该看到的内容 |
|
|
其他扩展的 |
扩展之间的协调 |
|
|
某个扩展的 |
你的 UI 回传给等待中请求的应答 |
UI 输出#
只要是人应该看到的内容,就发出一个 AgentEvent。自定义事件会带上你自己定义的 name 和 payload,分发器会调用 on_custom_event;这个名称是数据,不是 Python 方法。
流式输出的到达顺序是可预期的,因此 UI 可以据此开启和结束加载状态:
MODEL_STARTED
REASONING_STARTED → REASONING_DELTA … → REASONING_COMPLETED
CONTENT_STARTED → TEXT_DELTA … → CONTENT_COMPLETED
MODEL_COMPLETED
MODEL_STOPPED (only when the model did not finish normally)
空的增量不会开启一个片段;失败或取消会让已开启的片段没有结束事件——请在 finally 块里关闭你的指示器。
扩展之间的协调#
context.publish 通知的是扩展,不是 UI。它适合用来表示“历史记录已被压缩”(CompactionEvent)或“追加了一条消息”这类事情。传入 target="Name" 可以只通知某一个扩展,省略它则广播。内部通知绝不会自动展示给用户。
来自 UI 的输入#
当模型提出问题或请求审批时,请求会暂停,由你的应用用 emit_external_event 回复。这个应答必须与请求的会话 ID、预期的事件名称和负载相匹配。如果没有扩展接受它,什么都不会发生,请求会继续等待。
要自己实现这三类事件,参见发出事件并接收用户输入;想跑一遍完整的审批流程,参见审批往返。