用提示模板管理版本:把提示當程式碼看待
提示散落在各個檔案的字串裡,就沒辦法回答「上週效果比較好的是哪一版」。
提示是會影響產品行為的邏輯,卻常被當成隨手可改的文案。結果是:效果變差時無法回溯,也沒人說得清當時改了什麼。把提示當程式碼管理,成本很低,回報很高。
最小可行做法
- 把提示抽到獨立檔案,例如
prompts/classify_log.v3.txt,不要內嵌在程式邏輯裡。 - 檔名或檔頭帶版本號,舊版保留不刪。
- 呼叫時把版本號記進日誌,之後才能把「哪一版產生了這個輸出」對起來。
- 每個版本附一份評測結果,哪怕只有 30 題。
模板變數要有預設與檢查
from string import Template
class Prompt:
def __init__(self, path, version):
self.tpl = Template(open(path, encoding='utf-8').read())
self.version = version
def render(self, **kw):
missing = [k for k in self.tpl.get_identifiers() if k not in kw]
if missing:
raise KeyError(f'提示模板缺少變數:{missing}')
return self.tpl.substitute(**kw)少了一個變數就丟例外,比讓 \$log 原封不動送進模型好得多——後者不會報錯,只會安靜地產生爛結果。
日誌至少記三樣:提示版本、模型版本、輸入雜湊。少了任何一樣,事後都很難重現問題。