简介
作为一项全托管服务,腾讯云向量存储桶大幅简化了使用向量检索技术的难度。本文介绍如何快速实现从数据准备到向量检索的完整应用流程,包含了四个主要步骤:创建向量存储桶、创建向量索引、上传向量数据、执行向量检索。
准备工作
开通 COS 服务
申请邀测资格
服务角色授权
完成 Python SDK 的配置
操作步骤
步骤1:创建向量存储桶
我们需要创建一个用于存放向量数据的存储桶。
1. 在 对象存储控制台 左侧导航栏中单击存储桶列表,进入存储桶列表页。
2. 选择向量桶列表页签,点击创建向量桶,输入以下配置信息,其他配置保持默认即可。
名称:输入存储桶名称。名称设置后不可修改。如 examplebucket。
所属地域:存储桶所属地域,如广州地域。
服务端加密:默认是不加密,此处选择“SSE-COS”。
3. 单击创建,即可创建完成。
步骤2:创建向量索引
向量存储桶创建成功后,需要在桶内创建一个向量索引。索引是存储和检索向量数据的基本单元。
1. 在 对象存储控制台 左侧导航栏中单击存储桶列表,进入存储桶管理页。
2. 单击向量存储桶,在向量存储桶列表中,单击刚才创建的存储桶,进入向量桶详情页。
3. 单击左侧的索引列表,进入索引列表页。
4. 单击创建向量索引,输入以下配置信息,其他配置保持默认即可。
索引名称:输入索引的自定义名称,该名称在存储桶内唯一,这里输入 idx-dim3。
向量数据类型:当前仅支持 float32 类型,保持默认即可。
向量维度:设置向量的维度大小,范围为1-4096,后续所有上传到该索引的向量都必须与此维度保持一致,这里输入3。
距离度量:当前支持欧氏距离和余弦距离两种,这里保持默认选择“欧氏距离”。
非过滤元数据:此处不涉及。
5. 单击创建,即可创建完成。
步骤3:上传向量数据
当前不支持在控制台上传向量数据,您可以使用 REST API 或 COS SDK 完成上传操作。下面以 Python SDK 为例,演示如何向指定的向量索引中写入向量数据。关于 put_vectors 方法中涉及的字段参数说明,请参考 PutVectors。
# -*- coding=utf-8import sysimport osfrom pprint import pprintfrom qcloud_cos import CosConfigfrom qcloud_cos import CosVectorsClientimport logging# 正常情况日志级别使用 INFO,需要定位时可以修改为 DEBUG,此时 SDK 会打印和服务端的通信信息logging.basicConfig(level=logging.ERROR, stream=sys.stdout)# 1. 设置用户属性, 包括 secret_id, secret_key, region 等。Appid 已在 CosConfig 中移除,请在参数 Bucket 中带上 Appid。Bucket 由 BucketName-Appid 组成secret_id = os.getenv("COS_VECTORS_SECRET_ID") # 用户的 SecretId,建议使用子账号密钥,授权遵循最小权限指引,降低使用风险。子账号密钥获取可参见 https://cloud.tencent.com/document/product/598/37140secret_key = os.getenv("COS_VECTORS_SECRET_KEY") # 用户的 SecretKey,建议使用子账号密钥,授权遵循最小权限指引,降低使用风险。子账号密钥获取可参见 https://cloud.tencent.com/document/product/598/37140region = 'ap-guangzhou' # 替换为用户的 region,已创建桶归属的 region 可以在控制台查看,https://console.cloud.tencent.com/cos5/buckettoken = None # 如果使用永久密钥不需要填入 token,如果使用临时密钥需要填入,临时密钥生成和使用指引参见 https://cloud.tencent.com/document/product/436/14048scheme = 'https' # 指定使用 http/https 协议来访问 COS,默认为 https,可不填config = CosConfig(Region=region,SecretId=secret_id,SecretKey=secret_key,Scheme=scheme,Domain="vectors.ap-guangzhou.coslake.com",SignHost=False)client = CosVectorsClient(config)# 插入向量resp = client.put_vectors(Bucket="examplebucket-125000000",Index="idx-dim3",Vectors=[{'key': 'vector1','data': {'float32': [0.1, 0.2, 0.3],},'metadata': {'key1': 'value1','key2': 'value2','nfkey1': 'nfvalue1'}},{'key': 'vector2','data':{'float32':[0.4,0.5,0.6]},'metadata':{'key1':'value11','key2':'value22','nfkey2':'nfvalue22'}}])print(resp)
步骤4:向量相似度检索
完成向量数据上传后,就可以执行向量检索了。当前不支持在控制台进行检索操作,一般建议在应用程序中通过 REST API 或 SDK 的方式,执行向量检索操作,快速定位目标数据。
下面以 Python SDK 为例,演示如何对目标向量执行相似性检索,获取相似度最高的且 key1 字段不为 "unknown"的前 5 条数据。关于 query_vectors 方法中涉及的字段参数说明,请参考 QueryVectors。
# -*- coding=utf-8import sysimport osfrom pprint import pprintfrom qcloud_cos import CosConfigfrom qcloud_cos import CosVectorsClientimport logging# 正常情况日志级别使用 INFO,需要定位时可以修改为 DEBUG,此时 SDK 会打印和服务端的通信信息logging.basicConfig(level=logging.ERROR, stream=sys.stdout)# 1. 设置用户属性, 包括 secret_id, secret_key, region 等。Appid 已在 CosConfig 中移除,请在参数 Bucket 中带上 Appid。Bucket 由 BucketName-Appid 组成secret_id = os.getenv("COS_VECTORS_SECRET_ID") # 用户的 SecretId,建议使用子账号密钥,授权遵循最小权限指引,降低使用风险。子账号密钥获取可参见 https://cloud.tencent.com/document/product/598/37140secret_key = os.getenv("COS_VECTORS_SECRET_KEY") # 用户的 SecretKey,建议使用子账号密钥,授权遵循最小权限指引,降低使用风险。子账号密钥获取可参见 https://cloud.tencent.com/document/product/598/37140region = 'ap-guangzhou' # 替换为用户的 region,已创建桶归属的 region 可以在控制台查看,https://console.cloud.tencent.com/cos5/buckettoken = None # 如果使用永久密钥不需要填入 token,如果使用临时密钥需要填入,临时密钥生成和使用指引参见 https://cloud.tencent.com/document/product/436/14048scheme = 'https' # 指定使用 http/https 协议来访问 COS,默认为 https,可不填config = CosConfig(Region = region,SecretId = secret_id,SecretKey = secret_key,Scheme = scheme,Domain = "vectors.ap-guangzhou.coslake.com",SignHost = False)client = CosVectorsClient(config)# 查询向量resp, data = client.query_vectors(Bucket = "examplebucket-125000000",Index ="idx-dim3",QueryVector = {"float32":[0,0,0]},TopK =5,Filter ={'key1':{'$ne':'unknown'}},ReturnDistance = True,ReturnMetaData = True)print(resp)print(data)