- 消息 — 智能体间通信与持久化的基本单元。每个
Msg代表一个完整的对话轮次,存储在上下文中并在智能体之间传递。 - 事件 — 前端交互与流式传输的基本单元。事件携带增量进度更新(文本 token、工具调用片段、权限请求等),驱动实时界面和人工介入工作流。
reply 调用产生的事件序列最终汇聚成恰好一条 assistant Msg,这保证了完整的消息状态始终可以从事件流中还原。
消息
Msg 代表对话中的一个轮次——用户输入、智能体回复或系统指令,内容以有序的类型化块(block)列表表示。
结构
Msg 类的核心字段如下:
内容块
消息内容由类型化的块组成,每种块代表一类独立信息:角色约束在构造时强制执行:
user 消息只能包含 TextBlock 和 DataBlock;system 消息只能包含 TextBlock;assistant 消息可包含所有块类型。创建消息
AgentScope 提供三个快捷工厂函数,无需手动指定role 或手动包装内容块:
当
content 为普通字符串时,会自动包装为 TextBlock。
访问内容
Msg 提供了一组辅助方法用于提取特定块类型:
事件
事件是消息的流式对应物。智能体执行过程中会持续产出一系列AgentEvent 对象,表示增量进度——文本 token 到达、工具调用逐步构建、结果流式返回。每个事件都是轻量且自包含的。
事件生命周期
每个事件都携带reply_id,将其关联到正在构建的消息。在一次回复中,block_id 或 tool_call_id 标识事件所属的内容块。事件遵循 start → delta → end 模式:
同一次回复中的所有事件共享相同的 reply_id。在回复内部,用 block_id 关联文本/思考/数据块事件,用 tool_call_id 关联工具调用和工具结果事件。
事件类型
所有事件继承自EventBase,提供以下公共字段:
事件按类别分组如下。除特别说明外,每个事件还携带
reply_id 字段,关联到正在构建的消息。
生命周期事件
生命周期事件
ReplyStartEvent — 智能体开始新的回复。
ReplyEndEvent — 智能体完成回复。
ExceedMaxItersEvent — 智能体达到最大推理-执行迭代次数。
文本流式事件
文本流式事件
TextBlockStartEvent — 新的文本块开始。
TextBlockDeltaEvent — 增量文本内容到达。
TextBlockEndEvent — 文本块完成。
思考流式事件
思考流式事件
ThinkingBlockStartEvent — 新的思考块开始。
ThinkingBlockDeltaEvent — 增量思考内容到达。
ThinkingBlockEndEvent — 思考块完成。
数据流式事件
数据流式事件
DataBlockStartEvent — 新的数据块开始(图片、音频等)。
DataBlockDeltaEvent — 增量二进制数据到达。
DataBlockEndEvent — 数据块完成。
工具调用流式事件
工具调用流式事件
ToolCallStartEvent — 智能体开始一次工具调用。
ToolCallDeltaEvent — 增量工具调用参数到达。
ToolCallEndEvent — 工具调用参数完成。
工具结果流式事件
工具结果流式事件
ToolResultStartEvent — 工具开始执行。
ToolResultTextDeltaEvent — 工具的增量文本输出到达。
ToolResultDataDeltaEvent — 工具的二进制数据输出到达。
ToolResultEndEvent — 工具执行完成。
模型调用事件
模型调用事件
ModelCallStartEvent — 模型 API 调用开始。
ModelCallEndEvent — 模型 API 调用完成。
人工介入事件
人工介入事件
RequireUserConfirmEvent — 智能体暂停等待用户确认。
RequireExternalExecutionEvent — 智能体暂停等待外部执行。
UserConfirmResultEvent — 用户提供确认结果(输入事件)。
ExternalExecutionResultEvent — 外部系统提供执行结果(输入事件)。
一次性事件
一次性事件
与文本 / 思考 / 数据 / 工具块不同,这些事件不遵循 start → delta → end 模式。完整载荷在单个事件中到达,因为它在事前就已知,无需流式传输。HintBlockEvent — 一个
HintBlock 被注入到智能体上下文中(例如调度任务触发、团队消息、卸载后台工具返回的结果)。CustomEvent — 通用可扩展事件,由服务层 middleware 用来通知订阅者状态变更(任务进度、团队成员、权限更新……),无需污染核心 agent 事件枚举。
从事件流重建消息
事件与消息并非相互独立,而是同一数据的两种视图。reply_stream 产出的每个事件都可以通过 append_event() 应用到 Msg 上,从而增量地重建完整消息。这保证了最终消息状态可以仅凭事件流完整还原。
append_event 方法处理所有事件类型:
TypeScript 支持
npm 上提供了消息和事件原语的 TypeScript 版本,前端可以使用相同的appendEvent API 从事件流重建消息:
示例:流式界面
构建流式界面的典型模式:延伸阅读
智能体
智能体如何在 ReAct 循环中产出事件和消息
上下文
消息如何存储、压缩和卸载