快速实现从数据准备到向量检索的完整应用流程,包含四个核心步骤:创建向量 Bucket、创建向量索引、上传向量数据、执行向量检索。
在开始之前,请确保您已完成以下准备:
开通OSS服务:已开通OSS服务。
获取邀测资格:向量Bucket目前处于邀测阶段。请前往向量Bucket控制台申请使用资格。目前支持 华南1(深圳) 和 华北2(北京) 地域。
步骤一:创建向量Bucket
创建一个向量Bucket,作为存储所有向量数据和索引的容器。
在向量Bucket页面,单击创建向量Bucket。
配置Bucket信息:
向量 Bucket 名称:为Bucket指定一个同主账号在同地域内全局唯一的名称。命名规则:3-32个字符,仅包含小写字母、数字和短横线(-),且不能以短横线开头或结尾。
地域:选择您业务所在的地域,例如“华南1(深圳)”。
单击确定,完成创建。
步骤二:创建向量索引
Bucket创建成功后,需要在其内部创建一个向量索引。索引定义了向量的结构(如维度)和检索方式(如距离度量),是存储和查询向量数据的基础。
在向量Bucket页面,单击已创建的向量Bucket名称。
在索引列表页面,单击创建索引表。
配置索引参数:
索引表名称:为索引指定一个在Bucket内唯一的名称。命名规则:1-63个字符,由字母和数字组成,且首字母必须为英文字母。
向量数据类型:默认为
float32
(32位浮点型)。向量维度:设置向量的维度大小(例如
128
),范围为1-4096。后续所有上传到该索引的向量都必须与此维度保持一致。距离度量函数:根据业务场景选择距离计算方式。
欧氏距离:空间中两点间的直线距离,适用于衡量数值差异。
余弦距离:衡量两个向量在方向上的差异,适用于文本、图像等高维语义相似度计算。
单击确定,完成创建。
步骤三:上传向量数据
索引准备就绪后,下一步是将向量数据上传到指定的向量索引,以便后续进行检索。
在索引列表中,找到您刚创建的索引,单击其右侧的查看数据。
在索引页面,单击向量数据插入。
配置向量数据,可以同时添加多条向量数据:
主键值:为向量设置唯一标识符。
向量数据:输入向量数值数组,格式为用逗号分隔的数字。向量的维度(数值个数)必须与步骤二中设置的向量维度完全一致。
元数据:可添加元数据信息,如类别、标题、时间戳等,可在检索中用作精确过滤条件。
单击确定完成数据插入。
步骤四:执行向量检索
完成数据准备后,整个流程的核心环节——向量检索便可以执行了。通常,会在自己的应用程序中通过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 调用完成。本快速入门仅展示上手最快的操作路径,完整配置与进阶用法见: