向量辅助参考信息

本页面详细介绍了所有可用的向量辅助函数,以及它们的必需参数和可选参数。

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 可选 要检索的用于计算召回率的 top-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 可选或必填 用于生成嵌入的 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 可选 要检索的用于计算召回率的 top-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}'
);