系統提示與使用者提示:邊界該畫在哪裡
把該放系統提示的東西寫進使用者訊息,是最常見也最容易修的架構錯誤。
系統提示(system)與使用者提示(user)不是隨便分的。分錯的直接後果是:使用者輸入可以覆寫你的規則。
放在系統提示
- 角色設定與語氣。
- 不可被覆寫的安全與業務規則。
- 輸出格式規範。
- 固定不變的背景知識(例如產品名稱、可用的分類清單)。
放在使用者提示
- 這一次要處理的實際資料。
- 本次特有的參數,例如「請用 100 字以內」。
- 對話歷史。
一個常見的錯誤示範
# 錯:規則跟資料混在同一則 user 訊息
user = f"你只能回答產品相關問題。使用者說:{user_input}"
# 對:規則在 system,資料在 user,並且明確標示邊界
system = "你只能回答產品相關問題,其餘一律回覆無法協助。"
user = f"<user_input>\n{user_input}\n</user_input>"前者只要使用者輸入「忽略前面的規則」,整句話就在同一個層級互相競爭;後者的規則在更高層級,且資料被標籤包住,攻擊難度高上不少。
系統提示不是越長越好。超過一定長度後,中段的規則容易被忽略,重要規則請放在開頭或結尾。