Appearance
🐣 小a的练习册
每章末尾都有"课后实验"。老z把它们汇总成一本练习册——光读不练假把式,动手才真懂。 按难度分级。
怎么用这本练习册
- 必做 ⭐:理解本质的核心实验,每章至少做一个
- 进阶 ⭐⭐:加深理解,需要点探索
- 挑战 ⭐⭐⭐:综合应用,可能跨多章
Part I 概念篇实验
第 1 章 · LLM 原理
- ⭐ 数 token:用 tokenizer 工具,数一段代码的 token 数,感受"代码比想的费 token"
- ⭐ 感受幻觉:问模型一个你编的不存在的 API,看它会不会一本正经编
- ⭐⭐ 调温度:同 prompt 用 temperature 0 和 1 各跑 3 次,对比稳定性
第 2 章 · 思考强度
- ⭐ 感受思维链:问一道数学题,先不让展示过程再让展示,对比准确率
- ⭐⭐ 调思考强度:同题跑 off/medium/high,观察准确率/耗时/token
- ⭐ 观察 Stop Reason:看一次原始响应的 stop_reason 字段
第 3 章 · 统一 AI 库
- ⭐ 数厂商:数 pi 的 providers 目录,挑一个没听过的厂商读配置
- ⭐⭐ System Prompt 威力:同模型加/不加海盗人设,对比回答
- ⭐ 体验流式:观察文字一个个蹦出,试着中途打断
第 4 章 · System Prompt
- ⭐ 体验人设威力:用同一模型,分别用"编程助手"和"海盗"两种 System Prompt,对比回答
- ⭐⭐ 写一份:为你的 Agent 写一份 System Prompt,包含角色/能力/规则/边界四块
- ⭐ 观察工程化:看一个真实 Agent 工具怎么动态拼装人设
第 5 章 · Function Calling
- ⭐ 看真实 ToolCall:定义
get_weather,问天气,观察返回的 ToolCall - ⭐⭐ 感受 partial JSON:脚本逐字符喂 JSON,看何时能解析
- ⭐⭐ 诱导不调工具:给工具但问模型能答的,看它用不用
第 6 章 · Tool 与工具设计
- ⭐ 评价工具描述:找两个真实工具(read/bash)的描述,评价是否符合"用途/边界/参数"三要点
- ⭐⭐ 写一个工具:为你的项目写一个
ls工具,注意描述和 schema 怎么写才好 - ⭐ 体验失败可读:对比模糊错误 vs 清晰错误,体会模型"自我纠正"的差异
- ⭐⭐ 判断工具化:一个能力(实时信息/确定性计算/静态知识)该做成工具还是塞 prompt
第 7 章 · Agent 循环
- ⭐ 画消息流:让 agent 做多步任务("读 X 文件,告诉我有多少行"),还原消息角色流转
- ⭐ 观察 Stop Reason 作用:看模型何时 toolUse 何时 stop
- ⭐⭐ 测循环边界:把最大轮数设成 1,看 agent 会不会"没干完就被停"
- ⭐⭐ 走查真实循环:跑一个 2-3 步任务,抄下每轮 toolCall/toolResult,数数烧了几次调用
第 8 章 · 记忆与上下文
- ⭐⭐ 感受记忆膨胀:连续做几个任务,观察对话历史越来越长
- ⭐⭐ 比较三种策略:窗口满了,截断 vs 摘要,哪个让模型更"忘事"?验证一下
- ⭐⭐ 做持久化:给 Agent 加 JSONL 存盘,关闭重开,问"我们之前聊了啥"
- ⭐ 设计长期记忆:把用户偏好拼进 system prompt 前缀,对比不拼时 KV 缓存与效果差异
第 9 章 · Hooks
- ⭐⭐ 设计拦截:为 Agent 设计一个 beforeToolCall,拦截 bash 里的危险命令
- ⭐ 体会 fail loud:对比"被拦截后模型收到错误提示" vs "被静默忽略"的行为差异
- ⭐ 画 Hook 位置图:在循环图上标出 before/afterToolCall、轮次边界、调 LLM 前
- ⭐⭐ 区分两种介入:为同一节点分别写"拦截式"(改结果)和"订阅式"(记日志)的 hook
第 10 章 · MCP
- ⭐ 画 MCP 关系图:标出 Server/Client/Agent 三者关系
- ⭐ 找 MCP Server:搜索流行的 MCP Server(文件/数据库/浏览器),看它们暴露什么工具
- ⭐⭐ 判断适用性:你的场景该用 MCP 还是自带工具,为什么
- ⭐⭐ 分辨原语:挑一个 MCP Server,判断它暴露的是 Tools、Resources 还是 Prompts
- ⭐ 安全审查:浏览一个 MCP Server 的权限声明,评估"敢不敢让它连我的文件系统"
第 11 章 · Skill
- ⭐ 读 pi skill:打开
.pi/skills/,读一个技能文件 - ⭐⭐ 设计一个 skill:为你的 Agent 设计一个技能(如"代码 review"),列出工具/提示词/步骤
- ⭐⭐ 对比扩展方式:一个能力该用 prompt/skill/extension 哪个
- ⭐ 体验触发:抛一个命中技能描述的任务,看它是否主动加载那套流程
- ⭐⭐ 找软约束边界:试想"发布前先跑全量测试"只写在 skill 里,模型会不会跳过?该用哪种硬约束兜底
第 12 章 · 多 Agent
- ⭐ 判断场景:三个任务该用单/多 agent,说理由
- ⭐⭐ 体会协调难:列团队协作的常见问题,感受多 Agent 同样面对
- ⭐ 画协议图:MCP/ACP/A2A 各连接什么
第 13 章 · RAG
- ⭐ 感受幻觉 vs RAG:问模型编造 API,再给真实文档,对比准确率
- ⭐⭐ 设计切块:拿一篇长文档,想怎么切块检索效果最好
- ⭐ 判断场景:技术问答/代码修改/客服,哪些该用 RAG
第 14 章 · Workflow vs Graph
- ⭐ 判断范式:三个场景该用 Loop/Workflow/Graph
- ⭐⭐ 画 Graph:把一个"电商下单"流程画成图(节点+条件分支)
- ⭐ 对比体验:同一任务用 Workflow 和 Loop 实现,对比可控性和灵活性
第 15 章 · 安全与沙箱
- ⭐ 认识注入:让模型读一个含"忽略指令"的文件,观察它会不会被骗
- ⭐⭐ 设计信任模型:为你的 Agent 画一张信任分层表(自由/确认/只读)
- ⭐ 选沙箱:如果让 Agent 跑不可信 npm 包,你会用哪层沙箱?为什么?
Part II 源码篇实验
第 16 章 · 总览
- ⭐ 数包:克隆 pi,数 package.json,找第 9 个包
- ⭐ 画依赖图:根据依赖表画箭头图
- ⭐ 理解 monorepo:找 workspaces 配置和 tsconfig 的 paths 映射(注意:pi 用 paths,不是 references)
第 17 章 · pi-ai
- ⭐ 读 provider:读一个厂商配置,对照 DeepSeek
- ⭐ 找责任链:anthropic.ts 的 resolve 试几条路
- ⭐⭐ 数 Compat:types.ts 里有多少厂商兼容接口
第 18 章 · agent-core
- ⭐⭐ 读 runAgentLoop:顺读到双层 while,画控制流
- ⭐ 找观察者:agent.ts 的 subscribe/listeners
- ⭐⭐ 理解 fork:读 fork.ts 注释
第 19 章 · tui
- ⭐ 看同步输出:找
\x1b[?2026h/l的成对使用 - ⭐⭐ 感受差分:想自己实现要维护什么状态
- ⭐ 试终端能力:跑
echo $TERM
第 20 章 · coding-agent
- ⭐ 看 system-prompt:读它怎么构建 pi 人格
- ⭐ 数配置层:找用户级/项目级配置文件
- ⭐⭐ 试三种模式:pi / pi -p / 想象 RPC
第 21 章 · protocol
- ⭐⭐ 读 encodeFrame:理解 4 字节大端拆分
- ⭐ 理解大端序:查资料搞懂大小端
- ⭐⭐ 体会 snapshot/progress:只有 progress 会怎样
第 22 章 · server/client
- ⭐ 读 PiServer:看两大组件怎么组合
- ⭐⭐ 理解 attach:读 attach 逻辑
- ⭐⭐ 画 C/S 时序图
第 23 章 · evals
- ⭐ 读一个 eval:看任务定义和评判
- ⭐⭐ 理解 LLM-as-judge:想优缺点
- ⭐ 体会回归守护:改了代码该跑什么
Part III 实现篇实验(造你自己的 Agent)
第 24 章 · 开张
- ⭐ 回答六问:为你的 Agent 写需求文档
- ⭐ 判断范式:确认用 Loop/Workflow/Graph
- ⭐ 建项目骨架:npm init,装 TypeScript
第 25 章 · LLM 调用
- ⭐⭐ 跑通 streamText:写 llm.ts,跑"介绍你自己"
- ⭐⭐ 看请求 body:console.log 发出的请求
- ⭐⭐⭐ 换厂商:改成 OpenAI(改 URL/headers/body/事件解析)
第 26 章 · 循环(核心)
- ⭐⭐⭐ 写出 runAgent:照着 26.2 实现
- ⭐⭐ 测纯对话:不传工具跑通
- ⭐ 感受 maxTurns:设成 1 看会怎样
第 27 章 · 工具
- ⭐⭐ 实现三个工具:read/write/bash
- ⭐⭐ 让 Agent 干活:读 package.json 报依赖
- ⭐⭐⭐ 加 ls 工具:自己实现列目录
第 28 章 · 上下文会话
- ⭐⭐ 实现 session.ts:加载/保存
- ⭐⭐ 测持久化:关了再开能恢复
- ⭐⭐ 触发裁剪:MAX_MESSAGES=5 聊 10 轮
第 29 章 · 交互
- ⭐⭐ 写出 cli.ts:跑起来对话
- ⭐ 体验局限:聊 10 轮感受行输出
- ⭐ 管道测试:echo | tsx cli.ts
第 30 章 · 安全
- ⭐⭐ 加安全检查:白/黑名单
- ⭐⭐ 测注入防御:让它读私钥,看拒绝
- ⭐⭐ 测危险确认:rm -rf 看问不问
第 31 章 · 长大
- ⭐ 审视需求:列想长的方向,用三问过滤
- ⭐⭐⭐ 试加 Provider:改成 Provider 接口
- ⭐⭐ 体会 pi 克制:对比 pi 没做什么
第 32 章 · 收官
- ⭐⭐⭐ 完成你的 Agent:拼起来跑通
- ⭐⭐⭐ 让它干真活:改 bug/写代码
- ⭐⭐ 回头看 pi:用新眼光读 agent-loop.ts
- ⭐ 决定下一步:做第一个架构决策
实验统计
- 必做 ⭐:~30 个
- 进阶 ⭐⭐:~25 个
- 挑战 ⭐⭐⭐:~10 个
- 总计:~65 个实验
建议:至少完成所有 ⭐ 必做(约 30 个),你的理解会从"听过"变成"会做"。
🧙 老z的忠告:"看十遍不如做一遍。 实验里卡住了,正好是学习机会——卡住的地方,就是你不真的懂的地方。"