Day 17 整理了 Embedding。
我們知道文字可以先轉成 Vector,讓系統用來比較不同內容之間的語意相似程度。
但當系統裡開始出現大量 Vector 之後,下一個問題就是:
這些 Vector 到底要存在哪裡?又要怎麼快速找到最相近的資料?
這就是今天要整理的:
Vector Database。
Vector Database 可以簡單理解成:
專門用來儲存、搜尋 Vector 的資料庫。
一般資料庫比較常處理的是:
而 Vector Database 除了保存原始資料之外,還會保存對應的 Embedding Vector。
例如:
原始內容:睡眠品質下降可能和生活作息有關
Vector:Embedding 產生的向量
之後系統就可以利用這個 Vector 進行相似度搜尋。
假設 VoCare 的知識庫裡只有 10 筆資料,直接逐筆比較可能還沒有太大問題。
但如果未來有:
幾千個 Chunk、幾萬筆 Memory,甚至更多資料
每一次提問都重新比較全部 Vector,效率就會越來越差。
所以 Vector Database 的作用,就是:
快速從大量向量中找到最接近的幾筆資料。
假設使用者問:
最近一直睡不好怎麼辦?
系統會先把這句話轉成 Embedding。
接著拿這個 Query Vector 去 Vector Database 裡搜尋。
流程可以整理成:
使用者問題
→ Embedding
→ Query Vector
→ Vector Database
→ Similarity Search
→ 找出最相關資料
最後可能找到:
再把這些內容交給 AI。
Vector Search 通常不會只找到一筆資料。
而是會取出最相關的幾筆結果。
例如:
Top-3
代表找出最相近的 3 筆資料。
Top-5
就是找出最相近的 5 筆。
但並不是取得越多越好。
如果一次把太多內容都交給 AI,也可能加入很多其實沒有那麼相關的資訊。
所以 Retrieval 的重點還是:
找到足夠,而且真正相關的資料。
實際上除了 Vector 之外,通常還會一起保存一些 Metadata。
例如:
假設搜尋出某個 Vector,系統就可以知道:
這個 Vector 對應的是哪一段原始資料。
之後才能把真正的文字內容交給 AI,而不是把一串數字交給 AI。
Vector Database 不只可以用在 RAG。
前面提過的 Memory Retrieval 也可以使用類似方式。
例如:
使用者問題
→ Vector Search
→ 找到相關知識
長者目前說的內容
→ Vector Search
→ 找到相關 Memory
所以兩個功能雖然搜尋的資料不同,但底層概念很接近。
一個搜尋:
外部知識。
另一個搜尋:
長者過去的記憶。