向量輔助參考資料

本頁面詳細說明所有可用的向量輔助函式,以及必要和選用參數。

vector_assist.define_spec

定義新的向量規格 (或「向量規格」),並傳回升級向量工作負載所需的建議。這項功能會根據使用者提供的規格生成建議。

函式

CREATE OR REPLACE FUNCTION vector_assist.define_spec(
    spec_id TEXT DEFAULT NULL,
    table_name TEXT,
    schema_name TEXT DEFAULT NULL,
    vector_column_name TEXT DEFAULT NULL,
    text_column_name TEXT DEFAULT NULL,
    vector_index_type TEXT DEFAULT NULL, -- Allowed: 'hnsw', 'ivfflat'
    embeddings_available BOOL DEFAULT NULL,
    embedding_model TEXT DEFAULT NULL,
    num_vectors INT DEFAULT NULL,
    dimensionality INT DEFAULT NULL,
    distance_func TEXT DEFAULT NULL, -- Allowed: 'cosine', 'ip', 'l2', 'l1'
    quantization TEXT DEFAULT NULL, -- Allowed: 'none', 'halfvec', 'bit'
    prefilter_column_names TEXT[] DEFAULT NULL,
    memory_budget_kb INT DEFAULT NULL, -- In KB
    target_recall FLOAT DEFAULT NULL,
    target_top_k INT DEFAULT NULL,
    tune_vector_index BOOL DEFAULT FALSE, -- Set to true if target_recall is set
)
RETURNS SETOF vector_assist.RECOMMENDATIONS;

參數

參數 是否必要 說明
spec_id 必填 (自動產生) 您定義的向量規格專屬 ID。
table_name 是否必要 用於向量工作負載設定的資料表名稱。
schema_name 選用 包含要在向量工作負載中使用的資料表結構定義。 系統會根據結構定義搜尋路徑自動推斷結構定義。
vector_column_name 選填或必填 包含向量嵌入的資料欄名稱。

如果您使用多個向量資料欄,且未宣告 text_column_name,則必須使用這個資料欄。如果您只使用一個向量資料欄,這個參數就是選用參數。
text_column_name 選填或必填 文字資料欄的資料欄名稱。如果向量工作負載需要從文字欄產生嵌入內容,則必須提供這個參數。

如果 vector_column_name 參數為 NULL,且沒有其他向量資料欄,則必須提供這個資料欄。

這個參數會使用 google_ml_integration 擴充功能,從指定的文字資料欄產生嵌入。
vector_index_type 選用 向量索引的類型。可接受的值包括:
  • HNSW
  • IVFFlat
  • SCANN
embeddings_available 選用 布林值,用於檢查所選資料表中是否有向量嵌入。 如果沒有偵測到向量資料欄,且已設定 text_column_name 參數,這個欄位就會設為 FALSE
embedding_model 選填或必填 要用於生成嵌入的 google_ml.models 模型 ID。除非 embeddings_available 參數為 FALSENULL,否則此欄位為選填欄位。
num_vectors 選用 資料表中的向量數量。
dismensionality 選用 指定向量的維度。
distance_func 選用 用於比較向量的距離函式。可接受的值包括 cosineipl2l1
quantization 選用 向量索引的量化。可接受的值包括 nonehalfvecbit
prefilter_column_names 選用 為指定資料欄建立索引,用於預先篩選。這可能有助於改善對資料欄套用高選擇性篩選條件的查詢效能。
memory_budget_kb 選用 建立索引時的記憶體上限 (KB)。
target_recall 選用 標準向量查詢的目標召回率。
target_top_k 選用 要擷取的 K 個最佳相符值,用於計算召回率。 如果指定 target_recall 參數,系統就會使用這個值。
tune_vector_index 選用 調整工作負載中的向量索引。啟用後,向量輔助功能會使用向量規格自動調整向量索引或搜尋查詢,並計算最佳資料庫和索引參數。可接受的值包括 TRUEFALSE

傳回值

傳回必須套用的建議資料表,以設定要求的向量工作負載。每一列都是一項建議,其中包含可執行的 SQL 查詢,以及說明套用建議原因的詳細說明。您可以使用 apply_recommendation() 函式套用建議。

建議表格包含下列資料欄:

