生成 Embedding 進行向量化搜尋
傳統資料庫的LIKE搜尋需要文字完全一樣才能搜尋,跟自然語言可以透過相似度或相似的字句搜尋比較不同。使用RAG(Retrieval Augmented Generation)的技術將語意轉為自然語言向量,比較向量就可以比較語意相似度。注意比較不同向量時,需要使用相同的模型,在Asgard的平台內,提供了兩種實現向量搜尋的方式:
- Generate Embedding Processor
- 使用 Asgard 內建知識庫
本章節將透過範例說明如何使用 Generate Embedding Processor
來實現向量搜尋
前置作業
- 可供連線的資料庫
- 在
Settings
裡新增 Embedding Model 設定
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: 可以將
Processor
的Description
改成容易識別的描述幫助工作流程的編排易讀性,例如改成「驗證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 會將該問題轉成向量並查詢資料庫後,將相似度高的資料印出。