向量Bucket快速入门

快速实现从数据准备到向量检索的完整应用流程,包含四个核心步骤:创建向量 Bucket、创建向量索引、上传向量数据、执行向量检索。

在开始之前,请确保您已完成以下准备:

  • 开通OSS服务:已开通OSS服务

  • 获取邀测资格:向量Bucket目前处于邀测阶段。请前往向量Bucket控制台申请使用资格。目前支持 华南1(深圳) 和 华北2(北京) 地域。

步骤一:创建向量Bucket

创建一个向量Bucket,作为存储所有向量数据和索引的容器。

  1. 向量Bucket页面,单击创建向量Bucket

  2. 配置Bucket信息:

    • 向量 Bucket 名称:为Bucket指定一个同主账号在同地域内全局唯一的名称。命名规则:3-32个字符,仅包含小写字母、数字和短横线(-),且不能以短横线开头或结尾。

    • 地域:选择您业务所在的地域,例如“华南1(深圳)”。

  3. 单击确定,完成创建。

步骤二:创建向量索引

Bucket创建成功后,需要在其内部创建一个向量索引。索引定义了向量的结构(如维度)和检索方式(如距离度量),是存储和查询向量数据的基础。

  1. 向量Bucket页面,单击已创建的向量Bucket名称。

  2. 索引列表页面,单击创建索引表

  3. 配置索引参数:

    • 索引表名称:为索引指定一个在Bucket内唯一的名称。命名规则:1-63个字符,由字母和数字组成,且首字母必须为英文字母。

    • 向量数据类型:默认为float32(32位浮点型)。

    • 向量维度:设置向量的维度大小(例如128),范围为1-4096。后续所有上传到该索引的向量都必须与此维度保持一致。

    • 距离度量函数:根据业务场景选择距离计算方式。

      • 欧氏距离:空间中两点间的直线距离,适用于衡量数值差异。

      • 余弦距离:衡量两个向量在方向上的差异,适用于文本、图像等高维语义相似度计算。

  4. 单击确定,完成创建。

步骤三:上传向量数据

索引准备就绪后,下一步是将向量数据上传到指定的向量索引,以便后续进行检索。

  1. 在索引列表中,找到您刚创建的索引,单击其右侧的查看数据

  2. 在索引页面,单击向量数据插入

  3. 配置向量数据,可以同时添加多条向量数据:

    • 主键值:为向量设置唯一标识符。

    • 向量数据:输入向量数值数组,格式为用逗号分隔的数字。向量的维度(数值个数)必须与步骤二中设置的向量维度完全一致。

    • 元数据:可添加元数据信息,如类别、标题、时间戳等,可在检索中用作精确过滤条件。

  4. 单击确定完成数据插入。

步骤四:执行向量检索

完成数据准备后,整个流程的核心环节——向量检索便可以执行了。通常,会在自己的应用程序中通过SDK调用API,执行向量检索操作,快速定位目标数据。

以下Python SDK示例演示了如何检索与目标向量最相似、且type字段不为 "comedy" 或 "documentary" 的前 10 条数据。

import argparse
import alibabacloud_oss_v2 as oss
import alibabacloud_oss_v2.vectors as oss_vectors

parser = argparse.ArgumentParser(description="vector query vectors sample")
parser.add_argument('--region', help='The region in which the bucket is located.', required=True)
parser.add_argument('--bucket', help='The name of the bucket.', required=True)
parser.add_argument('--endpoint', help='The domain names that other services can use to access OSS')
parser.add_argument('--index_name', help='The name of the vector index.', required=True)
parser.add_argument('--account_id', help='The account id.', required=True)

def main():
    args = parser.parse_args()

    # Loading credentials values from the environment variables
    credentials_provider = oss.credentials.EnvironmentVariableCredentialsProvider()

    # Using the SDK's default configuration
    cfg = oss.config.load_default()
    cfg.credentials_provider = credentials_provider
    cfg.region = args.region
    cfg.account_id = args.account_id
    if args.endpoint is not None:
        cfg.endpoint = args.endpoint

    vector_client = oss_vectors.Client(cfg)

    query_filter = {
        "$and": [{
            "type": {
                "$nin": ["comedy", "documentary"]
            }
        }]
    }

    query_vector = {"float32": [0.1] * 128}

    result = vector_client.query_vectors(oss_vectors.models.QueryVectorsRequest(
        bucket=args.bucket,
        index_name=args.index_name,
        filter=query_filter,
        query_vector=query_vector,
        return_distance=True,
        return_metadata=True,
        top_k=10
    ))

    print(f'status code: {result.status_code},'
          f' request id: {result.request_id},'
          )

    if result.vectors:
        for vector in result.vectors:
            print(f'vector: {vector}')


if __name__ == "__main__":
    main()

后续步骤

向量 Bucket 的全流程操作均可通过控制台、OSS SDK、ossutil 或 直接发起API 调用完成。本快速入门仅展示上手最快的操作路径,完整配置与进阶用法见: