GCP Cloud SQL Postgres 向量搜尋

筆記一下 在 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 加入限制條件

  1. 於向量表加入新文字陣列欄位 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)

PS5