SQL Vector 向量與 AI 搜尋
隨著 AI 與大型語言模型 (LLM) 的爆發,傳統的「關鍵字搜尋」已無法滿足複雜的需求。現在,我們可以在 SQL 資料庫中直接儲存、搜尋並分析「向量 (Vector)」資料,這是實現 RAG (檢索增強生成) 與語義搜尋的核心技術。
什麼是向量 (Vector)?
在電腦科學中,向量是一組數字的有序排列(通常是浮點數陣列)。
在 AI 領域,我們透過模型(如 OpenAI 的 text-embedding-3-small)將一段文字、圖片或聲音轉化為一個高維度的向量。這組數字代表了該資料的「語義特徵」。
範例:
- 「貓」 →
[0.12, -0.56, 0.89, ...] - 「小貓」 →
[0.11, -0.55, 0.88, ...] - 「車子」 →
[0.99, 0.12, -0.45, ...]
你會發現,「貓」與「小貓」的向量數字非常接近,而與「車子」相去甚遠。這就是所謂的「語義相似性」。
什麼是嵌入 (Embedding)?
「嵌入」指的是將高維度的原始資料(如整篇部落格文章)對應到低維度向量空間的過程。
- 輸入:非結構化資料(文字、影像)。
- 輸出:代表語義的向量數字。
在現代架構中,我們通常先將 Embedding 存入 SQL 資料庫的向量欄位中,再進行後續的檢索。
為什麼在 SQL 中處理向量?
以前,這類資料通常存在專門的「向量資料庫 (Vector Database)」如 Pinecone 或 Milvus。但現在,主流 SQL 資料庫(如 PostgreSQL、MySQL、SQL Server)都已提供向量支援,這帶來了巨大優點:
- 資料一致性:你的傳統業務資料(如使用者名稱、訂單)可以與向量資料(如推薦屬性)存放在同一個地方。
- 事務支援 (ACID):確保向量更新與業務邏輯同步生效。
- 複合查詢:你可以在一條 SQL 中同時進行「傳統篩選」與「語義搜尋」:
-- 範例:找出 2024 年之後、且「內容與 AI 相關」的前 5 篇文章 SELECT title FROM blog_posts WHERE created_at > '2024-01-01' ORDER BY content_vector <=> embedding_input LIMIT 5;
主流資料庫的支援現況
雖然 SQL 是標準語言,但向量功能目前多以擴充套件或內建函數形式存在:
1. PostgreSQL (pgvector)
這是目前最流行、生態最成熟的解決方案。它新增了 VECTOR 資料型態,並支援 HNSW 與 IVFFlat 索引。
2. MySQL / MariaDB
透過 JSON 欄位儲存向量,並利用 JSON_ARRAY 或 8.4 版本後開始引進的 VECTOR 相關原生支援(仍持續演進中)。
3. Azure SQL / SQL Server
微軟近期為 Azure SQL 資料庫推出了內建的向量支援函數(如 VECTOR_DISTANCE),允許在雲端更方便地整合 AI 功能。
核心流程:RAG (檢索增強生成)
理解 SQL Vector 最重要的場景就是 RAG:
- 資料準備:將你的 PDF 或文件切碎,透過 AI 模型轉成 Embedding,存入 SQL 向量欄位。
- 用戶提問:用戶輸入問題 $\rightarrow$ 轉成向量。
- 語義檢索:在 SQL 中利用相似度計算(如 Cosine Distance)找出最相關的片段。
- 生成回答:將找出的知識片段餵給 LLM (如 GPT-4),產出精確的回答。
透過 SQL 向量功能,資料庫不再只是儲存工具,而是變成了 AI 應用的「長期記憶庫」。下一章,我們將學習如何在 SQL 中具體建立向量欄位並儲存資料。