你從沒送出、卻是模型最先讀到的那則訊息
每個聊天應用程式送給模型的內容都比你的訊息多。在你的文字之前,會先有一段應用程式寫好的文字:助理叫什麼名字、該做和不該做什麼、答案該怎麼排版、今天是幾號、可以呼叫哪些工具。那一段就是system prompt。你打的是「幫我摘要這篇」,模型收到的卻是一整頁規則,後面才接著「幫我摘要這篇」。
模型會把system prompt當成長期命令來遵守。一個被要求「當一個用英式英文回答、語氣簡潔、絕不使用條列式的助理」的模型,會在整段對話裡都這樣做,不需要你再提醒,因為這條指令會隨著每一則訊息再送一次。這個「重新送出」的細節,是大家最容易忽略的部分,也正是花錢的地方,第三節會算給你看。
你可以看到真實的版本。Anthropic公開了Claude在各個應用程式裡使用的system prompt,每次修改都有發布說明。讀一份是理解這種文體最快的方式:整段整段講語氣、講什麼時候該用條列式、講遇到該拒絕的請求該怎麼處理、講知識截止日期,全部用平實的英文寫成,而不是程式碼。也有外流出來的版本;把助理命名為「Sydney」的Bing聊天system prompt,是一名史丹佛學生在2023年2月,靠著要求模型覆誦對話上方的文字而提取出來的。
為什麼同一個問題,在不同應用程式裡答案會不一樣
模型API會為每則訊息標上角色,模型也被訓練成用不同的方式權衡它們。
| 角色 | 誰撰寫 | 用途 | 模型如何對待它 |
|---|---|---|---|
| System | 應用程式,加上你加入的任何自訂指令 | 身分、規則、格式、工具、日期 | 凌駕於使用者這一輪之上的長期命令 |
| User | 你 | 問題、貼上的文字、附加的檔案 | 現在該做的任務 |
| Assistant | 模型 | 它先前的回覆 | 它自己的歷史紀錄,用來保持前後一致 |
這個順序帶來兩個結果。system prompt設定了框架,所以同一句使用者訊息,在不同的框架下會得到不同答案:「寫一首打油詩」在某個system prompt下會得到一首打油詩,換成銀行助理用的system prompt就會被拒絕。而且system prompt是應用程式的,所以在同一個模型上換一個應用程式,答案就會不一樣,儘管模型本身沒有換過。什麼是LLM把模型和應用程式分開來看,system prompt正是這種區隔的主要部分。
這條界線並不是絕對的。模型被訓練成優先遵守system prompt而不是使用者,但使用者訊息還是有可能說服模型偏離它的指令,這正是什麼是AI越獄的主題。system prompt是一個強力的預設值,不是一道鎖。
system prompt要花多少錢,因為它每一輪都會被送出
system prompt算的是輸入token,而AI中的token是什麼說明了輸入是每則訊息都要計費的。一段有100輪的對話,配上一份8,000個token的system prompt,會把這段提示送出100次:在你打出任何一個字之前,就已經是800,000個輸入token。
以牌價來算。一則標準訊息大約是1,000個輸入token、500個輸出token。若加上一份8,000個token的指令,也就是32,000個英文字元換算成每個token四個字元的結果,套用在100則訊息裡的每一則上,依照AI模型成本指數裡的OpenRouter牌價(擷取於2026-08-20),會多花下面這些輸入費用。
供應商有快取機制:OpenAI對快取輸入打五折,在最新模型上甚至打一折,Anthropic則以牌價的十分之一計算快取讀取,所以有設好快取的應用程式,付的錢會比圖表上少很多。圖表上的是牌價,也就是成本指數所追蹤、以及任何跳過快取機制的應用程式實際要付的價錢。長篇固定指令依然是唯一每次都要送出的文字。
Whizi的計價方式完全相反。一則訊息的價格是由模型決定的固定點數,房間模型是1點,Claude Sonnet 5是10點,Claude Opus 5是20點,而指令的長度完全不會影響價格。同樣的100則訊息,不管有沒有那份指令,都是100點、1,000點或2,000點。Whizi點數如何運作有完整的階梯表。
system prompt裡,哪一部分是你可以自己寫的
產品會開放system prompt的一部分讓你填寫。ChatGPT把它叫做自訂指令和記憶;Claude有專案指令和風格;Gemini有已儲存的資訊。不管叫什麼名字,你寫的文字都會被附加在產品自己的指令後面,並在每一輪重新送出。
在Whizi裡,開放的那一部分就是專案。一個專案是一個對話資料夾,擁有自己的指令,最多32,000字元,套用在裡面的每一段對話上,並且在每則訊息都重新組進提示裡。釘選的檔案也是同樣的做法,每個檔案擷取出來的文字上限是32,000字元,整個專案區塊的上限則是120,000字元。這裡沒有帳號層級的自訂指令欄位:每個專案的指令是這款產品裡唯一由使用者撰寫的指令,所以如果你希望某個偏好在所有地方都生效,就得把它貼進每一個專案裡。
四個內建代理則展現了另一面。加拿大CPA、學習導師、寫作副駕和數學家教這幾列,各自帶著一份寫死在模型目錄裡的固定system prompt,你無法編輯。選一個代理,就是選一份system prompt。
從已公開的範例來看,一份好的system prompt該有什麼
寫得好的指令讀起來像是給新同事的簡報,而Anthropic公開的Claude提示,是這種文體最好的公開範本。有四件事扛起了大部分的份量。
- 一句話講完角色和對象。「你是加拿大獨資業主的稅務助理」比三段形容詞管用得多。
- 把格式規則寫成規則。「回答在150字以內,不要條列式,用英式拼法。」模型遵守直白的命令,比遵守偏好可靠得多。
- 不確定時該怎麼做。「如果答案取決於你沒有的事實,先問一個問題再回答。」少了這條,模型就會用猜的。
- 該拒絕什麼、怎麼拒絕。把類別和拒絕時該用的措辭寫清楚,否則模型會自己編一套。
不該放進去的東西:會變動的事實。寫進system prompt裡的價格、模型數量或日期,會在每一輪都被重新斷言一次,直到有人去修改它為止,一份過時的指令,就是這樣變成一個維持好幾個月、講得理直氣壯卻錯誤的答案。把會變動的事實放進釘選檔案或搜尋裡,而不是放進長期命令裡,因為模型自己的知識截止日期反正也會讓它們過時。給新手的提示工程講的是同一門技藝裡逐則訊息的那一面。
- 在你新增的任何指令裡,第一句話就寫清楚角色和對象
- 把格式寫成規則,而不是偏好:字數限制、不用條列式、用哪種拼法
- 讓長期指令保持簡短;每一個字元都會在每則訊息裡重新送出
- 把會變動的事實從指令裡拿掉,改放進釘選檔案或搜尋裡
- 告訴模型缺少某個事實時該怎麼做,否則它會自己補上
常見問題
system prompt和user prompt有什麼差別?
system prompt由應用程式撰寫,設定長期規則:角色、語氣、格式、該拒絕什麼。user prompt是你的訊息,也就是現在該做的任務。模型被訓練成優先遵守system prompt而不是使用者這一輪,而且system prompt會隨著每則訊息重新送出,每則user prompt則只送出一次。
我能看到ChatGPT或Claude的system prompt嗎?
Anthropic公開了Claude各個應用程式所使用的system prompt,每次修改都附上發布說明。OpenAI並沒有公開ChatGPT的,不過已經有使用者把不同版本提取出來並發布。要求模型覆誦自己的指令有時候有效,有時候會產生一份憑空捏造的版本,所以除非廠商證實過,否則外流的提示都該視為未經驗證。
system prompt會花token嗎?
會,而且每則訊息都會花。它是輸入文字,每一輪都會重新送出,所以一份8,000個token的指令,跑滿100則訊息就是800,000個輸入token。以牌價來算,這會讓Claude Sonnet 5上的一段對話成本變成三倍,從$0.70漲到$2.30。Whizi則是按模型收取固定的點數價格,所以指令長度不會改變你要付的錢。
自訂指令是什麼?
就是產品讓你能動手撰寫的那一部分system prompt。你寫的文字會被附加在應用程式自己的指令後面,並隨著每則訊息送出。在ChatGPT裡它是設定裡的一個欄位;在Whizi裡則是每個專案的指令,最多32,000字元,套用在該專案裡的每一段對話。
使用者能不能凌駕system prompt?
有時候可以。模型被訓練成優先遵守system prompt,寫得好的指令能擋住一般的請求。刻意設計、能說服模型偏離規則的訊息就是越獄,廠商把這當成安全問題來處理,而不是一項功能。任何絕對不能發生的事,都該寫進模型之外的程式碼裡,那裡沒有訊息能跟它爭辯。