載入中

從文件中提取文字區塊後,RAG 管線的下一步是找出哪些區塊與使用者的問題最相關。這本質上是一個搜尋問題——您需要瀏覽所有的區塊,並找出與使用者所詢問內容相關的那些區塊。

尋找相關區塊最常見的方法是語意搜尋。與傳統的關鍵字搜尋不同,語意搜尋使用文字嵌入來理解使用者問題和每個文字區塊的實際含義。這使得系統即使在確切字詞不相符的情況下,也能找到概念上相關的內容。

什麼是文字嵌入?

文字嵌入是某段文字中所包含意義的數值表示。可以將其視為將文字和句子轉換成電腦可以進行數學運算的格式。

以下是這個過程的運作方式:

  • 您將文字輸入嵌入模型
  • 模型輸出一長串數字(即嵌入)
  • 每個數字的範圍從 -1 到 +1
  • 這些數字代表輸入文字的不同特質或特徵

理解這些數字

嵌入中的每個數字本質上都是輸入文字某種特質的「分數」。然而,這裡有個重要的注意事項:我們實際上並不知道每個特定數字代表什麼。

雖然想像某個數字可能代表「這段文字有多快樂」,而另一個數字可能代表「這段文字談論海洋的程度」會很有幫助,但這些只是概念性的例子。嵌入模型在訓練過程中學習這些特徵,但它們並沒有被明確標記,對我們來說也無法解讀。

儘管存在這種不透明性,嵌入仍然非常強大,因為它們以一種能夠在不同文字片段之間進行數學比較的方式,捕捉了語意含義。

Vertex AI 上的嵌入

Claude 無法直接生成嵌入。相反地,您需要使用專門的嵌入模型。在 Vertex AI 上,我們將使用的模型稱為 text-embedding-005。

實作

要在 Vertex AI 上使用嵌入,您需要安裝 Google GenAI SDK:

bash
pip install google-genai

以下是生成嵌入的基本設定:

python
from google import genai

client = genai.Client(
    project="YOUR_PROJECT_ID", 
    location="global", 
    vertexai=True
)

def generate_embedding(text):
    response = client.models.embed_content(
        model="text-embedding-005", 
        contents=text
    )
    
    if not response.embeddings:
        return []
    
    return [e.values for e in response.embeddings]

當您使用文字區塊執行此函式時,您會得到一串浮點數,代表該文字的語意含義。這些嵌入構成了在您的 RAG 系統中實作語意搜尋的基礎。

下一步是了解如何使用這些嵌入來實際找出與使用者問題最相關的區塊,這涉及透過數學方式比較嵌入以確定相似度。