AlloyDB for PostgreSQL 中的 Vector Search 辅助功能提供了一个声明式 SQL 框架,可让您在实例上部署、调优和管理 Vector Search 工作负载。您可以定义 Vector Search 要求、生成并应用推荐的 SQL 配置,以及监控工作负载性能。如需详细了解向量辅助功能的运作方式,请参阅向量辅助功能概览。
准备工作
- 确认您的实例使用的是正确的维护版本。向量辅助功能需要最低维护版本号
POSTGRES_17.20260128.03_06。如需详细了解如何执行自助维护,请参阅执行自助维护。 在要使用的数据库中,使用以下命令启用向量辅助扩展程序:
CREATE EXTENSION vector_assist CASCADE;这会生成
vector_assist架构,供向量辅助功能使用。
使用向量辅助功能部署向量工作负载
如需使用向量辅助功能部署和管理向量工作负载,您必须执行以下操作:
定义向量规范
定义向量规范是使用向量辅助功能的第一步。根据向量工作负载的类型,用于定义向量规范的字段可能会有所不同。
例如,如果您想对表中的特定列启用语义搜索,请运行 vector_assist.define_spec 函数来定义向量规范:
SELECT
recommendation_id,
REGEXP_REPLACE(query, 'SET hnsw.ef_search TO \d+', 'SET hnsw.ef_search TO') AS query_1,
recommendation,
vector_spec_id,
table_name,
applied,
modified
FROM vector_assist.define_spec(
table_name => 'TABLE_NAME',
vector_column_name => 'VECTOR_COLUMN_NAME',
target_recall => TARGET_RECALL,
tune_vector_index => TUNE_INDEX
);
替换以下参数:
TABLE_NAME:要在向量工作负载中使用的表的名称。(可选)
VECTOR_COLUMN_NAME:要对其执行语义搜索的列。如果表中只有一列包含向量,vector_assist可以自动设置此列。如果有多个表包含向量,您必须指定要使用哪一列。(可选)
TARGET_RECALL:您希望向量辅助功能达到的目标召回率。如果指定,vector_assist会尝试不同的ef_search值,比较精确最近邻搜索中的召回率。vector_assist会将ef_search设置为提供最接近目标召回率的值。默认值为0.95。(可选)
TUNE_INDEX:布尔值,用于指定 Vector Assist 是否会调整工作负载中的向量索引。默认值为false,这意味着仅调整与搜索相关的参数 (ef_search),而不调整构建时间参数(m、ef_construction)。
如需查看向量规范的所有可用参数的完整列表,请参阅向量辅助函数参考文档。
运行查询以创建向量规范后,向量辅助功能会自动生成您必须运行才能部署向量工作负载的步骤(称为建议)。
查看向量辅助建议
如需查看向量辅助使用向量规范生成的建议,请运行 vector_assist.get_recommendations 函数:
SELECT vector_assist.get_recommendations(
spec_id => 'SPEC_ID'
);
将 SPEC_ID 替换为您要查看其建议的向量规范的规范 ID。如需获取可用向量规范的列表,请参阅列出向量规范。
vector_assist.get_recommendations 会返回一个名为 vector_assist.RECOMMENDATIONS 的表,其中包含所有建议。每条建议都存储在包含关联 spec_id 的表中。每条建议通常包含以下信息:
- 您需要运行的 SQL 查询
- 建议的详细说明
- 其他有助于解释建议的相关信息
应用向量辅助建议
您可以逐个或整体应用生成的建议。
如需应用特定建议,请运行 vector_assist.apply_recommendation 函数:
SELECT vector_assist.apply_recommendation(
recommendation_id => 'RECOMMENDATION_ID'
);
将 RECOMMENDATION_ID 替换为要从 vector_assist.RECOMMENDATIONS 表中应用的向量辅助建议的 ID。
如需同时应用所有建议,请运行 vector_assist.apply_spec 函数,并使用 spec_id 或 table_name 参数:
SELECT vector_assist.apply_spec(
spec_id => 'SPEC_ID'
);
将 SPEC_ID 替换为您要使用的向量规范的 ID。
您也可以视需要输入 schema_name 或 column_name 参数。
如需了解所有可用的查询参数,请参阅向量辅助功能参考文档。
应用向量辅助生成的建议后,向量索引即可供使用。
生成搜索查询
您可以使用向量辅助功能,根据已部署向量工作负载的向量规范和生成的向量索引,为这些工作负载构建经过优化的搜索查询。如需生成经过优化的搜索查询,请运行 vector_assist.generate_query 函数:
SELECT vector_assist.generate_query(
spec_id => 'SPEC_ID',
search_vector => 'SEARCH_VECTOR',
top_k => TOP_K,
target_recall => TARGET_RECALL,
filter_expressions => ARRAY['FILTER_EXPRESSION']
);
替换以下参数:
SPEC_ID:您要使用的规范的 ID。SEARCH_VECTOR:搜索查询的向量。例如[1, 2, 3]。(可选)
TOP_K:要返回的最近邻项的数量。如果未指定,则默认值为10。(可选)
TARGET_RECALL:您希望向量辅助功能达到的目标召回率。如果指定,vector_assist会尝试不同的ef_search值,比较精确最近邻搜索中的召回率。vector_assist会将ef_search设置为提供最接近目标召回率的值。(可选)
FILTER_EXPRESSION:搜索查询的任何过滤条件。例如,根据其他列进行过滤。
如需查看用于生成搜索查询的所有可用参数的完整列表,请参阅向量辅助函数参考文档。
此函数的输出会返回包含 SQL 查询的文本。您可以根据需要运行或保存此 SQL 查询。
列出向量规范
如果您需要列出表的现有向量规范,请运行 vector_assist.list_specs 函数,或使用 vector_assist.get_spec 按 ID 查看单个向量规范:
SELECT vector_assist.list_specs(
table_name => 'TABLE_NAME',
column_name => 'COLUMN_NAME'
);
替换以下参数:
TABLE_NAME:您用于定义向量规范的表的名称。(可选)
COLUMN_NAME:表中向量列的名称。如果省略,vector_assist.list_specs会返回在指定表上定义的所有向量规范。如需按 ID 检索特定向量规范,请调用SELECT vector_assist.get_spec(spec_id => 'SPEC_ID');。
后续步骤
- 详细了解向量辅助功能。
- 向量辅助函数参考文档。