我发现自己陷入了一个怪圈:刷了一百篇AI学习教程,真正能复述出来的不到十个。问题不在内容,而在于聊天式提问太散,问完就忘。后来我开始用Pi(终端里的AI编程代理)和skill这套机制,把学习流程封装成一条固定流水线——先摸底、再画图、然后出题、最后写笔记——才算真正找到了一种能沉淀知识的方式。这篇就把这套玩法的完整细节拆给你,从概念到skill源码,再到实测记录和踩坑清单都有,适合正在折腾Pi、想给AI“装技能”的玩家。
1. 先搞清楚:Pi和skill到底是个什么组合
1.1 Pi不是树莓派,也不是PID控制器里的PI
很多人在搜索引擎里看到“Pi”这个词,第一反应是树莓派(Raspberry Pi),第二反应是自动控制里的比例积分控制器(PI controller)。这俩都对,但它们和本文要说的Pi是两码事。
我这里说的Pi,指的是最近在AI编程圈里很热的一个终端代理工具,同类产品里你可能更熟悉Claude Code、Codex CLI、Cursor的Agent功能。它是一个跑在命令行里的“自主干活代理”,能读项目文件、执行命令、改代码、跑测试,并且在出错时自己决定下一步怎么调整。搜“pi agent”能直接找到它的GitHub仓库和官网,社区里也叫它“coding agent”。
这个工具最有意思的设计是它支持skill(技能包)。你可以把一套复杂的、可重复的工作流程封装成一个文件夹,让Pi在对话中按你预设的步骤去执行。这就是本文标题里“这个skill全包了”的来头——我要讲的其实是“学习类skill”的完整实现。
顺带说明一下,后面第4节的实测示例我会用“PID控制”当作学习主题,纯粹是因为它和“PI”同名、容易搞混,拿来做例子刚好一举两得。
1.2 skill为什么正在成为agent生态的“第二语言”
一开始用Pi的时候,我都是直接在对话里说“帮我学一下Docker”,它也能回答,但效果和用网页版AI聊天几乎一样:给一堆正确但零散的知识点,没有节奏,没有验收,没有沉淀。后来我意识到,差距不在模型能力,而在工作流。
聊天是自由发挥,skill是固定剧本。自由发挥适合头脑风暴,但学习这件事需要的是“摸底→建结构→检验→沉淀”这么一条稳定链路。把链路固化下来,就产生了skill。
如果你关注AI编程工具圈,应该已经看到这股风潮了:Claude Code有skills目录,Codex有自定义skill命令,Cursor有rules体系,Pi这边则冒出了大量社区skill——比如把一本书的内容转换成agent技能包的“book to skill”、帮你生成规范化skill文件的“harness creator skill”,还有各种按场景命名的专用包。这些本质上都是同一件事:给agent装上一个可复用、可分享、可版本化的“能力模块”。
为什么这很重要?因为skill让AI从“每次临时发挥的实习生”变成了“有标准作业程序的老师傅”。你不需要每次重新解释需求,agent也不会每次给你换一套输出格式。这对学习场景的价值尤其大,否则你不可能让AI真正帮你搭出一套完整的学习闭环。
2. 拆解“学习全能skill”的四个工作流
2.1 摸底:少废话,先定位你的知识水位
我见过太多人用AI学东西,第一句就是“请给我讲一下XX原理”。AI也确实会给出一篇结构工整的长文,但看完之后你根本不知道记住了多少。原因很简单:没有起点检测,就没有针对性。
我的learning skill第一个阶段就是摸底(assess)。Pi会先不急着讲课,而是向你抛几个定位式问题,比如对于“PID控制”这个主题,它会问:
- 你之前听过P、I、D这三个字母分别代表什么吗?
- 你能说出比例项Kp调大以后系统一般会出现什么现象吗?
- 积分项是用来消除哪一类误差的?微分项又是在抑制什么?
- 你是在什么场景下需要用到PID的?做机器人、调电源、还是笔试备考?
你也可以不答题,直接把你自己的一段话粘贴给它,哪怕写得很乱也没关系。Pi会根据你的回答或原文,把知识水位分成三档:
| 水位 | 表现 | 此刻最该做的 |
|---|---|---|
| 已掌握 | 能解释概念,能说清参数作用 | 直接进入画图和深度题 |
| 有点印象 | 听过名词,说不清原理 | 按地图逐节点补基础 |
| 完全空白 | 基本没接触过 | 先看地图和黑话表建立认知 |
这个小设计背后的逻辑很简单:AI不缺输出能力,缺的是输出口径的校准。没有摸底,它只能讲平均水平的课;有了摸底数据,它讲的才是“你的课”。
2.2 画图:把知识变成一张可以走的地图
第二步是画图(map)。这一步会让Pi把主题拆成一张知识结构图:主干概念、子模块、依赖关系、常见误区、延伸方向,全部梳理出来。
为什么要强调画图?因为人脑对线性文本的记忆效率远不如对空间结构的记忆。你用文字列表背十个知识点,三天后大概率只剩两三个;但如果你脑子里有一张“从输入到输出的信号流图”,那些节点会挂在结构上,很难忘掉。
在我的skill里,Pi会优先输出两样东西:
- 一棵缩进式的知识树(在不同Markdown渲染器里通用,就算你的终端不支持任何图表也能看懂);
- 一份Mermaid格式的源码字符串,方便你粘贴到支持图表的编辑器里生成真正的流程图。
- 每个节点附带一行“人话解释”,避免知识树变成死目录。
比如后面实测部分我会给出一棵“PID控制”的知识树样例。你用任意支持Mermaid的笔记软件打开它就能渲染成图,但这不意味着你的终端需要支持——树形文本才是兜底方案。
2.3 出题:以考题反推理解,而不是自我感觉良好
第三步是出题(test)。这一步很多人会跳过,但恰恰是学习闭环里最关键的。
心理学里有个布鲁姆分类法,把认知目标从低到高分成六个层次:记忆、理解、应用、分析、评价、创造。大多数AI对话只能帮你到第一层“记忆”,最多到“理解”。但学习真正要的,是你能“应用”。
我的skill会让Pi出一套固定配比的题:
- 5道选择题——负责“记忆和理解”,每道题必须包含一个“看起来对但实际上错”的干扰项;
- 3道简答题——负责“分析”,要求你解释原理而不是背定义;
- 1道场景应用题——负责“应用”,给你一个真实工程场景,让你自己设计参数调整策略。
每道题都附标准答案和解析,而且解析里会标注“如果你答错了,应该回到知识树里的哪个节点重看”。这个设计把“做题”和“补漏”绑在一起,避免对着答案假装会了。
2.4 写笔记:用自己的话沉淀,才是真学完
第四步是写笔记(notes)。AI学习最大的陷阱是“收藏即拥有”——看完了,复制了,粘贴了,就以为自己会了。所以我的skill里强制要求:最后由你自己写笔记,Pi只提供模板和脚手架。
具体流程是:Pi先生成一个Markdown笔记模板,包含这七个模块:主题标题、一句话核心、概念黑话表、结构图、关键原理、代码或公式示例、三连问(我原来怎么想?现在怎么想?还差什么?)。然后你对着模板用自己的话把内容填进去,Pi会帮你指出笔记里的错误或模糊表述。
这一步把“输入”变成“输出”,用输出倒逼输入。很多人跑完前三个流程觉得已经学会了,真到了写笔记这一步才发现——原来这个点我根本说不清楚。
3. 从零手写一个learning skill包
3.1 目录:一个skill就是一个小型工程
理解了四个环节,现在来看怎么把它们变成Pi能用的skill。其实一个skill就是一个文件夹,里面主要包含SKILL.md(工作流主文件)、可选的脚本目录和资源目录。以学习skill为例,典型的目录结构长这样:
~/.pi/skills/learning/ ├── SKILL.md ├── scripts/ │ ├── assess.py # 摸底阶段的可选辅助脚本 │ └── format_notes.py # 笔记模板格式化 └── assets/ └── knowledge_tree_template.md如果你用的是项目级skill,就放在项目的.pi/skills/learning/下面;想让自己所有的项目都能用,就放到用户级目录~/.pi/skills/。具体路径在不同版本的Pi里可能有差异,装之前扫一眼官方文档最靠谱,但主体结构基本就是上面这套。
为什么这么设计?因为SKILL.md负责“给Agent看的说明书”,scripts目录负责“可编程的确定性逻辑”。不一定非要写脚本,但如果你希望出题阶段每次能随机抽取题目,写一个小脚本去本地题库抽题,效果会比让Agent现场自由发挥稳定得多。
3.2 SKILL.md的正确姿势:Frontmatter加工作流描述
SKILL.md是skill的灵魂。它开头的Frontmatter用YAML格式,至少要写清楚name和description,因为Pi会靠description判断“用户在什么时候应该触发这个skill”。下面是learning skill的SKILL.md核心结构示例:
--- name: learning description: 把一个陌生主题变成一套完整学习资料,包含摸底、画图、出题、写笔记四个阶段。当用户想学习一个新知识、备考、或系统梳理某个领域时使用。 version: 1.0.0 triggers: - 我想学 - 教我 - 学习 - study workflow: - assess - map - test - notes ---Frontmatter写完,就是正文。正文我用的是“分阶段指令块”的写法,每个阶段一个H3标题,下面写清楚这个阶段的目标、输入、输出格式、以及可选用的脚本。最关键的一点是:指令要写得像操作手册,而不是写作文案。
比如摸底阶段,我会明确写:
## Phase: assess 目标:判断用户当前知识水位。 操作: 1. 不要直接输出知识内容。 2. 向用户提最多五个定位问题,问题要覆盖概念定义、组成要素、实际应用三个层面。 3. 根据回答,输出一张三档水位表。 4. 水位表输出后,先等待用户的确认,不要擅自进入下一阶段。这里我故意在第四条写了一个强制动作:“等待用户确认”。原因是让Pi别自己一口气把四个流程全跑完。Agent很容易“热情过度”,一次性把摸底题、知识树、考题、笔记全生成出来,效果就会退化回聊天式输出,彻底失去分阶段的节奏价值。
3.3 安装、激活与调试:怎么让Pi认领这个skill
写好目录和SKILL.md之后,安装通常就是把文件夹放到对应目录,重启Pi进程即可。然后在对话里直接说“我想学一下【主题】”或者“用learning skill走一遍【主题】”,Pi读到triggers就会自动加载这个skill并按其定义开始工作。
调试阶段最容易踩的坑是:Pi启动后根本不认你的skill,表现为完全无视你定义的流程。我的排查顺序是:
- 先看Pi是不是从正确目录扫描skill,路径有没有写错,权限能不能读;
- 再看Frontmatter里的name和description填得是否规范,有没有语法错误;
- 最后用verbose模式启动Pi,观察日志里到底加载了哪些skill文件。
注意,SKILL.md的正文不要塞太长。我自己刚开始写的时候,把四个阶段的指令写了一千多字,结果Pi在处理长指令时反而容易忽略末尾阶段。后来我把指令压缩到每个阶段三到四行“动词性指令”,调用稳定性明显好多了。这条经验同样适用于给Codex和Claude Code写skill,长指令不如短指令可靠。
4. 实测:用learning skill啃下“PID控制”
4.1 摸底阶段的真实对话
把skill装好后,我做的第一轮实测主题是“PID控制”。原因前面说了,这名字和Pi太容易混淆,干脆拿它当试验品。
Pi按流程先问了五个摸底问题,我的回答大概是“知道P是比例,I是积分,D是微分,但Kp加大之后系统到底变快还是变稳我说不太清”。Pi据此给出的水位判断是:概念“有点印象”,参数作用“完全空白”,系统稳定性分析技能“未建立”。
接下来,它没有立刻给我灌百科式的内容,而是给了我一个三段式学习建议:第一段先把三个字母的本质作用补上,第二段用弹簧阻尼系统建立直观感受,第三段再讨论Kp、Ki、Kd的调参方向。这比我平时自己瞎搜的效率高太多了,因为它是顺着我的答案定制的路线。
4.2 画图和笔记产出样例
摸底通过后,Pi输出了一张“PID控制知识树”。下面是我截取并精简过的实际输出,用来展示它给的结构长什么样:
PID控制 ├── 1 三个环节 │ ├── P 比例:输出与误差成正比,决定响应速度 │ ├── I 积分:消除稳态误差,但可能带来超调 │ └── D 微分:抑制误差变化趋势,改善动态过程 ├── 2 参数整定 │ ├── Ziegler-Nichols法 │ ├── 临界比例度法 │ └── 仿真调参流程 ├── 3 数字实现 │ ├── 位置式PID │ └── 增量式PID └── 4 工程场景 ├── 电压电流双闭环 ├── 逆变器组网控制 └── 电机转速闭环知识树的每个节点后面都挂了一句“人话解释”,这个细节非常实用。我直接把整棵树复制到了Obsidian里,配合Mermaid源码生成了可视化图谱。
同时,Pi生成了一份笔记模板,我在“三连问”里的回答是“原来我以为PI控制器就是比例加积分两个旋钮,现在知道I的核心使命是消稳态误差,而且参数会相互牵连”。仅仅这一步输出,就比之前任何一次AI学习对话都扎实。
4.3 出题阶段的验收效果
学完和画完图之后,Pi按流程给出了题。选择题里有一道我印象很深:
“一个系统稳态误差过大,以下哪个调整方向最合理?A. 增大Kp,B. 减小Ki,C. 增大Kd,D. 关闭积分项。”
正确答案是A和B方向要分开讨论的那种陷阱题——Kp能降一部分稳态误差,但真正最后消掉稳态误差的是积分项。Pi还专门写了解析,并指出如果选错就要回到知识树的“第2节点参数整定”重看。这种“错题定位节点”的机制,给复习省了太多事。
实测跑完一圈,我觉得最有价值的不是某一次输出内容,而是它把“学过”变成了“可验收”——你不再是看了一篇爽文,而是走完了一次带体检、带地图、带考试、带笔记的学习流程。这是聊天式AI永远给不了的东西。
5. 跑流程时遇到的三类坑和解决办法
5.1 skill死活不生效:优先查路径、权限和Frontmatter
这是新手最容易卡住的问题。有一次我改完SKILL.md,重启Pi后它开始“装死”,完全按普通聊天模式回答问题。排查下来发现是我把description写得太含糊,Pi判断不出应该在哪种场景触发它。后来我把description改成了“当用户想系统学习一个新主题时,严格按四个阶段执行”,触发准确率立刻上去了。
另外,如果你曾把skill文件夹放到了带空格的路径下,部分版本的Pi扫描时会直接跳过。这个坑我踩过一次,建议整个路径不要带中文字符和空格,命名字母一律小写,保险。
5.2 长文档输出中断:malformed response的应对
用Pi跑学习skill时,它经常要一次生成很长的内容——知识树、十道题、七模块笔记模板。这个时候你有可能遇到一个奇怪报错,大意是“the response stream was malformed and no response was produced. try again.”。我第一次看到这个报错还以为是自己代码写崩了,后来才明白,是输出流在长内容生成时被截断了,模型根本没拿到完整输入。
解决办法不是去改模型,而是改skill的设计:不要让Pi一口气生成全部内容。我把SKILL.md里“一次性输出所有题”的指令改成了“先输出前3道题,等用户确认后继续下一批”,输出中断的概率立刻大幅下降。同时,长文档生成时把终端的并发请求数调低,或者减少上下文里的历史对话,也能缓解这个问题。
5.3 图表在终端里乱成一团:让树形文本当兜底
很多skill在用Pi生成图表时会直接输出Mermaid代码块。想法很好,问题在于不是所有终端都支持渲染。如果你在纯命令行环境里用Pi,看到的就是一堆```mermaid 围起来的源码,阅读体验非常糟糕。
所以我给learning skill加了一条硬规则:任何图表输出,必须先给一份缩进树文本,Mermaid源码只能作为附加选项。这样一来,无论在网页端、桌面笔记软件还是纯终端,你都能流畅阅读知识树。这个原则建议所有想写图表型skill的朋友都抄走。
5.4 小心skill变成“会说不会用”的玩具
最后说一个认知层面的坑。skill本质上是一个提示词工作流,它再聪明也只是一套流程,真正让学习起效的还是你本人。
我在社区里见过不少朋友,到处收藏别人分享的skill,今天装一个“数学建模skill”,明天装一个“PPT skill”,但一次都没跑通。我给自己的规矩是:一个月只让skill库新增一个真正常用的能力包,其他的一律先放草稿目录。skill多了以后,模型在判断触发时机时的开销会增加,反而拉低主流程的响应速度。
说实话,折腾这些skill最大的收益不是某个流程省了多少时间,而是我开始用工程化思维对待学习了——先定标准再执行,先测水位再给方案。这套思路放到任何领域都一样管用。最后分享一个小技巧:给skill写版本号,每改一次就往上提一版,过阵子翻阅时你会看到自己的思路是怎么一步步完善的,这个记录本身就很有价值。