把一個大提示拆成多次呼叫:什麼時候值得
一次做完所有事的提示很難調。拆成多步後好維護,但延遲與成本會上升,要拆得有道理。
當一個提示同時要求分類、抽取、改寫與排序時,任何一項出錯都很難定位。把它拆成多次呼叫是常見解法,但拆錯會讓成本翻倍而效果不變。
值得拆的訊號
- 不同子任務需要不同的溫度(例如抽取要 0、發想要 0.8)。
- 中間結果需要被程式驗證或修正後才能繼續。
- 某一步可以快取重用,例如文件摘要對多個問題都適用。
- 某一步可以換用更便宜的小模型。
不值得拆的情況
- 子任務之間高度耦合,拆開後每一步都要重述完整背景。
- 延遲預算很緊,多一次往返就超標。
- 只是「看起來比較整齊」,沒有實際的除錯或成本效益。
拆解後的介面要收斂
# 每一步的輸出就是下一步的輸入,型別固定
intent = classify(user_text) # -> str
slots = extract(user_text, schema[intent]) # -> dict,可程式驗證
reply = compose(intent, slots, tone='正式') # -> str關鍵在於中間的 slots 是可驗證的結構,而不是一段自然語言。若每一步都輸出散文再交給下一步讀,錯誤只會被層層放大。
拆完之後記得量測整體延遲。三次呼叫各 400ms,加上網路往返就逼近 1.5 秒,對互動式介面已經是可感知的卡頓。