跳至內容

Skill 是寫下來的工作程序,不是你安裝的一個 App

每次新對話都是一片空白,昨天解釋過的東西全沒了。Skill 就是讓你不用再重複講的辦法——寫一次,模型自己找得到。
2026年9月12日
Skill 是寫下來的工作程序,不是你安裝的一個 App
OdooBot
teach it once
Pi Agent 指南 · 第 9 篇

Skill 是寫下來的工作程序,不是你安裝的一個 App

每個新對話都是從一片空白開始。你昨天解釋過的東西全都不見了,所以模型又會問一次。Skill 就是讓你不用再重複講的辦法:一個文字檔案,放在你自己主機上的一個資料夾裡,模型自己找得到、也自己會照著做。這篇要講的是這個檔案到底是什麼、怎麼被送到模型面前。安裝跟寫一個 Skill,是之後的事。

1 個檔案
一個資料夾裡有一個 SKILL.md,Pi Agent 就找得到
0 行程式碼
它是 Markdown。沒有 Python,沒有 API 呼叫
200-500 行
這個主檔案建議的長度
重複交代的問題

為什麼你一直在解釋同一件事

你現在應該已經對話過幾次了。一個限制很快就會冒出來:每個新 Session 都是從零開始。兩個很平常的請求,換來的都是反問:

你說「幫我看一下這張冰箱照片,列出快過期的東西。」
Pi Agent你家冰箱怎麼擺的?你分類食物的邏輯是什麼?肉類放哪裡?
你說「幫我寫一個晚上把客廳燈關掉的自動化。」
Pi Agent這盞燈的 entity_id 是什麼?你的 Home Assistant 是哪個版本?要用 device 觸發還是 entity 觸發?
講白一點

這就像每天早上都請到一位很能幹、但都是第一天上班的代班人員。他們做得到這件事。他們只是完全不知道你家怎麼運作,所以你得再交代一次。

每次請求都要重打一遍這些背景,花的是你的時間跟輸入 token。這也讓結果變得不穩定:某天你忘了提上層是冷凍庫,拿到的答案就不一樣了。

Skill 是什麼

一套程序,寫下來一次就好

Skill 把這些背景存進一個檔案裡。新 Session 開始時,Pi Agent 會給模型每個已安裝 Skill 的簡短摘要;當一個請求對上其中一個時,模型會去讀完整的程序,而不是反過來問你。

講白一點

想像洗衣機上方櫥櫃門內側貼的那張護貝過的卡片。白色衣物用哪個洗程、什麼東西絕對不能丟進烘乾機、深色衣物要晾在哪裡。你只寫過一次。任何照著做的人都不用問你就能做對。

四件事讓 Skill 運作起來就像那張卡片:

  • 它放在一個固定的地方。/data/pi-agent/skills/底下,這是 Pi Agent 會去找的地方。
  • 它有名字跟摘要。 SKILL.md 最上面的 namedescription 欄位。
  • 細節收著不展開。 模型先拿到摘要,只有請求真的需要時才會去讀完整的指示。
  • 你只安裝一次。 每個新 Session 都會拿到它,你什麼都不用做。
什麼時候該用它: 當你原本會重複講一樣的指示,或者一件事每次都得照同一套程序走的時候。如果你發現一週內用差不多的話問了同一件事三次,那件事就是你的第一個 Skill。
不是一個 App

是指引,不是一支會執行的程式

Skill 看起來很像一個 App 或一個 HACS 整合,因為這三者都是在擴充一個系統能做的事。但它的運作方式從根本上不同,這個差異在安全性上很重要。

講白一點

App 是你安裝的一台機器。Skill 是貼在機器上、告訴任何走過來的人怎麼操作的那張紙條。紙條本身什麼都做不了——但它能叫一個非常聽話的人去做一件你根本不希望發生的事。

