使用向量辅助

AlloyDB for PostgreSQL 中的向量辅助功能提供了一个声明式 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:一个布尔值,用于指定向量辅助功能是否调优工作负载中的向量索引。默认值为 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。

如需一起应用所有建议,请使用 spec_id 或 table_name 参数运行 vector_assist.apply_spec 函数:

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_expression => '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 函数:

SELECT vector_assist.list_specs(
  spec_id => 'SPEC_ID',
  table_name => 'TABLE_NAME'
);

替换以下参数:

  • (可选)SPEC_ID:您要使用的向量规范的 ID。
  • TABLE_NAME:您用于定义向量规范的表的名称。

后续步骤