前幾天已經把 RAG 前面的流程整理得差不多了:
Chunking
→ Embedding
→ Vector Database
→ Retrieval
→ Reranking
做到這裡之後,系統已經可以找出和使用者問題最相關的內容。
但還有最後一個問題:
找到資料之後,要怎麼讓 AI 真的根據這些資料回答?
這就是今天要整理的 Grounded Generation。
Grounded Generation 可以簡單理解成:
讓 AI 的回答建立在提供的資料上,而不是只依賴模型本身的知識。
例如使用者問:
VoCare 的語音功能要怎麼使用?
系統透過 Retrieval 找到:
點擊聊天畫面下方的麥克風按鈕後,即可開始語音輸入。
這時候 AI 應該根據這段資料回答,而不是自己猜測系統裡可能有哪些按鈕。
所以流程會變成:
使用者問題
→ 找到相關資料
→ 將資料提供給 AI
→ AI 根據資料產生回答
即使 Retrieval 找到正確內容,如果 Prompt 沒有寫清楚,AI 還是可能加入資料裡沒有出現的資訊。
所以在把 Chunk 交給 AI 時,需要同時加入一些規則。
例如:
這樣可以降低 AI 在回答時產生不必要內容的機會。
一個簡化的 RAG Prompt,可以包含三個主要部分:
1. 回答規則
告訴 AI 應該如何使用資料。
2. Retrieved Context
放入 Retrieval 和 Reranking 後留下的相關 Chunk。
3. User Question
最後才放使用者真正提出的問題。
所以可以整理成:
**Instruction
RAG 很重要的一點是:
沒有找到足夠資料時,不應該硬回答。
例如使用者問了一個知識庫完全沒有收錄的問題。
這時候比較合理的做法是回答:
目前提供的資料中沒有足夠資訊可以確認。
而不是讓 AI 自己補出一個看起來合理的答案。
所以 RAG 不只是「幫 AI 找資料」。
同時也要讓 AI 知道:
什麼時候資料不足。
RAG 前面做得再完整,如果最後 AI 沒有正確使用 Retrieved Chunks,整套流程一樣沒有意義。
所以可以把整個 RAG 分成兩大部分:
Retrieval
→ 找到正確的資料
Generation
→ 根據正確的資料回答
兩邊都要做好,RAG 才真正完整。