跳至主要内容

生成 Embedding 進行向量化搜尋

傳統資料庫的LIKE搜尋需要文字完全一樣才能搜尋,跟自然語言可以透過相似度或相似的字句搜尋比較不同。使用RAG(Retrieval Augmented Generation)的技術將語意轉為自然語言向量,比較向量就可以比較語意相似度。注意比較不同向量時,需要使用相同的模型,在Asgard的平台內,提供了兩種實現向量搜尋的方式:

  • Generate Embedding Processor
  • 使用 Asgard 內建知識庫

本章節將透過範例說明如何使用 Generate Embedding Processor 來實現向量搜尋

前置作業

Step 1:Listen Message

新增一個Listen Message用以存放用戶輸入的訊息。

Step 2:Generate Embedding 自然語言轉向量

Generate Embedding將用戶輸入的文字轉化為向量嵌入(Embedding)。

  • Embedding Model 選擇已經設定好的嵌入/向量模型,或是可以點擊「Add」以新增Embedding Model設定。
  • Input 選擇Expression並輸入以下範例:
prevMessage
  • ResultField 產生的向量嵌入將存入的變數名稱。範例選擇 Literal 類型,並輸入 msgEmb
  • 儲存設定

備註

prevMessage 為 Asgard 內建函數。

Step 3:Push Message(optional)印出內容

新增一個 Push Message 節點來確認轉化的內容。

  • Message 選擇 Expression 類型,並輸入底下範例
vecToStr(msgEmb,'[',']',',')
  • Optional: 可以將 ProcessorDescription 改成容易識別的描述幫助工作流程的編排易讀性,例如改成「驗證embed內容」
  • 儲存設定

  • 預覽 點擊 Preview 來預覽當前轉化的內容。

Step 4:SQL查詢

SQL 查詢資料庫

  • Data Source 下拉式選單選擇已經設定好的資料庫連線,或是可以點擊「Add」以新增 Data Source 設定。
  • SQL 輸入欲查詢的語法,參考範例:
SELECT id, context FROM public.faqs ORDER BY  embedding <=> $1 LIMIT 10

  • ResultField 產生的查詢結果資料將存入的變數名稱。範例選擇Literal類型,並輸入 faqs
  • SQL Type Argument 將向量放入讓 SQL 搜尋,請依據對應的欄位類型選擇 Type 並填入值。參考範例:

Type: String Value:

vecToStr(msgEmb,'[',']',',') 
  • 儲存設定

Step 5:預覽 Bot

點擊 Preview 預覽。直接在預覽視窗輸入問題後送出,AI 會將該問題轉成向量並查詢資料庫後,將相似度高的資料印出。