核心概念

最后更新:2026-10-10

四个贯穿 Pi 运行时的基本概念。理解了它们,就能读懂任意一层的代码。这些概念不是孤立的:它们共同支撑起 Pi 的「可自我扩展」能力——工具、扩展与资源在运行时按需加载,而内核无需重启。

贯穿主线:一条消息从模型流出,封装成 AgentEvent 沿核心循环 → Agent → Session → UI 向上回传;工具结果又作为新消息写回会话,驱动下一轮推理。理解这条链路,就理解了 Pi 的运行时。

1. 消息、流式事件与状态

Pi 内部以「消息」为单位传递信息,模型返回分为两类信号:

这些信号被封装为 AgentEvent 沿着「核心循环 → Agent → Session → UI」向上回传,UI 据此增量更新界面,而不必等整轮结束。这种流式回传让长任务也能实时可见,也是总体架构里交互层能「只管发声」的前提。

2. 工具调用机制

工具是 Pi 与外部世界交互的出口。机制要点:

扩展点:工具、扩展与资源在运行时按需加载,是 Pi「可自我扩展」名字的由来——代理可以加载新能力而不重启内核。工具的注册与回写逻辑落在 pi-agent-core 中。

3. 会话、树与分支

会话以 JSONL 形式持久化,天然支持「树」与「分支」:

这种结构让编码过程可审查、可分享——配合 pi-share-hf 还能把会话发布到 Hugging Face。在运行与调试中,你可借助会话树回放并定位某一轮工具调用的来龙去脉。

4. 上下文、技能与压缩

随着会话变长,塞进模型的上下文会超出窗口。Pi 的处理方式:

上下文构建与压缩同样是 pi-agent-core 的职责之一。若想从零观察这套机制,快速上手里的 MockModel 例子最直观。

相关阅读

常见问题(FAQ)

Pi 内部消息和流式事件是什么关系?

Pi 以消息为单位传递信息,模型返回的两类信号是 message_update(文本增量、推理过程等流式更新)与 toolCall(请求执行工具)。它们被封装为 AgentEvent,沿核心循环向上回传,UI 据此增量渲染。

工具调用是怎么回写到会话的?

工具先在注册表声明名称、描述与参数 schema;模型给出 toolCall 后,运行时校验参数并执行,得到 AgentToolResult;该结果作为一条新消息写回会话,供下一轮推理使用。这正是可自我扩展的运行机制。

会话为什么用 JSONL,分支有什么用?

JSONL 每行一条消息,便于追加与回放;同一会话可从任意节点分叉探索不同解决路径,并支持断点续跑。这让编码过程可审查、可分享,配合 pi-share-hf 还能发布到 Hugging Face。

上下文压缩会丢失信息吗?

当接近窗口上限时,Pi 会自动压缩历史(摘要、裁剪低价值消息)以保留关键信息。压缩有取舍:过度压缩会丢细节,Pi 在保留有用信息与控制 token 成本之间做平衡,必要时可借助会话树保留完整分支。

什么是 Pi 的「可自我扩展」?

指工具、扩展与资源能在运行时按需加载,无需重启内核。代理可以边运行边加载新能力,这也是 Pi 名字的由来,与其分层架构(稳定内核 + 可变外设)紧密相关。

微信群二维码

扫码加入
Pi Agent 微信交流群

💬