pgvector - PostgreSQL 向量相似度搜尋擴展
項目概述
pgvector 是一個開源的 PostgreSQL 擴展,為 PostgreSQL 資料庫添加了向量操作和相似度搜尋支援。它不僅僅是一個儲存解決方案,而是一個專為效能和易用性設計的完整向量搜尋引擎。
項目地址: https://github.com/pgvector/pgvector
核心功能特性
1. 向量儲存與管理
- 向量資料類型支援:PostgreSQL 原生不具備向量功能(截至 PostgreSQL 16),pgvector 專門設計來填補這一空白
- 高維向量儲存:支援儲存和管理高維向量資料
- 稀疏向量支援:稀疏向量最多可以有 16,000 個非零元素
2. 向量相似度搜尋
- 多種相似度演算法:支援基於餘弦相似度或歐幾里得距離等向量相似度度量的相似度搜尋
- 精確與近似搜尋:預設情況下,pgvector 執行精確最近鄰搜尋,提供完美的召回率。你可以添加索引來使用近似最近鄰搜尋,這會犧牲一些召回率來換取速度
3. 索引與效能優化
- 高效索引:提供專門的向量索引機制,優化查詢效能
- SQL 集成:提供 SQL 中的向量相似度搜尋和最近鄰搜尋支援
- 距離函數操作符:支援多種距離函數操作符來檢索向量和計算相似度
主要應用場景
1. 機器學習與 AI 應用
- 向量嵌入儲存:可用於儲存嵌入向量,特別適用於涉及自然語言處理的應用,如基於 OpenAI 的 GPT 模型構建的應用
- 語義搜尋:支援基於語義相似度的文檔和內容搜尋
2. 推薦系統
- 內容推薦:促進基於內容的推薦系統等應用
- 相似度匹配:通過向量相似度進行精確的內容匹配
3. 檢索增強生成(RAG)
- 文檔檢索:使用 OpenAI 的文本嵌入模型嵌入文檔,並使用餘弦相似度查找與給定查詢最相似的文檔
- 知識庫查詢:構建智能問答系統和知識檢索應用
技術實現
安裝與配置
CREATE EXTENSION vector;
基本使用示例
CREATE TABLE items (
id SERIAL PRIMARY KEY,
embedding VECTOR(3)
);
INSERT INTO items (embedding) VALUES
('[1,2,3]'),
('[4,5,6]'),
('[7,8,9]');
SELECT * FROM items
ORDER BY embedding <-> '[3,1,2]'
LIMIT 5;
距離操作符
<->- L2 距離(歐幾里得距離)<#>- 負內積<=>- 餘弦距離
生態系統集成
雲平台支援
- Supabase:提供原生 pgvector 支援
- Azure Database for PostgreSQL:支援 pgvector 擴展
- Neon:提供完整的 pgvector 功能支援
開發框架集成
- LangChain:提供使用 postgres 作為後端並利用 pgvector 擴展的 LangChain 向量儲存抽象實現
- Docker 支援:提供官方 Docker 鏡像便於部署
優勢特點
1. 開源與可擴展性
- 完全開源,社群驅動開發
- 與 PostgreSQL 生態系統完美集成
- 支援分散式 SQL 擴展
2. 效能與可靠性
- 基於成熟的 PostgreSQL 資料庫系統
- 提供 ACID 事務支援
- 高效的向量索引和查詢優化
3. 易用性
- 標準 SQL 介面,學習成本低
- 豐富的文檔和社群支援
- 與現有 PostgreSQL 工具和生態系統兼容
總結
pgvector 是 PostgreSQL 生態系統中的重要組成部分,它將傳統關係型資料庫的強大功能與現代 AI 應用的向量搜尋需求完美結合。無論是構建推薦系統、語義搜尋引擎,還是實現複雜的機器學習應用,pgvector 都提供了一個強大、靈活且易於使用的解決方案。其開源特性和與 PostgreSQL 的深度集成使其成為企業級 AI 應用的理想選擇。