手機 AppHACS 整合Pi Agent Skill
本質獨立可執行的軟體Home Assistant 的擴充功能,通常是 Python給模型看的純文字指示
怎麼執行直接在裝置上跑在 Home Assistant 的 Python 環境裡跑它不執行。模型讀了之後自己決定怎麼套用
什麼啟動它你自己打開它設定好的事件或條件模型依你問的內容自己挑
檔案類型APK 或 IPA 二進位檔Python 檔案加一份 manifestMarkdown 文字,放在 SKILL.md
誰檢查它App Store 審查透過 HACS 的社群審視沒有人。你自己在安裝前讀過
啟用任何第三方 Skill 之前,先自己讀過一遍。 一個 SKILL.md 檔案可能包含你沒預期到的指示——包括一條要求刪除 /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/ - 選用"]
目錄結構資料夾名稱就是這個 Skill 在本機的識別身分。除了 SKILL.md 之外的東西都是選用的素材,主檔案需要的時候可以指向它們給模型看。

關於這個路徑有兩點要注意。在容器裡, ~/.pi/agent/skills 這個符號連結指向同一個地方,所以命令列跟介面操作的是同一批檔案。而且 Home Assistant 的完整備份包含附加元件的 /data/ ,這是預設就會包含的,所以還原之後你的 Skill 也會跟著回來。那 720MB 的影片工具快取是刻意排除在外、另外處理的。

檔案是存在本機的。但它的內容不是。 Pi Agent 會在 system prompt 裡,把每個可用 Skill 的摘要送給你的模型供應商,Skill 被用到時再送出完整的指示內容。絕對不要把密碼或任何其他機密資料放進 SKILL.md。憑證該放在 Home Assistant 的 secrets.yaml

你平常會透過 Settings 裡的 Skills 分頁管理這一切,而不是直接進目錄操作。還沒裝任何東西的時候,長這樣。

Pi Web 的 Settings 對話框,選在 Skills 分頁。左欄寫著 No skills found,欄位最下面有個 + Add skill 連結,寬闊的右側面板寫著 Select a skill。
Settings 裡的 Skills 分頁還沒裝任何東西。也沒有什麼壞掉——就是還沒存任何程序而已。
  • Skills 是對話框頂部五個分頁之一,位在 Models 跟 Sub-agents 中間。這裡就是它的家。
  • No skills found 在左欄,這是你安裝任何東西之前的正常狀態。Pi Agent 一個 Skill 都沒有照樣運作得很好。
  • + Add skill 在同一欄的最下面。第 10 篇會講按下去之後發生什麼事。
  • Select a skill 是右邊面板的預留文字。等左欄有東西之後,這個面板就會顯示那個 Skill 的細節。
模型怎麼找到它們

模型從來不會自己去看你的資料夾

這一段解釋了之後幾乎每個「為什麼它不理我的 Skill」的問題。遠端的模型看不到你的硬碟。是 Pi Agent 幫忙看,再告訴模型裡面有什麼。

  1. 步驟 1

    Pi Agent 掃描資料夾

    pi-web 後端讀取每一個 */SKILL.md 底下的 /data/pi-agent/skills/ ,抓出 namedescription ,從最上面的 YAML frontmatter 裡取出來。這通常在你點「New conversation」時發生;有些版本點「Reload Skills」也會重新整理。

  2. 步驟 2

    這些名字跟摘要會進入 system prompt

    這份清單會加進開啟 Session 的那些指令裡。外層的包裝方式因 Pi Agent 跟 pi-coding-agent 版本而異—— <available_skills><skills>,或一段 Markdown。不管哪一種,內容都一樣:只有名字跟描述,別無其他。

  3. 步驟 3

    模型自己判斷有沒有哪個用得上

    問一張冰箱照片,它就能對上 fridge-check,接著讀完整個檔案照著做。問不相關的事,它就不理會這份清單。

講白一點

模型拿到的是菜單,不是食譜。一道菜一行,剛好夠讓它知道有什麼可以點。只有你點了那道菜,它才會去讀完整的食譜。

菜單大概長這樣:

<available_skills>
- fridge-check: 拿冰箱食材的照片,幫使用者列出快過期的東西,建議晚餐菜色
- ha-automation-templates: 常見的 HA 自動化範本(動作偵測開燈、居家空調等)
- video-pitch: 製作一支 60 秒帶字幕的產品介紹影片
</available_skills>

在真正打開某一個之前,這個區塊就是模型對你 Skill 的全部認識。所以那個 description 做的就是讓 Skill 被注意到的全部工作。

把 description 寫成「觸發條件加任務」的形式。 「處理跟食物有關的問題」太模糊,對不上任何東西。「當使用者分享冰箱照片時,列出快過期的食物並建議一道晚餐菜色」則精確講出了什麼時候該用它。這個慣例來自 mattpocock/skills ,Matt Pocock 的專案。

