把領域知識編進提示:術語表與規則庫的組織方式
領域知識塞進提示會爆長,用檢索又太重。這是中間的做法。
專業領域的應用常有這種需求:一份三百條的術語對照表、一組兩百條的業務規則。全部塞進提示會超長,全部進 RAG 又顯得笨重,而且規則類的內容檢索命中率很差。
實際可行的做法是按需注入:先用輕量方法判斷這次請求會用到哪些條目,只把相關的部分放進提示。
術語表的按需注入
import re
GLOSSARY = {
'毛利率': '營業毛利 ÷ 營業收入,本公司報表以合併數為準。',
'在途庫存': '已出貨但尚未到達門市的存貨,計入總庫存但不可銷售。',
# …三百條
}
def pick_terms(text, glossary, limit=12):
hits = [(t, d) for t, d in glossary.items() if t in text]
return dict(hits[:limit])單純的字串比對就能處理大部分情況,成本近乎零。比對不到時再退回向量檢索,兩層搭配的效果與成本都比純檢索好。
規則庫要分層
- always(永遠注入):不可違反的安全與法遵規則,通常不超過十條。
- conditional(條件注入):依任務類型、使用者角色、輸入特徵決定。
- reference(僅供檢索):罕用的細則,需要時才撈。
rules = RULES['always'][:]
for r in RULES['conditional']:
if r['when'](ctx): # 例:ctx['amount'] > 100000
rules.append(r['text'])
if len(rules) < 15:
rules += retrieve_rules(query, k=15 - len(rules))規則衝突的處理
注入多條規則時一定會出現衝突。必須在提示中明確給出優先順序,而不是期待模型自己判斷。
規則優先順序(衝突時依序適用):
1. 安全與法規規則
2. 本次請求的明確指示
3. 一般業務規則
4. 風格與格式偏好維護性設計
- 規則存成結構化檔案,每條有 id、生效日期、來源文件連結。
- 規則變更走審查流程,並記錄變更原因。
- 定期檢查「從未被注入過」的規則——它們可能是死規則,或條件寫錯了。
把每次實際注入的規則 id 記進日誌。使用者質疑判斷結果時,你能明確指出「這次套用了哪幾條規則」,這在受監管的行業是必要能力。
訂閱後繼續閱讀全文
本篇為訂閱者專屬內容。訂閱後可取得下列權限:
- 解鎖全部內容權限
- 閱讀不限篇數
- 全站移除廣告
月卡
NT$240
開通 30 天
一次付清,開通 30 天
季卡
NT$620
開通 90 天
一次付清,開通 90 天,每天約 NT$7
年卡
NT$2,160
開通 365 天
一次付清,開通 365 天,每天約 NT$6
一次性付款,付款成功後立即開通,到期自動結束,不會再次扣款,也不需要取消訂閱。
立即訂閱
金額均為新臺幣(TWD),即實際扣款金額,不另收手續費
支援信用卡 · Apple Pay · Google Pay · WebATM · ATM 轉帳
購買須知與退款政策