既然我們已經介紹了 RAG、文本分塊和嵌入的基礎知識,讓我們逐步走過完整的 RAG 管線。這個詳細的範例將向您展示在實際實作中所有部分如何組合在一起。
步驟 1:分塊您的來源文本
首先,我們取得來源文件並將其分解成可管理的區塊。在這個範例中,我們將使用兩個簡單的文本區段:
- 區段 1:醫學研究 - 「今年在我們對 XDR-47 的理解上取得了重大進展,這是一種我們以前從未見過的『bug』。」
- 區段 2:軟體工程 - 「這個部門投入了大量精力研究我們分散式系統中的各種感染途徑」
步驟 2:生成嵌入
接下來,我們將每個文本區塊轉換成數值嵌入。為了讓這更容易理解,讓我們想像我們有一個完美的嵌入模型,它總是恰好回傳兩個數字,而我們知道每個數字代表什麼:

在我們想像的模型中:
- 第一個數字:文本談論醫學的程度
- 第二個數字:文本談論軟體工程的程度
所以我們的醫學研究區段得到 [0.97, 0.34] - 非常醫學,由於「bug」這個詞,也有些與軟體相關。軟體工程區段得到 [0.30, 0.97] - 非常注重軟體,但「感染途徑」帶有醫學含義。
正規化
在儲存這些嵌入之前,它們會經過一個正規化過程,將每個向量縮放到大小為 1.0。這通常由您的嵌入 API 自動處理,但了解它的發生是很重要的。

正規化後,我們的嵌入變成 [0.944, 0.331] 和 [0.295, 0.955]。我們可以在單位圓上視覺化這些點,兩個點都恰好位於圓的邊緣上。

步驟 3:儲存在向量資料庫中
正規化後的嵌入會儲存在向量資料庫中 - 這是一種專門用於儲存、比較和搜尋像我們嵌入這樣的長數字列表的資料庫。

在這一點上,我們暫停。到目前為止所有的工作都是提前進行的預處理。現在我們等待使用者提交查詢。
步驟 4:處理使用者查詢
當使用者提出像「我對這家公司很好奇。特別是,軟體工程部門今年做了什麼?」這樣的問題時,我們會將他們的查詢透過相同的嵌入模型處理。

這個查詢被嵌入為 [0.1, 0.89] - 低醫學分數,高軟體工程分數。正規化後,它變成 [0.112, 0.993]。
步驟 5:尋找相似的嵌入
現在我們詢問向量資料庫:「找出與這個使用者查詢嵌入最接近的儲存嵌入。」資料庫回傳軟體工程區段,因為它是最相似的。

但資料庫如何判斷「最接近」呢?它使用餘弦相似度。
餘弦相似度
向量資料庫計算向量之間角度的餘弦值來衡量相似度。這給我們一個介於 -1 和 1 之間的數字:

- 1.0 = 向量指向完全相同的方向(非常相似)
- 0.0 = 向量垂直(不相關)
- -1.0 = 向量指向相反的方向(非常不同)
在我們的範例中:
- 使用者查詢 vs 軟體工程:餘弦相似度 = 0.983(非常相似!)
- 使用者查詢 vs 醫學研究:餘弦相似度 = 0.398(較不相似)
餘弦距離
您經常會在向量資料庫文件中看到「餘弦距離」。這簡單地就是 1 - 餘弦相似度,它翻轉了尺度,使得較小的數字表示更相似:
- 0.0 = 非常相似
- 1.0 = 垂直
- 2.0 = 完全相反
步驟 6:建構最終提示
最後,我們取得使用者的問題和最相關的文本區塊(軟體工程區段),並將它們組合成給 Claude 的提示:

Answer the user's question about the financial document.
<user_question>
How many bugs did engineers fix this year?
</user_question>
<report>
## Section 2: Software Engineering
This division dedicated significant effort to studying various infection vectors in our distributed systems
</report>這就是完整的 RAG 管線!系統成功找到了使用者軟體工程問題最相關的上下文,並將其提供給 Claude 以生成有根據的回應。
每次使用者提交查詢時,這個過程都會自動發生,讓 Claude 能夠根據您的特定文件回答問題,而不僅僅是依靠其一般的訓練知識。