🎯 什麼情境該想到我
當你「手上的設定/產品知識多到塞不進 prompt,但每一輪其實只用得到其中幾條」的時候。
⚙️ 怎麼用(步驟 / 公式)
核心想法:每條知識綁一組關鍵詞;只有最近的對話字面上提到這些詞,這條內容才被注入這一輪的 prompt。幾百條設定,每輪只付真正用到的那幾條的 token。它是「用字串比對當檢索條件的極簡 RAG」:沒有 embedding,換來的是可預測、可除錯——寫關鍵詞的人就知道它什麼時候會出現。
- 切條目:一個概念一條(一個地點、一個組織、一個產品),每條寫
key[](主關鍵詞,任一命中即觸發)+content。同義詞、暱稱都列進key[]。 - 定掃描範圍:只看最近 N 則訊息(
scanDepth),不是整段歷史——否則很久以前提過一次的東西會永遠常駐。 - 加條件,擋誤觸:主鍵命中後再看次要鍵——
AND_ANY(「龍」+「火」或「巢穴」)、NOT_ANY(「國王」但不是在講「棋局」)。 - 允許連鎖,但要設閘:被激活條目的內容也加進掃描範圍再掃一次(「睡龍酒館」的內容提到「龍」→ 帶出「龍」的條目),直到沒有新激活。「總綱」型條目關掉遞迴,避免一條帶出一串。
- 同類互斥:天氣「晴/雨/雪」放同一組,同時命中只留一條。
- 時間效果:
sticky(提到後持續 N 輪,事件不會下一句就忘)、cooldown(激活後休息 N 輪,防洗版)、delay(前 N 則訊息不檢測,劇情設定別太早冒出來)。 - 給獨立預算:
知識預算 = max_context × 百分比(SillyTavern 預設 25%,8192 × 25% = 2048 tokens)。逐條累計,超過就不再激活。不設上限的話,知識會直接吃掉聊天記錄的空間(見 工具-長對話的Token預算分配)。 - 決定放哪:背景知識放 prompt 前段(穩定但離生成點遠);會改變行為的指引放聊天歷史的指定深度(離生成點近、影響大,見 工具-用深度注入讓指令不被遺忘)。
和向量 RAG 怎麼選
| 關鍵字觸發 | 向量召回(工具-RAG檢索增強生成) | |
|---|---|---|
| 命中條件 | 真的出現那個詞 | 意思相近就會命中 |
| 可預測性 | 高,作者可控 | 低,要調門檻 |
| 漏觸發 | 換個說法就漏(「會噴火的大蜥蜴」不會命中「龍」) | 少 |
| 誤觸發 | 字面巧合(要靠次要鍵擋) | 語意相近但不相干 |
| 成本 | 字串比對,幾乎免費 | 要 embedding、索引 |
實務上兩者疊用:關鍵字當主力,重要條目再加語意觸發補漏(SillyTavern 的 vectorized=true 就是這樣做)。
機制細節(六層過濾、掃描狀態機、8 種注入位置)→ World Info世界書
🧪 我實際套用的紀錄
- (尚無)
⚠️ 注意 / 什麼時候不適用
(以下為經驗推論,原文只描述機制)
- 不懂語意:使用者換個說法就漏;同義詞要自己列,或疊一層向量召回。
- 遞迴會連鎖爆量:寫得太廣的條目會帶出一大串,把預算吃光。
- 機率激活、加權隨機會讓輸出不可重現,除錯時先關掉。
- 知識量小到整份放進 prompt 也不貴時,不需要這套——每一層條件都是之後要維護的規則。
- 條目數極多時每輪都要全掃一遍,掃描成本不可忽略。
🔗 相關工具
- World Info世界書 —— 這套模式在 SillyTavern 的完整實作
- 工具-RAG檢索增強生成 —— 語意版的按需載入;分工:字面觸發求可控,向量召回求不漏
- 工具-長對話的Token預算分配 —— 注入的知識要跟聊天記錄搶同一個 context,預算要一起規劃