快速入门

最近更新时间:2026-01-21 18:08:51

我的收藏

简介

作为一项全托管服务,腾讯云向量存储桶大幅简化了使用向量检索技术的难度。本文介绍如何快速实现从数据准备到向量检索的完整应用流程,包含了四个主要步骤:创建向量存储桶、创建向量索引、上传向量数据、执行向量检索。

准备工作

开通 COS 服务

腾讯云控制台 中,搜索对象存储,进入对象存储控制台,按照界面提示开通 COS 服务。(如果您已开通,请跳过该步骤。)

申请邀测资格

当前向量存储桶处于邀测阶段,请 联系我们 申请邀测资格。

服务角色授权

向量存储桶使用了 COS 存储桶来管理底层数据文件,因此需要您进入 角色管理页面,授权向量存储桶的服务角色访问您的 COS 资源。

完成 Python SDK 的配置

部分示例中使用了 Python SDK 执行相关操作,因此需要提前完成 SDK 的环境配置与准备。向量存储桶跟 COS 使用相同的 SDK,请参考 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-8
import sys
import os
from pprint import pprint
from qcloud_cos import CosConfig
from qcloud_cos import CosVectorsClient
import 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/37140
secret_key = os.getenv("COS_VECTORS_SECRET_KEY") # 用户的 SecretKey,建议使用子账号密钥,授权遵循最小权限指引,降低使用风险。子账号密钥获取可参见 https://cloud.tencent.com/document/product/598/37140
region = 'ap-guangzhou' # 替换为用户的 region,已创建桶归属的 region 可以在控制台查看,https://console.cloud.tencent.com/cos5/bucket
token = None # 如果使用永久密钥不需要填入 token,如果使用临时密钥需要填入,临时密钥生成和使用指引参见 https://cloud.tencent.com/document/product/436/14048
scheme = '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-8
import sys
import os
from pprint import pprint
from qcloud_cos import CosConfig
from qcloud_cos import CosVectorsClient
import 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/37140
secret_key = os.getenv("COS_VECTORS_SECRET_KEY") # 用户的 SecretKey,建议使用子账号密钥,授权遵循最小权限指引,降低使用风险。子账号密钥获取可参见 https://cloud.tencent.com/document/product/598/37140
region = 'ap-guangzhou' # 替换为用户的 region,已创建桶归属的 region 可以在控制台查看,https://console.cloud.tencent.com/cos5/bucket
token = None # 如果使用永久密钥不需要填入 token,如果使用临时密钥需要填入,临时密钥生成和使用指引参见 https://cloud.tencent.com/document/product/436/14048
scheme = '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)