Pi source-guided course

从一句对话开始,
造出完整桌面 Agent。

不先背 API。每一章先实现一个看得见的需求,再沿真实调用链进入 Pi 源码。

当前完成 36 / 36 章 · 源码基线 Pi v0.82.0

随手查阅

九份附录,把源码事实放在手边。

A–I

附录与速查

  1. A
    源码地图

    包、入口、阅读顺序与调用链索引。

    速查
  2. B
    核心类型速查

    Model、Message、Tool、Agent、Session、Skill 与 Extension。

    速查
  3. C
    事件时序表

    Agent、Turn、Message、Tool 与 Session 生命周期。

    速查
  4. D
    Skills 速查

    目录、Frontmatter、发现、触发、测试与分发。

    速查
  5. E
    Extensions 速查

    注册、事件、工具、Provider、生命周期与错误语义。

    速查
  6. F
    Session 格式速查

    JSONL、Header、Entry、Branch、Compaction 与 Custom Entry。

    速查
  7. G
    配置与环境速查

    Provider、认证、模型、项目、用户与资源配置。

    速查
  8. H
    故障排查手册

    模型、工具、会话、Skills、Extensions、SDK 与 RPC。

    速查
  9. I
    术语表

    全书关键概念的简明定义与关联。

    速查

第一条主线

一次对话,足够打开整个框架。

桌面应用输入与界面Pi统一模型接口模型服务Provider APIContext请求AssistantMessage回答内容
Pi 位于应用与模型服务之间:应用提交统一的 Context,Pi 把请求交给对应 Provider,再返回统一的 AssistantMessage。

课程地图

功能逐步生长,概念反复加深。

01

先让桌面 Agent 开口说话

  1. 1
    桌面 Agent 的第一句回答

    从一次最小模型调用认识 pi-ai、Provider、Model 与 Context。

    已完成
  2. 2
    让回答逐字显示

    理解 AssistantMessageEventStream 与流式事件。

    已完成
  3. 3
    展示 Thinking、Token 和错误状态

    把模型内部状态转换为桌面应用可以展示的数据。

    已完成
  4. 4
    让用户自由切换模型

    理解 Provider、模型目录、认证和跨 Provider 兼容。

    已完成
02

让桌面 Agent 不只是聊天

  1. 5
    让 Agent 查询桌面信息

    从一个文件查询工具认识 ToolCall 与 ToolResult。

    已完成
  2. 6
    为什么需要 Agent Loop

    理解模型判断、工具执行与结果反馈形成的循环。

    已完成
  3. 7
    在界面中显示工具执行过程

    把 Agent 事件映射成清晰的界面状态。

    已完成
  4. 8
    并行工具、取消和失败恢复

    处理并发执行、中止、错误和停止条件。

    已完成
  5. 9
    给危险操作增加用户确认

    建立工具权限、审批、信任与沙箱边界。

    已完成
03

让桌面 Agent 拥有记忆

  1. 10
    多轮对话到底保存了什么

    区分 Agent Message、LLM Message、UI Message 与 Context。

    已完成
  2. 11
    保存和恢复会话

    理解 Session、Entry、Repository 与持久化。

    已完成
  3. 12
    会话为什么是一棵树

    认识 Fork、Branch 与从历史节点重新尝试。

    已完成
  4. 13
    对话太长了怎么办

    理解上下文溢出、切点、摘要与压缩记录。

    已完成
  5. 14
    在运行过程中改变 Agent 的方向

    使用 Steering、Follow-up 和队列控制正在运行的 Agent。

    已完成
04

System Prompt 与上下文工程

  1. 15
    System Prompt 不是一段固定文字

    理解动态 Prompt、项目上下文和资源合并。

    已完成
05

Skills:给 Agent 提供可复用的专业能力

  1. 16
    为什么 Agent 需要 Skill

    区分 Skill、Tool、System Prompt 与 Extension。

    已完成
  2. 17
    创建第一个 Skill

    实现一个可运行的错误日志分析 Skill。

    已完成
  3. 18
    Skill 是如何被发现和加载的

    走读目录扫描、Frontmatter 解析与资源冲突诊断。

    已完成
  4. 19
    Skill 是如何被触发和执行的

    理解显式调用、自动匹配与渐进式加载。

    已完成
  5. 20
    设计高质量 Skill

    构建可触发、可执行、可验证并且安全的 Skill。

    已完成
  6. 21
    Skill 的测试、分发与治理

    覆盖测试、包分发、冲突处理和安全治理。

    已完成
06

Extensions:改变 Pi 的运行方式

  1. 22
    为什么 Pi 需要 Extension

    从工具审批需求理解事件驱动扩展。

    已完成
  2. 23
    Extension 的完整加载过程

    走读发现、模块加载、Factory 注册和 Runtime 绑定。

    已完成
  3. 24
    Extension API 与 Runtime 原理

    理解注册阶段、运行阶段与 AgentSession Bindings。

    已完成
  4. 25
    事件系统与拦截链

    追踪一次请求经过的观察、修改和阻止事件。

    已完成
  5. 26
    通过 Extension 添加和包装工具

    理解 Tool Definition、Wrapper、审批与审计。

    已完成
  6. 27
    通过 Extension 改变 Agent 行为

    为 Prompt、输入、模型、压缩和会话选择扩展点。

    已完成
  7. 28
    高级扩展:Provider、资源与运行环境

    扩展模型、认证、Skills、资源、沙箱和外部服务。

    已完成
  8. 29
    构建可靠的 Extension

    处理错误、取消、冲突、重载、并发和版本兼容。

    已完成
07

将 Pi 嵌入桌面 Agent

  1. 30
    选择正确的集成层次

    比较 pi-ai、agent-core、Harness、SDK 与 RPC。

    已完成
  2. 31
    使用 SDK 嵌入桌面应用

    使用 AgentSession、Services 和 Runtime 组织应用。

    已完成
  3. 32
    使用 RPC 隔离 Agent

    设计桌面进程与 Pi 子进程之间的事件协议。

    已完成
  4. 33
    桌面 Agent 的应用状态设计

    把对话、流、工具、权限和会话事件映射成 UI 状态。

    已完成
08

把所有内容串起来

  1. 34
    组装完整桌面 Agent

    把对话、工具、记忆、Skills 和 Extensions 接到一起。

    已完成
  2. 35
    完整源码调用链走读

    从用户输入一直追踪到模型回复、工具执行和会话保存。

    已完成
  3. 36
    生产化与测试

    完成安全、恢复、评估、诊断、打包和升级检查。

    已完成