筆記一下 在 GCP 上使用 Cloud SQL 建立 Postgres 實例並擴充 向量搜尋的步驟
並加入 namespace 字串陣列以達到原本 Vertext AI 向量搜尋中的篩選限制命名空間
結論
CREATE EXTENSION IF NOT EXISTS vector;
CREATE TABLE embeddings(
id INTEGER,
embedding vector(3)
);
INSERT INTO embeddings
VALUES
(1, '[1, 0, -1]'),
(2, '[1, 1, 1]'),
(3, '[1, 1, 50]');
SELECT id,1 - (embedding <=> '[1, 0, -1]') AS similarity
FROM embeddings
WHERE 1 - (embedding <=> '[1, 0, -1]') > 0.5
ORDER BY similarity DESC
LIMIT 1
說明
使用 GCP Cloud SQL Postgres 向量搜尋
補充
參考 Filter vector matches | Vertex AI | Google Cloud 加入限制條件
- 於向量表加入新文字陣列欄位 namespace
2. 更新 namespace 資料 1, {val1,val2}
3. 新增資料 4, [1.0.-1.5], {val3,val2}
4 搜尋向量 [1, 0.5. -0.5]
SELECT id,1 - (embedding <=> '[1, 0.5, -0.5]') AS similarity, namespace
FROM embeddings
WHERE 1 - (embedding <=> '[1, 0.5, -0.5]') > 0.5
ORDER BY similarity DESC
LIMIT 2;
可以看到會找到符合的資料 1 與 4
5. 加入 where 條件 AND 'val1' = ANY (namespace)
SELECT id,1 - (embedding <=> '[1, 0.5, -0.5]') AS similarity, namespace
FROM embeddings
WHERE 1 - (embedding <=> '[1, 0.5, -0.5]') > 0.5
AND 'val1' = ANY (namespace)
ORDER BY similarity DESC
LIMIT 2;
可以看到資料 4 的 namespace 因為不包含 val1
所以不會出現在搜尋結果
8.15. 陣列 - PostgreSQL 正體中文使用手冊
參照
將 pgvector、LLM 和 LangChain 與 Google Cloud 資料庫結合使用 |Google Cloud 博客
延伸閱讀
GCP Cloud SQL Proxy 本地連線不開白名單 | 御用小本本 - 點部落 (dotblogs.com.tw)