資料欄名稱 類型 說明
recommendation_id 文字 建議的 ID。系統會使用這個 ID 套用建議。
vector_spec_id 文字 與建議相關聯的向量規格 ID。
table_name 文字 與建議相關聯的資料表名稱。
schema_name 文字 包含指定資料表的結構定義名稱。
query 文字 可執行的 SQL 查詢,用於達成建議的結果。
recommendation 文字 建議的說明,包括套用建議後預期的結果。這個欄位也會顯示建議的原因和理由。您可以視需要使用這個脈絡調整查詢,然後重新產生建議。
applied 布林值 顯示是否已套用最佳化建議。
modified 布林值 顯示使用者是否已修改建議。
created_at 含時區的時間戳記 建議的產生時間,格式為 timestamp with time zone。例如:2024-07-18 09:00:00-08

vector_assist.list_specs

傳回指定資料表和資料欄的目前向量規格。

函式

CREATE OR REPLACE FUNCTION vector_assist.list_specs(
  table_name      TEXT,
  column_name     TEXT DEFAULT NULL
)
RETURNS SETOF vector_assist.VECTOR_SPECS

參數

參數 是否必要 說明
table_name 是否必要 要擷取向量規格的資料表名稱。
column_name 選用 在傳回規格前,要用來篩選資料表的資料欄名稱。如果指定資料欄名稱,系統會傳回包含與該資料欄名稱相符的文字或向量資料欄名稱的規格。

傳回值

傳回指定資料表的規格表,並視需要傳回資料欄名稱。

vector_assist.modify_spec

修改現有的向量規格。修改向量規格後,系統會根據新規格重新產生相關建議。

函式

CREATE OR REPLACE FUNCTION vector_assist.modify_spec(
  spec_id                TEXT,
  table_name             TEXT DEFAULT NULL,
  schema_name            TEXT DEFAULT NULL,
  vector_column_name     TEXT DEFAULT NULL,
  text_column_name       TEXT DEFAULT NULL,
  vector_index_type      TEXT DEFAULT NULL,
  embeddings_available   BOOL DEFAULT NULL,
  num_vectors            INT DEFAULT NULL,
  dimensionality         INT DEFAULT NULL,
  embedding_model        TEXT DEFAULT NULL,
  prefilter_column_names TEXT[] DEFAULT NULL,
  distance_func          TEXT DEFAULT NULL,
  quantization           TEXT DEFAULT NULL,
  memory_budget_kb       INT DEFAULT NULL,
  target_recall          FLOAT DEFAULT NULL,
  target_top_k           INT DEFAULT NULL,
  tune_vector_index      BOOL DEFAULT NULL
)
RETURNS SETOF vector_assist.RECOMMENDATIONS

參數

參數 是否必要 說明
spec_id 必填 (自動產生) 您定義的向量規格專屬 ID。
table_name 是否必要 用於向量工作負載設定的資料表名稱。
schema_name 選用 包含要在向量工作負載中使用的資料表結構定義。 系統會根據結構定義搜尋路徑自動推斷結構定義。
vector_column_name 選填或必填 包含向量嵌入的資料欄名稱。

如果您使用多個向量資料欄,且未宣告 text_column_name,則必須使用這個資料欄。如果您只使用一個向量資料欄,這個參數就是選用參數。
text_column_name 選填或必填 文字資料欄的資料欄名稱。如果向量工作負載需要從文字欄產生嵌入內容,則必須提供這個參數。

如果 vector_column_name 參數為 NULL,且沒有其他向量資料欄,則必須提供這個資料欄。

這個參數會使用 google_ml_integration 擴充功能,從指定的文字資料欄產生嵌入。
vector_index_type 選用 向量索引的類型。可接受的值包括:
  • HNSW
  • IVFFlat
  • SCANN
embeddings_available 選用 布林值,用於檢查所選資料表中是否有向量嵌入。 如果沒有偵測到向量資料欄,且已設定 text_column_name 參數,這個欄位就會設為 FALSE
embedding_model 選填或必填 要用於生成嵌入的模型 ID,來自 google_ml.models 。除非 embeddings_available 參數為 FALSENULL,否則此欄位為選填欄位。
num_vectors 選用 資料表中的向量數量。
dismensionality 選用 指定向量的維度。
distance_func 選用 用於比較向量的距離函式。可接受的值包括 cosineipl2l1
quantization 選用 向量索引的量化。可接受的值包括 nonehalfvecbit
prefilter_column_names 選用 識別可供向量搜尋查詢預先篩選的資料欄。
memory_budget_kb 選用 建立索引時的記憶體上限 (KB)。
target_recall 選用 標準向量查詢的目標召回率。
target_top_k 選用 要擷取的 K 個最佳相符值,用於計算召回率。 如果指定 target_recall 參數,系統就會使用這個值。
tune_vector_index 選用 調整工作負載中的向量索引。啟用後,向量輔助功能會使用向量規格自動調整向量索引或搜尋查詢,並計算最佳資料庫和索引參數。可接受的值包括 TRUEFALSE