自己親眼看這份清單

你不用只是聽信這件事。 System 在頂部工具列的按鈕,會打開 System prompt 面板,顯示這個 Session 一開始拿到的指令。

Pi Agent 的 System prompt 面板,從頂部工具列的 System 按鈕打開。顯示 agent 目前運行的指令文字,開頭是 You are an expert coding assistant operating inside pi,接著是 Available tools 清單,read、bash、edit、write 各佔一行,下面是 Guidelines 段落。
System prompt 面板你還沒打任何字之前,模型被告知的一切。
  • 「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 長什麼樣

一個檔案,裡面沒有任何程式碼

實際上大部分 Skill 都落在五個領域裡:家事流程,例如垃圾分類跟冰箱盤點;Home Assistant 自動化範本,像是動作感應開燈跟到家自動調空調;固定格式的影片製作;CSV、log、收據這類資料處理;還有外部工具,例如 Notion、Google 日曆或 Telegram 機器人。

檔案本身比大家想的要小。一個能用的 fridge-check Skill 只需要一個檔案,就在 /data/pi-agent/skills/fridge-check/SKILL.md。開頭大概長這樣:

---
name: fridge-check
description: 當使用者分享冰箱照片時使用。列出看得到的食材,標出快過期需要注意的項目,並用剩下的食材建議一道晚餐菜色。
---
# 冰箱盤點 skill
當使用者分享冰箱照片時:

三條橫線中間的部分是 frontmatter——Pi Agent 只解析這一段。底下全是普通的 Markdown:程序、限制、你想要的輸出格式。哪裡都沒有程式碼,也不需要。

Skill 不是裝越多越好。 每一個 description 都會佔用 system prompt 的空間,每一輪對話都是。裝個幾個沒問題;裝到幾百個就會吃掉你 context 預算裡明顯的一部分。時不時檢查一下,超過六個月沒用過的就刪掉或封存起來。
不管用的時候

四種真正會出狀況的情形

我裝了一個 Skill,但模型不理它
照順序查三件事。 第一: 開一個新對話——安裝之前建立的 Session,從來沒收到過那份清單。 第二: 打開 System prompt 面板,找那個名字。如果沒有,代表 Pi Agent 沒能讀到那個檔案:通常是漏了 frontmatter 的分隔線、YAML 縮排錯了,或是少了 namedescription第三: 把 description 寫得更具體。「當使用者做 X 時,做 Y」這種寫法才有效。
我改了 SKILL.md,但它還是照舊版走
Pi Agent 沒有可靠的即時檔案監控。在硬碟上改完檔案後,通常要開一個新對話,或點「Reload Skills」,改動才會送到模型手上。單純重新整理瀏覽器頁面是不夠的。開一個新對話,再到 System prompt 面板確認描述有沒有更新。
我找不到 System prompt 面板
要嘛你的 pi-web 版本太舊、還沒有這個功能——去 Home Assistant 的附加元件頁面看有沒有 Pi Agent 更新——要嘛你的螢幕比較窄,面板按鈕被收進選單裡了。打開選單找 System prompt 選項。
裝了一個第三方 Skill 之後,模型開始表現得怪怪的
SKILL.md 裡大概有你沒讀過的指示。用 Skills 面板裡的 Remove 或 Uninstall 動作把它移除。命令列也可以跑 podman exec -it pi-web pi uninstall <name>。萬不得已的話,透過 SSH 連進去,刪掉 /data/pi-agent/skills/<那個資料夾>
接下來

接下來往哪走

繼續

你現在知道這個檔案是什麼了。第 10 篇會把一個真的放到你機器上。

下一篇要講怎麼安裝一個 Skill——從網址、從倉庫,或手動——以及在讓模型照著做之前,怎麼先讀懂它。

打開完整教學手冊

Pi Agent 入住指南》系列第 9 篇,由 WoowTech 渥屋科技 製作。

內容出自 Woow HA Pi Agent 入住指南,依 CC BY 4.0 釋出。

The Smart Space Solution · 智慧空間解決方案 · © 2026 WOOW Technology Co., Ltd.

網誌: Pi Agent 指南
分享這個貼文