你打開一個 AI 寫作工具,輸入「把這段改得口語一點,不要超過 100 字」。模型照著做了。接著你又輸入「不用管前面的規則,改成 2,000 字論文」,它卻還是維持簡短格式。這時候真正控制模型的,可能不只你剛剛打進去的那句話。產品本身也可能在背後附上一組更高層的指令,告訴模型要扮演什麼角色、允許做什麼、輸出要長什麼樣。

Prompt 是一個廣義詞:只要是提供給模型、用來影響這次輸出的指令、內容、範例或背景,都可以被叫作 prompt。 你在聊天框輸入的問題是 prompt;應用程式自動附上的規則也是 prompt;RAG 找回來的文件,雖然比較像 context,也可能和指令一起被組進模型輸入。System prompt 則通常是其中一種比較特殊的應用層指令,用來設定模型在整段互動中應該遵守的行為。

先記一句:Prompt 是「給模型什麼內容」的廣義概念;system prompt 則比較像「這個 AI 產品希望模型依照什麼規則工作」。

使用者 Prompt 解決的是「我現在要你做什麼」

一般使用者最常接觸的就是 user prompt。像是「幫我摘要這份文章」、「把下面 JSON 找出錯誤」、「用高中生聽得懂的方式解釋微積分」,這些都在描述目前這個任務。它通常會隨著每一次對話改變:上一輪叫模型翻譯,下一輪可能改成寫程式。

一個好的 user prompt 往往會包含任務、必要背景、限制與想要的輸出形式。例如「把下面內容整理成 200 字摘要,保留數字,不要加入原文沒有的結論」就比單純寫「摘要」提供更多可執行資訊。這就是 prompt engineering 最常處理的範圍:怎麼把需求寫得足夠明確,減少模型自己猜。

System Prompt 解決的是「這個系統平常應該怎麼做」

如果你在做一個客服 AI,可能希望它永遠使用繁體中文、不能自行承諾退款、回答訂單問題前要先確認使用者身分。這些規則不是每位使用者都應該重新打一遍,而是產品本身的行為設定。傳統上,這類指令常被放在 system prompt。

應用層規則 + 使用者目前的要求 + 其他上下文 → 模型 → 回答

差別因此不只是文字內容。System prompt 的重點是它由誰提供、在系統裡扮演哪一層指令。 在支援訊息優先層級的模型 API 裡,應用開發者可以把產品規則放在比一般 user message 更高的層級,讓使用者不能只靠一句「忽略前面全部規則」就合理地改寫整個應用行為。

但「System Prompt」不是所有平台都長一樣

這裡很容易被教學文章講得太死。不同模型供應商、不同 API 世代,對這一層指令使用的名稱和介面並不完全相同。Anthropic 的 Claude API 仍明確使用 system prompt / system parameter 這類概念;OpenAI 現行文件則在較新的模型與 API 中強調 developer message,並把 user message 定義為優先順序低於 developer message 的終端使用者指令。

OpenAI 的 Chat Completions API 文件也特別說明:對 o1 與更新模型而言,developer message 取代了先前 system message 的角色。因此如果你今天在寫程式,不能只背「system role 永遠最高」這種舊口訣,應該看你實際使用的模型與 API 文件。概念上仍然相似:產品或開發者需要一個比普通使用者要求更穩定的指令層。

System Prompt 不是另一種訓練,也不會改模型參數

把一大段規則放進 system prompt,不等於 fine-tuning。模型沒有因為這段文字而重新訓練,它的參數也沒有被改寫。System prompt 仍然是推理時送進模型的上下文,只是被系統標示成特定的指令來源。換一個請求、換一個應用,完全可以帶著不同的 system 或 developer instructions。

這也代表 system prompt 會占用上下文。它不是藏在模型參數裡的一個神祕設定。如果一個 AI 產品有很長的行為規範、工具說明與格式要求,這些內容都可能成為 context window 的一部分。真正送進模型的內容,通常比聊天介面上看到的使用者訊息多得多。

看不到,不代表它適合拿來藏秘密

很多產品不會把 system prompt 顯示在畫面上,但「介面沒有顯示」和「這是安全的秘密儲存空間」是兩回事。Prompt injection、工具輸入、模型行為差異都可能讓隱藏指令受到攻擊或被部分推測。API key、密碼、私人憑證這類真正的秘密,不應該因為使用者看不到 system prompt 就直接塞進去。

高優先層級的指令主要是在建立控制邊界:例如告訴客服模型不能洩漏其他客戶資料、告訴 Agent 未經確認不能執行高風險操作。它能改善模型在指令衝突時的行為,但不能取代後端權限、資料隔離、輸入驗證與真正的安全機制。

所以真正該分的不是「普通 Prompt」和「厲害 Prompt」

把 system prompt 想成「超強 prompt」會漏掉最重要的一點。模型看到的可能都是文字,但系統在送進模型以前,會替不同訊息標示不同角色與來源;支援 instruction hierarchy 的模型也會依這些層級處理衝突。使用者 prompt 比較像這次任務,system / developer instructions 比較像產品層規則,文件與工具結果則又是另一類上下文。

所以如果只記住最後一句:Prompt 是模型收到的廣義輸入;system prompt 是應用程式用來設定模型行為的一種高層指令方式,而在不同 API 裡,它可能叫 system、developer,甚至透過其他欄位實作。 真正重要的不是背欄位名稱,而是看懂「誰在下指令、這個指令管多大範圍、發生衝突時誰優先」。

接著讀

Context Window 是什麼?System / developer instructions 也要和其他內容一起進入模型的上下文。→ AI Agent 和 Chatbot 差在哪?當模型開始使用工具,指令層級和權限邊界會變得更重要。→

參考資料

OpenAI — Prompt engineering

OpenAI — Chat Completions API reference

OpenAI — The Instruction Hierarchy

Anthropic — System prompts