傳回值

傳回更新後的建議表,其中列出必須套用的建議,才能設定所要求的向量工作負載。每一列都是一項建議,其中包含可執行的 SQL 查詢,以及說明套用建議原因的詳細說明。您可以使用 apply_recommendation() 函式套用最佳化建議。

建議表格包含下列資料欄:

資料欄名稱 類型 說明
recommendation_id 文字 建議的 ID。系統會使用這個 ID 套用建議。
vector_spec_id 文字 與建議相關聯的向量規格 ID。
table_name 文字 與建議相關聯的資料表名稱。
schema_name 文字 包含指定資料表的結構定義名稱。
query 文字 可執行的 SQL 查詢,用於達成建議的結果。
recommendation 文字 建議的說明,包括套用建議後預期的結果。這個欄位也會顯示建議的原因和理由。您可以視需要使用這個脈絡調整查詢,然後重新產生建議。
applied 布林值 顯示是否已套用最佳化建議。
modified 布林值 顯示使用者是否已修改建議。
created_at 含時區的時間戳記 產生建議的時間。

vector_assist.get_recommendations

傳回與特定向量 spec_id 相關聯的建議。

函式

CREATE OR REPLACE FUNCTION vector_assist.get_recommendations (
    spec_id TEXT
)
RETURNS SETOF vector_assist.RECOMMENDATIONS;

參數

參數 是否必要 說明
spec_id 是否必要 取得指定向量 spec_id 的建議。

傳回值

傳回所要求建議的表格。

建議表格包含下列資料欄:

資料欄名稱 類型 說明
recommendation_id 文字 建議的 ID。系統會使用這個 ID 套用建議。
vector_spec_id 文字 與建議相關聯的向量規格 ID。
table_name 文字 與建議相關聯的資料表名稱。
schema_name 文字 包含指定資料表的結構定義名稱。
query 文字 可執行的 SQL 查詢,用於達成建議的結果。
recommendation 文字 建議的說明,包括套用建議後預期的結果。這個欄位也會顯示建議的原因和理由。您可以視需要使用這個脈絡調整查詢,然後重新產生建議。
applied 布林值 顯示是否已套用最佳化建議。
modified 布林值 顯示使用者是否已修改建議。
created_at 含時區的時間戳記 產生建議的時間。

vector_assist.apply_recommendation

使用 recommendation_id 套用單一建議。

函式

CREATE OR REPLACE FUNCTION vector_assist.get_recommendations (
    spec_id TEXT
)
RETURNS SETOF vector_assist.RECOMMENDATIONS;

參數

參數 是否必要 說明
recommenation_id 是否必要 要套用的向量建議 ID。

傳回值

傳回布林值,確認建議是否已順利套用,並將 vector_assist.RECOMMENDATIONS 資料表欄 applied 更新為 TRUE

如果向量輔助無法套用建議,則會在失敗時顯示錯誤訊息。

vector_assist.apply_spec

套用與特定向量 spec_id 或資料表名稱相關聯的所有建議。這個函式會檢查所有建議,並對每項建議執行 vector_assist.apply_recommendation 函式。

必須指定 spec_idtable_name 才能執行函式。

函式

CREATE OR REPLACE FUNCTION vector_assist.apply_spec(
    spec_id TEXT DEFAULT NULL,
    table_name TEXT DEFAULT NULL,
    schema_name TEXT DEFAULT NULL,
    column_name TEXT DEFAULT NULL -- text_column_name or vector_column_name
)
RETURNS BOOLEAN;

參數

參數 是否必要 說明
spec_id 選用 為指定向量套用所有建議 spec_id
table_name 選用 為指定資料表套用所有最佳化建議。
schema_name 選用 包含指定資料表的結構定義。
column_name 選用 如果資料表包含多個向量規格,則識別要使用的 text_column_namevector_column_name

傳回值

傳回布林值,確認是否已成功套用所有建議,並將 vector_assist.RECOMMENDATIONS 表格資料欄 applied 中的所有建議值設為 TRUE

如果向量輔助無法套用建議,則會在失敗時顯示錯誤訊息。

vector_assist.modify_recommendation

修改特定建議的查詢,並將相關建議的 vector_assist.RECOMMENDATIONS 表格中的 modified 欄位設為 TRUE

函式

CREATE OR REPLACE FUNCTION vector_assist.modify_recommendation(
    recommendation_id TEXT,
    modified_query TEXT
)
RETURNS BOOLEAN;

參數

