Skill 是寫下來的工作程序,不是你安裝的一個 App
每個新對話都是從一片空白開始。你昨天解釋過的東西全都不見了,所以模型又會問一次。Skill 就是讓你不用再重複講的辦法:一個文字檔案,放在你自己主機上的一個資料夾裡,模型自己找得到、也自己會照著做。這篇要講的是這個檔案到底是什麼、怎麼被送到模型面前。安裝跟寫一個 Skill,是之後的事。
為什麼你一直在解釋同一件事
你現在應該已經對話過幾次了。一個限制很快就會冒出來:每個新 Session 都是從零開始。兩個很平常的請求,換來的都是反問:
這就像每天早上都請到一位很能幹、但都是第一天上班的代班人員。他們做得到這件事。他們只是完全不知道你家怎麼運作,所以你得再交代一次。
每次請求都要重打一遍這些背景,花的是你的時間跟輸入 token。這也讓結果變得不穩定:某天你忘了提上層是冷凍庫,拿到的答案就不一樣了。
一套程序,寫下來一次就好
Skill 把這些背景存進一個檔案裡。新 Session 開始時,Pi Agent 會給模型每個已安裝 Skill 的簡短摘要;當一個請求對上其中一個時,模型會去讀完整的程序,而不是反過來問你。
想像洗衣機上方櫥櫃門內側貼的那張護貝過的卡片。白色衣物用哪個洗程、什麼東西絕對不能丟進烘乾機、深色衣物要晾在哪裡。你只寫過一次。任何照著做的人都不用問你就能做對。
四件事讓 Skill 運作起來就像那張卡片:
- 它放在一個固定的地方。 在
/data/pi-agent/skills/底下,這是 Pi Agent 會去找的地方。 - 它有名字跟摘要。 SKILL.md 最上面的
name跟description欄位。 - 細節收著不展開。 模型先拿到摘要,只有請求真的需要時才會去讀完整的指示。
- 你只安裝一次。 每個新 Session 都會拿到它,你什麼都不用做。
是指引,不是一支會執行的程式
Skill 看起來很像一個 App 或一個 HACS 整合,因為這三者都是在擴充一個系統能做的事。但它的運作方式從根本上不同,這個差異在安全性上很重要。
App 是你安裝的一台機器。Skill 是貼在機器上、告訴任何走過來的人怎麼操作的那張紙條。紙條本身什麼都做不了——但它能叫一個非常聽話的人去做一件你根本不希望發生的事。
| 手機 App | HACS 整合 | Pi Agent Skill | |
|---|---|---|---|
| 本質 | 獨立可執行的軟體 | Home Assistant 的擴充功能,通常是 Python | 給模型看的純文字指示 |
| 怎麼執行 | 直接在裝置上跑 | 在 Home Assistant 的 Python 環境裡跑 | 它不執行。模型讀了之後自己決定怎麼套用 |
| 什麼啟動它 | 你自己打開它 | 設定好的事件或條件 | 模型依你問的內容自己挑 |
| 檔案類型 | APK 或 IPA 二進位檔 | Python 檔案加一份 manifest | Markdown 文字,放在 SKILL.md |
| 誰檢查它 | App Store 審查 | 透過 HACS 的社群審視 | 沒有人。你自己在安裝前讀過 |
/config/的指示。工具權限跟核准提示是一道防線,不能取代你自己讀過一遍。任何要求對外連線、刪除檔案,或把資料送到某處的指示,都該讓你停下來。各自一個資料夾,一個真正重要的檔案
Pi Agent 把 Skill 放在一個固定的位置: /data/pi-agent/skills/。每個 Skill 各自一個資料夾,每個資料夾裡必須有一個 SKILL.md。沒有這個檔案的資料夾會被跳過。
flowchart TD R["/data/pi-agent/skills/"] --> A["fridge-check/"] R --> B["ha-automation-templates/"] R --> C["video-pitch/"] A --> A1["SKILL.md - 必須"] A --> A2["examples/ - 選用"] B --> B1["SKILL.md - 必須"] B --> B2["motion-light.yaml - 選用"] C --> C1["SKILL.md - 必須"] C --> C2["scene-templates/ - 選用"]
關於這個路徑有兩點要注意。在容器裡, ~/.pi/agent/skills 這個符號連結指向同一個地方,所以命令列跟介面操作的是同一批檔案。而且 Home Assistant 的完整備份包含附加元件的 /data/ ,這是預設就會包含的,所以還原之後你的 Skill 也會跟著回來。那 720MB 的影片工具快取是刻意排除在外、另外處理的。
secrets.yaml。你平常會透過 Settings 裡的 Skills 分頁管理這一切,而不是直接進目錄操作。還沒裝任何東西的時候,長這樣。
- Skills 是對話框頂部五個分頁之一,位在 Models 跟 Sub-agents 中間。這裡就是它的家。
- No skills found 在左欄,這是你安裝任何東西之前的正常狀態。Pi Agent 一個 Skill 都沒有照樣運作得很好。
- + Add skill 在同一欄的最下面。第 10 篇會講按下去之後發生什麼事。
- Select a skill 是右邊面板的預留文字。等左欄有東西之後,這個面板就會顯示那個 Skill 的細節。
模型從來不會自己去看你的資料夾
這一段解釋了之後幾乎每個「為什麼它不理我的 Skill」的問題。遠端的模型看不到你的硬碟。是 Pi Agent 幫忙看,再告訴模型裡面有什麼。
-
步驟 1
Pi Agent 掃描資料夾
pi-web 後端讀取每一個
*/SKILL.md底下的/data/pi-agent/skills/,抓出name跟description,從最上面的 YAML frontmatter 裡取出來。這通常在你點「New conversation」時發生;有些版本點「Reload Skills」也會重新整理。 -
步驟 2
這些名字跟摘要會進入 system prompt
這份清單會加進開啟 Session 的那些指令裡。外層的包裝方式因 Pi Agent 跟 pi-coding-agent 版本而異——
<available_skills>、<skills>,或一段 Markdown。不管哪一種,內容都一樣:只有名字跟描述,別無其他。 -
步驟 3
模型自己判斷有沒有哪個用得上
問一張冰箱照片,它就能對上
fridge-check,接著讀完整個檔案照著做。問不相關的事,它就不理會這份清單。
模型拿到的是菜單,不是食譜。一道菜一行,剛好夠讓它知道有什麼可以點。只有你點了那道菜,它才會去讀完整的食譜。
菜單大概長這樣:
<available_skills>- fridge-check: 拿冰箱食材的照片,幫使用者列出快過期的東西,建議晚餐菜色- ha-automation-templates: 常見的 HA 自動化範本(動作偵測開燈、居家空調等)- video-pitch: 製作一支 60 秒帶字幕的產品介紹影片</available_skills>在真正打開某一個之前,這個區塊就是模型對你 Skill 的全部認識。所以那個 description 做的就是讓 Skill 被注意到的全部工作。
mattpocock/skills ,Matt Pocock 的專案。自己親眼看這份清單
你不用只是聽信這件事。 System 在頂部工具列的按鈕,會打開 System prompt 面板,顯示這個 Session 一開始拿到的指令。
- 「You are an expert coding assistant operating inside pi」 是文字的開頭。這是模型實際收到的指令——如果這裡沒有點出某個 Skill 的名字,模型就不知道它存在。
- Available tools 列出四個,各佔一行:read、bash、edit、write。清單下面那行補充說,一個專案可能還會給模型其他自訂工具,加在這幾個之外。
- Guidelines 接著是一些內部規則,例如檔案操作要用
bash,還有用read而不是cat來檢查檔案內容。 - 這段文字 會延伸到看得見的範圍之外。往下捲能看到 Guidelines 剩下的部分,等你裝了 Skill 之後,還會看到列出這些 Skill 的段落。
這也是確認新裝的 Skill 有沒有真的送進這個 Session 最快的方法:打開面板,往下捲到 Skills 段落,找那個名字。這一段的標籤跟樣式因 Pi Agent 版本而異,所以要看名字跟描述,不要死認標題。上面這張圖拍自一台沒裝任何 Skill 的機器,這也是為什麼看得到的文字從工具直接接到規則,中間沒有 Skills 段落。
完全沒有 Skills 段落,代表要嘛什麼都沒裝(Pi Agent 就不會顯示這段),要嘛你的 pi-web 版本太舊、不會單獨顯示,需要升級。
一個檔案,裡面沒有任何程式碼
實際上大部分 Skill 都落在五個領域裡:家事流程,例如垃圾分類跟冰箱盤點;Home Assistant 自動化範本,像是動作感應開燈跟到家自動調空調;固定格式的影片製作;CSV、log、收據這類資料處理;還有外部工具,例如 Notion、Google 日曆或 Telegram 機器人。
檔案本身比大家想的要小。一個能用的 fridge-check Skill 只需要一個檔案,就在 /data/pi-agent/skills/fridge-check/SKILL.md。開頭大概長這樣:
---name: fridge-checkdescription: 當使用者分享冰箱照片時使用。列出看得到的食材,標出快過期需要注意的項目,並用剩下的食材建議一道晚餐菜色。---# 冰箱盤點 skill當使用者分享冰箱照片時:三條橫線中間的部分是 frontmatter——Pi Agent 只解析這一段。底下全是普通的 Markdown:程序、限制、你想要的輸出格式。哪裡都沒有程式碼,也不需要。
description 都會佔用 system prompt 的空間,每一輪對話都是。裝個幾個沒問題;裝到幾百個就會吃掉你 context 預算裡明顯的一部分。時不時檢查一下,超過六個月沒用過的就刪掉或封存起來。四種真正會出狀況的情形
我裝了一個 Skill,但模型不理它
name 或 description。 第三: 把 description 寫得更具體。「當使用者做 X 時,做 Y」這種寫法才有效。我改了 SKILL.md,但它還是照舊版走
我找不到 System prompt 面板
裝了一個第三方 Skill 之後,模型開始表現得怪怪的
podman exec -it pi-web pi uninstall <name>。萬不得已的話,透過 SSH 連進去,刪掉 /data/pi-agent/skills/<那個資料夾>。接下來往哪走
《Pi Agent 入住指南》系列第 9 篇,由 WoowTech 渥屋科技 製作。
內容出自 Woow HA Pi Agent 入住指南,依 CC BY 4.0 釋出。
The Smart Space Solution · 智慧空間解決方案 · © 2026 WOOW Technology Co., Ltd.