注入脈絡
檢索把最佳段落交給你了;接下來就是組裝提示。脈絡注入(context injection)是指把那些段落放進一個提示樣板(prompt template)裡,連同使用者的問題,再加上一段清楚說明該如何使用它們的指示。典型的排版是:先一段定下規則的系統提示(system prompt),接著放檢索到的塊(每塊都標上來源),最後才是問題。
SYSTEM: Answer the question using ONLY the context below. If the answer is not in the context, say "I don't know." Cite the source tag [S1], [S2]... after each claim. CONTEXT: [S1] (handbook.pdf p.12) Refunds are issued within 14 days... [S2] (faq.md) Refunds require the original receipt... QUESTION: How long do refunds take, and what do I need?
要求模型守住依據
把段落遞過去還不夠;你必須明白要求模型使用它們、而且只使用它們。接地要靠明確的指示來落實:只根據脈絡作答,而且關鍵在於——如果答案不在裡面,就說不知道。這份「可以不答」的許可,是對抗幻覺最有效的單一防線——少了它,模型就會靠猜測來填補空白。
接地约束让每个生成的词元都以查询 q 和检索到的上下文 C 为条件——答案是证据的函数。
引用與出處標註
因為你替每一塊都標了來源,就可以要求模型附上引用——出處標註(attribution)讓一個答案變成使用者能查證的東西。在每個論點後面放上像 `[S1]` 這樣的註腳標記,讀者就能一鍵點回原始段落。RAG 產品的信任感,靠的是可查證的來源,遠多於自信的語氣。
有一個要留意的陷阱:模型可能生出捏造的引用(fabricated citation)——一個看似真實、卻沒講出所宣稱內容、甚至根本不存在的參考來源。防範方法是:只允許引用檢索到的那些塊(使用它們真正的 id),並在生成後查核每個被引用的 id 是否真的在脈絡裡。絕不要讓模型自己編出方括號裡的標籤。
該預期的失敗模式
兩個反覆出現的問題。第一是中間迷失(lost in the middle):長提示在開頭和結尾得到的注意力最多,所以埋在正中央的關鍵段落可能被忽略。把重排做好、只留幾塊,讓重要的那塊落在靠邊的位置。第二是脈絡溢位(context overflow):塞太多塊會撐爆脈絡視窗,或把訊號淹沒。檢索到的文字越多並不越好——對的那幾塊,勝過一大堆。
交互式注意力图:点击一个词元会高亮它在序列中所关注的词元。