AgentEvent 类型系统详解
932 字
5 分钟
AgentEvent 类型系统详解
AgentEvent 类型系统详解
先看高层:AgentEvent(7 种业务事件) 再看底层:AssistantMessageEvent(13 种技术事件) 最后看关联:message_update 如何连接两者
高层:AgentEvent(7 种业务事件)
AgentEvent 是应用层订阅的联合类型,包含 7 种事件。 按语义边界分为四类:
事件分类总览
| 类别 | 事件 | 核心字段 | 触发时机 |
|---|---|---|---|
| 生命周期 | agent_start | 无 | Agent 初始化完成 |
| agent_end | messages[] | Agent 运行结束 | |
| Turn | turn_start | 无 | 新一轮对话开始 |
| turn_end | message, toolResults[] | 本轮对话结束 | |
| Message | message_start | message | LLM 开始响应 |
| message_update | message, assistantMessageEvent | 流式更新(高频) | |
| message_end | message(含usage、stopReason) | LLM 响应完成 | |
| Tool | tool_execution_start | toolCallId, toolName, args | 工具开始执行 |
| tool_execution_update | partialResult | 工具执行中(可选) | |
| tool_execution_end | result, isError | 工具执行完成 |
message_update 详解(最核心)
message_update 是最复杂、最高频的事件:
{ type: "message_update"; message: AgentMessage; // 当前累积状态 assistantMessageEvent: AssistantMessageEvent; // 底层事件(13种)}应用层通过这个事件:
- 访问累积的消息状态(
message) - 深入底层的流细节(
assistantMessageEvent) - 实现实时文本显示(
text_delta) - 处理 API 错误(
error)
底层:AssistantMessageEvent(13 种技术事件)
pi-ai 层的流式响应事件,描述 LLM 返回内容的逐步生成过程。
事件分类总览
| 类别 | 事件 | 核心字段 | 含义 |
|---|---|---|---|
| 生命周期 | start | partial | 流开始 |
| done | reason, message | 成功完成 | |
| error | reason, error | 出错终止 | |
| 文本 | text_start | contentIndex | 开始文本块 |
| text_delta | delta | 文本增量(最常用) | |
| text_end | content | 文本完成 | |
| 思考 | thinking_start | contentIndex | 开始思考块 |
| thinking_delta | delta | 思考增量 | |
| thinking_end | content | 思考完成 | |
| 工具调用 | toolcall_start | contentIndex | 开始工具调用 |
| toolcall_delta | delta(JSON片段) | 参数增量 | |
| toolcall_end | toolCall | 参数完整 |
所有事件都携带 partial: AssistantMessage(当前累积状态)。
三种关键事件详解
text_delta:实时文本增量(最常用)
{ type: "text_delta"; contentIndex: number; // 内容块索引 delta: string; // 增量文本(如"根据") partial: AssistantMessage;}用于实时显示 AI 回复的文本流。
toolcall_end:工具调用参数完整
{ type: "toolcall_end"; contentIndex: number; toolCall: { // 完整的工具调用对象 id: string; name: string; arguments: Record<string, any>; }; partial: AssistantMessage;}用于判断工具调用参数已生成完毕,即将执行。
error:API 错误
{ type: "error"; reason: "aborted" | "error"; error: AssistantMessage; // 错误状态的消息}用于处理 API 调用失败或用户中止。
事件时序示例
场景一:纯文本回复
用户问:“你好”,AI 直接回复,无工具调用。
时间轴 →
agent_start │ ↓turn_start │ ↓message_start ← AgentEvent:LLM 开始响应 │ │ message_update (携带底层事件) │ ├── assistantMessageEvent: text_delta "你" │ ├── assistantMessageEvent: text_delta "好" │ └── assistantMessageEvent: text_delta "!" │ ↑ AssistantMessageEvent(高频触发) │ ↓message_end ← stopReason = "stop" │ ↓turn_end ← toolResults = [] │ ↓agent_end ← messages: [用户消息, AI回复]场景二:工具调用流程
用户问:“北京天气”,AI 调用 search 工具查询,用结果继续回复。
时间轴 →
agent_start │ ↓turn_start(第1轮) │ ↓message_start │ │ message_update │ ├── text_delta "我来查询" │ ├── toolcall_start (contentIndex=1) │ ├── toolcall_delta '{"query"' │ ├── toolcall_delta ': "北京天气"' │ ├── toolcall_end → toolCall完整 │ │ └── toolCall: { id: "tc1", name: "search", arguments: { query: "北京天气" } } │ └── done → stopReason = "toolUse" │ ↓message_end ← stopReason = "toolUse" │ │ ─────── LLM 完成,Agent 开始执行工具 ─────── │ ↓tool_execution_start ← toolCallId: "tc1", toolName: "search"tool_execution_end ← result: "北京晴天,25°C" │ ↓turn_end ← toolResults: [search的结果] │ │ ─────── Agent 用工具结果继续生成 ─────── │ ↓turn_start(第2轮) │ ↓message_start │ │ message_update │ ├── text_delta "根据查询结果" │ ├── text_delta "北京今天晴天,25°C" │ └── done → stopReason = "stop" │ ↓message_end ← stopReason = "stop" │ ↓turn_end ← toolResults = [] │ ↓agent_end ← messages: [用户, AI工具调用, 工具结果, AI回复]时序关键点:
- message_end 的 stopReason 决定是否执行工具
- turn_end 后如果有工具结果,可能触发新一轮
- agent_end 是最终汇总点,包含所有消息历史
支持与分享
如果这篇文章对你有帮助,欢迎分享给更多人或赞助支持!
AgentEvent 类型系统详解
https://firefly.cuteleaf.cn/posts/learn-pi/event&message/02-类型系统详解/ 相关文章 智能推荐
1
AgentEvent 系统分层设计理念
pi 理解 pi-agent-core 和 pi-ai 的分层设计,掌握 AgentEvent 与 AssistantMessageEvent 的职责边界
2
AgentEvent 核心使用场景
pi 掌握流式输出、状态获取、工具处理、错误处理这四大核心场景,覆盖90%的开发需求
3
AbortController 与 terminate 设计原理
pi 深入理解两种中断机制的设计原理:AbortController的预先注册模式与terminate的返回值携带模式
4
Message 与 Tool 的时序关系
pi 理解工具调用的两阶段设计:LLM生成参数与Agent执行工具的时序边界与协作方式
5
message_update 事件深入
pi 理解 message_update 如何连接高层 AgentEvent 和底层 AssistantMessageEvent,掌握两个关联字段的使用
随机文章 随机推荐