參數 是否必要 說明
recommendation_id 是否必要 要修改的建議 ID。
modified_query 是否必要 使用者修改的建議 SQL 查詢。

傳回值

傳回布林值,確認建議是否已成功更新,並將 vector_assist.RECOMMENDATIONS 資料表欄 modified 設為 TRUE

如果向量輔助無法更新建議,就會在失敗時顯示錯誤訊息。

vector_assist.generate_query

根據定義的向量規格和搜尋參數,產生最佳化向量搜尋查詢。如果適用,這個函式可能會調整 ef_search 值,以符合設定的 target_recall

函式

CREATE OR REPLACE FUNCTION vector_assist.generate_query(
    spec_id TEXT DEFAULT NULL,
    table_name TEXT DEFAULT NULL,
    schema_name TEXT DEFAULT NULL,
    column_name TEXT DEFAULT NULL, -- text_column_name or vector_column_name of the spec
    search_text TEXT DEFAULT NULL,
    search_vector VECTOR DEFAULT NULL, -- e.g. '[1.0,2.0,3.0]'::vector
   output_column_names TEXT[] DEFAULT NULL, -- Columns to retrieve, NULL for SELECT *
    top_k INT DEFAULT NULL,
    filter_expressions TEXT[] DEFAULT NULL,
    target_recall FLOAT DEFAULT NULL, -- Inherited from spec, can be overridden
    iterative_index_search BOOL DEFAULT NULL
)
RETURNS TEXT; -- Returns the text representing the search query

參數

參數 是否必要 說明
spec_id 選用 指定要產生查詢的 spec_id
table_name 選用 如果未提供 spec_id,請指定要產生搜尋查詢的資料表名稱。如果表格包含多個規格,參數會傳回錯誤。
column_name 選用 如果未提供 spec_id,請指定要產生搜尋查詢的資料欄名稱。如果資料欄包含多個規格,參數就會傳回錯誤。column_name 可能是 text_column_namevector_column_name
output_column_name 選用 要在輸出查詢中擷取的資料欄名稱。如要擷取所有資料欄,請將這個參數設為 NULL
search_text 選用 要生成嵌入的搜尋文字。需要向量規格中的 embedding_model。嵌入內容是使用規格中的模型產生。您只能設定 search_textsearch_vector 參數。
search_vector 選用 搜尋查詢的向量。您只能設定 search_textsearch_vector 參數
top_k 選用 要傳回的最近鄰點數量。
filter_expressions 選用 要在搜尋查詢中套用的篩選器運算式。篩選器可以套用至表格中的欄位,例如價格 < 100。
iterative_index_search 選用 設定是否要對經過篩選的查詢執行疊代索引搜尋。這個參數會覆寫向量規格中的設定。
target_recall 選用 僅適用於搜尋查詢的目標召回率。這個參數會覆寫向量規格中的設定,並調整 ef_search

傳回值

傳回包含指定參數向量搜尋查詢的文字。您可以執行這項查詢,或儲存查詢以便日後執行。

vector_assist.evaluate_query_recall

評估指定查詢的向量索引召回率。這項函式會使用 JSON 字串中的資料庫和索引設定做為輸入內容。

函式

CREATE OR REPLACE FUNCTION vector_assist.evaluate_query_recall(
  IN ann_query text,
  IN vector_search_configurations json DEFAULT NULL,
  OUT recall float,
  OUT ann_execution_time float,
  OUT ground_truth_execution_time float,
  OUT index_type text)
RETURNS RECORD

參數

參數 是否必要 說明
ann_query 是否必要 需要評估召回率的 SQL 查詢。這項查詢應為 pgvector ANN 查詢。
vector_search_configurations 選用 可為 ANN 查詢設定的設定。這個參數必須採用 JSON 格式。

傳回值

傳回資料表,評估指定查詢的向量索引召回率。

表格包含下列各欄:

資料欄名稱 類型 說明
recall 浮點值 索引傳回的向量百分比,這些向量是真正的最近鄰。這項指標可用於量化搜尋品質。 您可以使用這個函式調整參數,傳回預期的向量查詢召回結果。
ann_execution_time 浮點值 使用索引掃描執行向量查詢所需的時間。
ground_truth_execution_time 浮點值 查詢使用依序掃描執行所需的時間。

範例

以下範例會評估 HNSW 索引的召回率,並覆寫 HNSW.ef_search 設定參數:

SELECT * FROM vector_assist.evaluate_query_recall(
  ann_query => 'SELECT id FROM items ORDER BY embedding <=> ''[1,2,3]'' LIMIT 10',
  vector_search_configurations => '{"hnsw.ef_search": 30}'
);