LuluSkill 文章
使用別人的 AI Skill 之前:授權、權限與來源
怎麼確認一個 Skill 或提示詞包從哪裡來、授權允許你做什麼、它要求碰哪些東西,以及哪些警訊代表該停手——並完整示範一次評估。
這是 LuluSkill 自己寫的內容。它不引用、不鏡像、也不摘要任何第三方 Skill,也不推薦任何一個。閱讀它不會建置、發布或執行任何東西:AI 工具會拿你的文字做什麼,要由你自己檢查。
使用別人的 Skill 時,你真正加進來的是什麼
Skill、提示詞包或小型代理工具,是別人把自己的成果打包起來,讓你的助理可以照著做。有時候它只是文字:指令、範例和幾條規則;有時候它還附帶腳本、設定,以及一份它希望被允許做的事情清單。不論是哪一種,一旦你把它加進來,你的助理就會把它的文字當成你交代的工作的一部分。
所以真正有用的問題,不是「作者可不可信?」——這通常無從回答——而是「我到底加進了什麼?」——這是可以回答的。四個事實就能回答它:這個 Skill 從哪裡來、你手上是哪一個確切版本、它的授權允許什麼,以及它要求碰哪些東西。這些都不需要看懂程式碼,每一項都能用一句話寫下來。
這篇文章不點名、也不推薦任何 Skill。下面的內容,都是讓你自己評估一個 Skill 的方法,不論你是在哪裡找到它的,包括本站。
最先要找出的四個事實
白話解釋
- 來源
- 這個 Skill 最初發布、並持續維護的地方,通常是一個原始碼儲存庫(repository)——而不是被貼進某篇貼文或某則訊息裡的副本。
- 固定版本
- 一個在你讀過之後就不會再變的版本:一個有編號的正式版本,或某一個特定的 commit——也就是儲存庫歷史中一個固定的快照。「最新版」不是固定版本。
- 授權
- 白紙黑字寫明你可以拿別人的成果做什麼的條款:使用、修改、分享,或拿它做出的東西來販售。
- 權限
- 這個 Skill 需要你的助理或電腦被允許做的事:讀取檔案、修改或刪除檔案、連上網路、執行命令,或以你的名義發送訊息。
它從哪裡來,你手上又是哪一個版本
Skill 會流傳。一個從原始碼儲存庫開始的 Skill,會被複製到論壇貼文、共用文件、聊天群組和別人整理的合集裡,而每一份副本都可能在途中被改過。副本不是來源:你看不出改了什麼、是誰改的,也看不出它是否還是作者當初發布的那段文字。
版本之所以重要,也是同樣的道理。如果你今天評估了一個 Skill,而它明天就變了,你的評估描述的就是一個你已經不再擁有的東西。寫下確切的版本,才能讓你的決定一直成立。
依這個順序找出來源
- 從你發現它的地方開始,找一個連回原始儲存庫的連結。如果找不到,這本身就已經是答案了。
- 打開原始版本,和你手上的副本比對。你希望看到的是一樣的文字、一樣的順序;任何多出來的一行,都值得仔細看。
- 看看是誰在維護它,以及最後一次修改是什麼時候。好幾年沒人動過的 Skill 也許還能用,但不會有人幫你修。
- 選定一個有編號的正式版本或一個 commit,把它的識別碼和你查看的日期一起寫下來。
- 從此只用那個版本。出現新版本時,重新評估一次,而不是假設它跟舊版一樣。
來源薄弱的跡象
- 它只以一段文字的形式存在於某篇貼文裡,找不到原始版本可以比對。
- 你手上的副本和原始版本不一樣,卻沒有人說明原因。
- 它的說明要你先從另一個網址下載別的東西,它才能運作。
- 它叫你永遠使用「最新版」,而你沒有辦法指出自己評估的是哪一個版本。
- 維護者最近換了人,緊接著就出現大幅度的修改。
授權允許你做什麼
公開,不等於可以隨意使用。任何人都能在網路上讀到的東西,仍然是某個人的作品,而你能拿它做什麼,是由它的授權決定的。如果完全沒有授權,就假設預設是:你可以看,但除此之外能做的不多。
第一輪檢查不需要律師。你只需要知道自己打算做什麼、找到授權條款的原文,再看兩者是否一致。當它們明顯不一致,或你判斷不出來時,就該去問作者,或乾脆不用。本文的任何內容都不是法律意見。
你會遇到的幾類授權,用白話說
白話解釋
- 寬鬆型授權
- 你可以使用、修改和分享,通常只要保留作者的著作權聲明與授權聲明即可。
- 相同方式分享型授權
- 你可以使用和修改,但如果你把修改後的版本分享出去,通常必須用同樣的條款分享。什麼算是「分享」,每種授權的定義不同,這一段要讀仔細。
- 附限制的授權
- 例如「非商業使用」或「禁止修改」這類條款。它們可能允許個人使用,卻仍然禁止你原本打算用在店裡或客戶案子上的做法。
- 沒有授權
- 沒有明示的許可。可以讀、可以從中學習,但沒問過作者之前,不要把它複製進自己的作品,也不要轉傳出去。
- 自訂條款
- 作者自己寫的條款。要完整讀過;它們可以寫任何東西,包括常見授權都不會寫的內容。
拿授權來對照你的打算
- 寫下你的打算:自己用、在工作上用、修改它、分享它,還是拿來做要販售的東西。
- 在原始儲存庫、你固定的那個版本裡,找到授權檔本身。說明文字裡的一句「開放」不是授權。
- 確認它涵蓋了全部內容。一起打包的檔案、圖片或範例,有時來自別處,適用不同的條款。
- 記下它要求你回報什麼——通常是保留聲明,有時是註明你改了哪些地方——並從一開始就照做。
- 如果你的打算和授權不一致,或你判斷不出來,就停在這裡:去問作者,或另找辦法。
它要求碰哪些東西
一個只有文字的 Skill 不會直接要求任何權限,但它仍然可以叫你的助理去做事:打開檔案、上網查資料,或替你寫一則訊息。含有腳本或工具的 Skill,則可能直接要求存取權。不論是哪一種,都要列出它會碰到的東西,再拿這份清單和你想完成的那一件工作比對。
規則跟你規劃自己的專案時一樣:每一項權限都從「沒有」開始,只有當某個你說得出來的步驟需要它時,才給它。一個負責整理清單的 Skill,需要讀那份清單;它不需要網路、不需要你的電子郵件,也不需要你其他的檔案。
要留意的權限,以及對每一項該問的問題
白話解釋
- 讀取檔案
- 確切是哪些資料夾?「你的文件」不是答案,一個指名的資料夾才是。
- 修改或刪除檔案
- 它會改什麼、改了能不能復原、會不會先在副本上操作?刪除絕不應該是附帶發生的事。
- 網路存取
- 連到哪些網址、又送了什麼過去?只說「需要網路」卻沒有目的地,是不夠的。
- 執行命令
- 哪些命令?為什麼不用它們就完成不了這件工作?光這一項權限,幾乎就能做到清單上其他所有的事。
- 以你的名義發送訊息
- 發給誰、內容是什麼、每一則送出前你看得到嗎?訊息一旦送出就收不回來。
- 金鑰與密碼
- 它為什麼需要這些、會把它們放在哪裡?一個要你把金鑰直接貼進它文字裡的 Skill,要的是錯誤的東西。
代表該停下來的警訊
大部分警訊都有相同的樣子:這個 Skill 要的比它的用途能解釋的更多,或者它試圖改變你的助理運作的規則。其中一種值得特別點名。因為你的助理會把 Skill 的文字當成指令來讀,藏在文字裡的一行字就可能操控它——讓它忽略你的要求、洩露某些東西,或把某些東西送到別處。這通常稱為「提示詞注入」(prompt injection),而防範的第一步,就是自己把每一行指令文字都讀過。
如果它有以下情況,先停下來再看一次
- 叫助理忽略先前的指令、對你隱瞞某些事,或不要提起它正在做什麼。
- 要你把密碼、金鑰或存取權杖(token)貼進提示詞,或貼進它自己的檔案裡。
- 在運作時,從一個它沒有說明的網址下載並啟動別的東西。
- 含有你讀不懂的文字:很長的編碼字串、間距怪異的字元,或藏在註解裡的指令。
- 要求它的用途用不到的權限——一個整理文字格式的工具卻要連網路,一個記筆記的工具卻要刪除檔案。
- 把你的資料送到一個它沒有指明的目的地,或它指明的目的地和這件工作毫無關係。
- 催促你:「現在就執行」、「先關掉你的安全設定」、「全部核准比較省時間」。
- 宣稱自己是官方的或經過認可的,但除了這個 Skill 本身之外,你在任何地方都找不到這個說法。
完整評估一次:給志工的訊息
這個例子延續前幾篇文章裡虛構的食物銀行。報名頁已經能用了,協調人現在想把每週的班表整理成一則簡短、親切的訊息,貼到志工的群組聊天裡。有人在論壇上分享了一個 Skill,說正好能做這件事。以下所有細節都是為了示範而虛構的。
逐項評估
範例
協調人在加入任何東西之前,逐一確認四個事實。
- 來源:論壇貼文附有原始儲存庫的連結。逐行比對後發現,論壇上的副本最後多了一行指令,是原始版本沒有的。
- 多出來的那一行,叫助理把每一份完成的名單也寄到一個食物銀行裡沒人認得的地址。光是這一點,就足以排除論壇上的副本。
- 版本:原始儲存庫有編號的正式版本。協調人寫下目前的版本和日期,並且只評估這一版。
- 授權:原始儲存庫最上層有一份寬鬆型授權檔。在食物銀行內部使用這些指令符合授權,只要任何副本都保留那份聲明。
- 權限:這些指令只需要班表本身。但套件裡還附了一支輔助腳本,要求網路存取權,以及直接發送訊息的權限。
- 這件工作是草擬一則由協調人自己讀過、再親手貼出的訊息,所以這兩項權限都用不到。腳本不使用,只採用指令文字。
- 測試:在真正的班表碰到它之前,協調人先用一份名字都是編出來的虛構班表試一次。
危險的部分只有一行,而且它在副本裡,不在原始版本裡。比對兩者只花了幾分鐘;如果事後才發現,要花的時間會多得多,而志工的名字也早就外流了。
寫成文字的評估紀錄
範例
協調人留下的紀錄,讓這個決定日後可以被檢查——不論是別人,還是明年的協調人自己。
- 用途:把每週班表整理成一則草稿訊息,由我自己貼出。
- 來源:原始儲存庫——而不是論壇上的副本,那份副本多了一行,會把名單送到別處。
- 版本:我查看當天的那個編號版本,不用其他版本。
- 授權:寬鬆型;任何副本都要保留聲明。在食物銀行內部使用,在授權範圍內。
- 權限:讀取我貼上的班表。網路存取與發送訊息一律不給;輔助腳本不使用。
- 決定:使用那個版本的指令文字;要換成新版本之前,重新檢查一次。
每一行都是別人可以查證的事實,而且這份紀錄不只寫了允許什麼,也寫了拒絕什麼。
一份簡短的評估檢查清單
依序進行。每一項都可能讓評估就此結束,而提早結束的評估不是失敗,而是這份清單發揮了作用。
- 用一句話寫下你想用這個 Skill 做的工作。之後的每一步都以這句話為準。
- 找出原始來源,並和你找到的副本比對。
- 固定一個版本,把它的識別碼和日期寫下來。
- 讀那個版本的授權檔,對照你打算做的事。
- 列出它會讀取、修改、刪除、連線或發送的所有東西,把你那一句話用不到的全部劃掉。
- 親自讀過每一行指令文字,找找看有沒有上面列出的警訊。
- 在任何真實資料介入之前,先在一個只放副本的資料夾裡,用虛構資料試一次。
- 寫下評估紀錄——包括你拒絕了什麼——並和你的專案放在一起。
遇到這些情況就放棄
- 你找不到可以比對的原始版本。
- 授權不允許你的打算,而作者也沒有另外同意。
- 它需要一項你監督不了的權限,而少了這項權限,工作就做不成。
- 自己描述這件工作,會比走完這份清單更省時間。
LuluSkill 自己的規則:列出 Skill 之前必須具備什麼
LuluSkill 對自己也採用同樣的四個事實,只是寫成規則,而不是建議。下面描述的就是這些規則,讓你可以拿它們來檢驗本站的任何一筆列出。
依照這些規則,一個 Skill 只有在下列每一項都針對所顯示的確切版本記錄下來,並經過人工審查之後,才可以被列出。
每一筆列出背後的紀錄
白話解釋
- 來源網址
- 它所來自的原始儲存庫,會隨列出的內容一起顯示,讓你可以自己比對。
- 固定快照(commit)
- 被讀取的那個確切、不可變更的快照。新的版本就是一筆新的紀錄,要重新檢查。
- 內容指紋
- 從檔案本身計算出來的一個值,讓之後任何變動——不論多小——都能被發現。
- 授權與署名要求
- 在來源中偵測到的授權,以及它要求的回報,例如保留作者的聲明。
- 掃描狀態
- 以自動方式檢查文字與檔案的結果,找的是隱藏指令、夾帶的金鑰或命令列指令這類模式——方法是讀取,絕不是執行。
這些紀錄不代表什麼
- 掃描沒有發現問題,不等於證明安全。它只代表做過的檢查沒有找到東西,無法保證沒有東西可找。
- 偵測到的授權不是法律意見,而且只適用於偵測到它的那個版本。
- 缺少的紀錄會標示為「未驗證」,絕不會留白,也不會被當成沒問題。
- Skill 要求的任何東西都不會預設給予。依照規則,每一項權限都從拒絕開始,由你一步一步核准。
- 檔案在被讀取、列出或預覽的過程中,絕不會被執行。
這些紀錄和你的評估紀錄做的是同一件事:把「看起來還好」變成可以查證的事實。不過對你的專案來說,最重要的仍然是你自己的紀錄,因為只有你知道自己想完成的是哪一件工作。
你的下一步
用你自己的想法依序做三件事。每一件都不需要帳號、工具或 Skill。
- 挑一個你正在考慮的 Skill 或提示詞包,用一句話寫下你要它做的工作。
- 找出它的原始來源,固定一個版本,並讀那個版本的授權檔。
- 在加入任何東西之前,先照上面的格式填好一份評估紀錄,包括你拒絕了什麼。