跳转到内容

第 12 课:从 SDK 过渡到源码

建立 Pi SDK API 表象与源码模块的对应关系,训练带着问题阅读 Pi 源码而不是从仓库根目录盲读。

从 SDK 进入源码的关键不是把所有文件看一遍,而是把表层 API 背后的工程问题拆出来:谁创建 session,谁加载上下文,谁选择模型,谁注册工具,谁驱动 agent loop,谁持久化历史。

读源码时,怎样避免陷入文件树,而是沿一个已经跑通的行为追问?

  • 先从用户可见行为提出问题。
  • 再找到负责这个行为的运行时边界。
  • 然后只读能解释这个行为的核心代码。
  • 最后把结论回写到自己的心智模型。

下面不是完整源码,而是把本课主线压缩成可以在文档里直接阅读的关键形状。读者即使不打开本地源码,也应该能看出运行时如何组织职责。

const readingCard = {
behavior: "A prompt produces streamed text and tool events",
question: "Who turns model chunks into session events?",
runtimeBoundary: "session -> agent loop -> provider stream",
evidence: ["message update", "tool execution", "turn end"],
};
  • 源码阅读卡片比路径清单更适合教学,因为它强迫学生先说清楚要验证什么。
  • behavior 是入口,question 是阅读目标,evidence 是读完后的证明。
  • 后续第 13 到 18 课都可以用这个卡片格式推进。

为“工具调用完成后模型为什么会继续回答”写一张源码阅读卡片。

  • 能把 SDK 行为转成源码问题。
  • 能避免按目录树盲读。
  • 能用证据而不是印象说明自己读懂了。
  1. 实践题:基于本课的省略版源码,补出一个最小实现草图,要求写清输入、输出、副作用和错误处理。
  2. 思考题:本课机制如果只靠 prompt 约束,而不放进 harness 或 runtime,会出现什么工程风险?