腾讯云向量数据库对接使用完全指南:从入门到生产级实践
在人工智能与大模型技术迅猛发展的今天,非结构化数据的处理与检索已成为企业智能化转型的核心命题。传统数据库擅长处理结构化数据与精确查询,但当面对文本语义搜索、图像相似度匹配、推荐系统等场景时,显得力不从心。向量数据库应运而生,它专门为存储、检索和分析多维向量数据而设计,能够以毫秒级延迟处理十亿级向量规模的相似性搜索。腾讯云向量数据库(Tencent Cloud VectorDB)是一款全自研的分布式数据库服务,支持多种索引类型和相似度计算方法,不仅能为大模型提供精准的外部知识库支持,还可广泛应用于推荐系统、自然语言处理、计算机视觉、智能客服等领域。本文将系统讲解腾讯云向量数据库的对接使用方法,从基础概念到生产级实践,帮助开发者快速上手。
需要先登录腾讯云控制台,点击:腾讯云控制台,还没有账号,点击:注册后再关联,已有账号点击:登录后再关联
一、向量数据库基础概念
1.1 什么是向量数据
在深入对接之前,有必要理解向量数据库的核心——向量数据本身。向量本质上是一组浮点数组成的数组,是原始数据(文本、图像、音频、视频等)经过机器学习模型(如Embedding模型)编码后的数学表示。例如,一段文本通过Embedding模型可以转化为一个768维或1536维的向量,向量在空间中的位置代表了该文本的语义信息。语义相近的文本,其向量在空间中的距离也相近。
1.2 向量数据库的工作原理
传统数据库如MySQL,查询方式主要是精确匹配或范围查询(SELECT ... WHERE ...)。而向量数据库的核心操作是近似最近邻(ANN,Approximate Nearest Neighbor)查询:给定一个查询向量,在数据库中快速找到与之最相似的Top K个向量。为了实现十亿级数据规模下的毫秒级响应,向量数据库采用了专门的索引结构(如HNSW、IVF等)来加速相似性搜索,而非逐一遍历比对。
1.3 腾讯云向量数据库的产品定位
腾讯云向量数据库是一款全托管、企业级的分布式数据库服务,具备以下核心特征:
- 全自研分布式架构:基于腾讯云自研的OLAMA引擎,支持分钟级实例创建,自动完成数据备份、版本管理等运维工作。
- 海量规模支持:单索引可支持十亿级向量规模,满足百万级QPS及毫秒级查询延迟。
- 多索引类型:支持HNSW、IVF_FLAT、IVF_PQ、FLAT等多种索引类型,适配不同性能与成本需求。
- Embedding自动向量化:内置Embedding功能,可直接传入原始文本,由数据库自动完成向量化转换。
- AI套件:提供一站式的文档解析、文本切分、向量化、内容检索解决方案。
二、创建向量数据库实例
2.1 前提条件
在开始对接之前,需要完成以下准备工作:
- 已注册腾讯云账号并完成实名认证。
- 已创建数据库实例所需的私有网络(VPC)与安全组。
2.2 购买实例
登录腾讯云向量数据库购买页,按照以下步骤创建实例:
- 选择计费模式:支持按量计费与预付费两种模式,新用户可按需选择。
- 选择地域:当前支持北京、上海、广州、成都、上海自动驾驶云、深圳金融、中国香港、新加坡、硅谷等地域。处于不同地域的云产品内网不通,新建后不能切换地域,请选择最靠近业务的地域。
- 配置规格信息:包括实例类型、部署模式、节点规格、节点数量、磁盘类型及容量等。
- 配置网络和安全组:在下拉列表分别选择已配置的私有网络及子网,并选择已有的安全组或自定义新安全组。
- 设置实例名称:仅支持长度不超过60的中文/英文/数字/-/_。
- 勾选服务条款后单击"立即购买",等待实例状态变为"运行中"即可使用。
2.3 获取连接信息
实例创建完成后,需要获取以下关键信息用于后续对接:
- 内网/外网访问地址:在实例详情页面的"网络信息"区域直接复制。内网访问需要确保客户端与实例在同一地域且同一VPC内;外网访问需手动配置白名单并开通外网功能。
- API密钥(API Key):在向量数据库控制台的"密钥管理"页面直接复制密钥。
三、网络连接配置
3.1 内网访问
内网访问是生产环境推荐的方式,具备更低延迟和更高的安全性。使用内网访问需满足以下条件:
- 客户端(如CVM)与向量数据库实例处于同一地域。
- 客户端与向量数据库实例处于同一VPC内。
- 安全组策略配置正确:在CVM安全组中配置出站规则,将向量数据库的IP及端口添加到出站规则中;在向量数据库安全组中配置入站规则,将CVM的IP及端口添加到入站规则中。
3.2 外网访问
本地开发或测试环境可以使用外网访问方式。需在向量数据库控制台手动开启外网功能,并配置IP白名单。外网访问的延迟相对较高,不建议在生产环境的高频场景中使用。
四、SDK对接:多语言接入方式
腾讯云向量数据库提供了Python、Java、Go、C++等多种语言的SDK,这些SDK基于HTTP协议将API封装成易于使用的函数或类。本章以最常用的Python SDK为例进行详细讲解,同时给出Java和Go的关键代码片段。
4.1 Python SDK对接
4.1.1 安装SDK
Python环境要求版本≥3.8。执行以下命令安装最新版本的向量数据库Python SDK:
pip3 install tcvectordb
如需使用稀疏向量功能,需升级至1.4.5或更高版本;如需使用Embedding文本与稀疏向量混合检索,则需升级至1.5.0或更高版本。
4.1.2 创建客户端连接
导入SDK模块后,创建RPCVectorDBClient对象与向量数据库服务器建立连接:
import tcvectordb
from tcvectordb.model.enum import FieldType, IndexType, MetricType, ReadConsistency, EmbeddingModel
from tcvectordb.model.index import Index, VectorIndex, FilterIndex, HNSWParams
from tcvectordb.model.collection import Embedding
from tcvectordb.model.document import Document, SearchParams, Filter
# 创建客户端连接
client = tcvectordb.RPCVectorDBClient(
url='http://10.0.X.X:80', # 替换为实例的访问地址
username='root',
key='eC4bLRy2va******************************', # 替换为API密钥
read_consistency=ReadConsistency.EVENTUAL_CONSISTENCY,
timeout=30
)
参数说明:
- url:实例的内网或外网访问地址,格式为 http://IP:端口。
- username:固定为"root"。
- key:从控制台密钥管理页面获取的API密钥。
- read_consistency:读取一致性级别,可选STRONG_CONSISTENCY(强一致性)或EVENTUAL_CONSISTENCY(最终一致性)。
- timeout:请求超时时间,单位为秒。
4.1.3 创建数据库
通过create_database()接口创建数据库:
# 创建数据库
db = client.create_database(database_name='db_demo')
# 查询所有数据库
databases = client.list_databases()
for db in databases:
print(db.database_name)
4.1.4 创建集合(Collection)与索引
集合类似于传统数据库中的表,是向量数据存储的基本单元。创建集合时需要定义向量索引和标量字段索引:
# 定义索引结构
index = Index(
FilterIndex(name='id', field_type=FieldType.String, index_type=IndexType.PRIMARY_KEY),
FilterIndex(name='category', field_type=FieldType.String, index_type=IndexType.FILTER),
VectorIndex(
name='vector',
dimension=768, # 向量维度,需与Embedding模型输出维度一致
index_type=IndexType.HNSW,
metric_type=MetricType.COSINE,
params=HNSWParams(m=16, efconstruction=200)
)
)
# 创建集合
collection = db.create_collection(
name='doc_embeddings',
shard=1,
replicas=1,
description='文档向量集合',
index=index
)
索引配置关键参数说明:
- dimension:向量维度,必须与所使用的Embedding模型输出维度一致。
- index_type:索引类型,可选HNSW、IVF_FLAT、IVF_PQ、FLAT等。
- metric_type:相似度计算方法,可选COSINE(余弦相似度)、IP(内积)、L2(欧氏距离)等。
- HNSWParams:HNSW索引的参数,m控制每个节点的最大连接数,efconstruction控制构建时的动态候选列表大小。
4.1.5 插入向量数据
插入数据时,可以直接传入已生成的向量,也可以利用Embedding功能直接传入原始文本:
# 方式一:直接传入向量数据
documents = [
Document(
id='doc_001',
vector=[0.12, -0.34, 0.56, ...], # 768维向量
category='技术文档'
),
Document(
id='doc_002',
vector=[0.78, -0.21, 0.43, ...],
category='产品手册'
)
]
collection.upsert(documents)
# 方式二:利用Embedding功能,直接传入原始文本
# 需在创建集合时配置Embedding参数
embedding_collection = db.create_collection(
name='doc_texts',
shard=1,
replicas=1,
description='文本向量集合',
index=index,
embedding=Embedding(
model=EmbeddingModel.BGE_BASE_ZH, # 选择Embedding模型
field='text' # 指定文本字段名
)
)
# 直接传入原始文本,数据库自动完成向量化
text_documents = [
Document(
id='text_001',
text='腾讯云向量数据库是一款全自研的分布式数据库服务',
category='技术文档'
),
Document(
id='text_002',
text='向量数据库支持HNSW、IVF等多种索引类型',
category='产品手册'
)
]
embedding_collection.upsert(text_documents)
4.1.6 相似性检索
执行相似性搜索是向量数据库最核心的操作:
# 基于向量检索
search_vector = [0.15, -0.30, 0.52, ...] # 查询向量
results = collection.search(
vectors=[search_vector],
limit=5, # 返回Top K个结果
output_fields=['id', 'category'] # 指定返回的标量字段
)
for result in results:
print(f"ID: {result['id']}, 相似度: {result['score']}, 类别: {result['category']}")
# 基于文本检索(需使用Embedding集合)
text_results = embedding_collection.search(
content='向量数据库有哪些索引类型', # 直接输入文本
limit=5
)
# 带标量过滤的检索
filter_expr = Filter('category="技术文档"')
filtered_results = collection.search(
vectors=[search_vector],
limit=5,
filter=filter_expr
)
4.2 Java SDK对接
Java SDK的对接方式与Python类似,同样基于HTTP协议:
import com.tencent.tcvectordb.client.RPCVectorDBClient;
import com.tencent.tcvectordb.model.*;
// 创建客户端连接
ConnectParam connectParam = ConnectParam.newBuilder()
.withUrl("http://10.0.X.X:80")
.withUsername("root")
.withKey("eC4bLRy2va******************************")
.withTimeout(30)
.build();
VectorDBClient client = new RPCVectorDBClient(
connectParam,
ReadConsistencyEnum.EVENTUAL_CONSISTENCY
);
// 创建数据库
Database db = client.createDatabase("db_demo");
// 创建集合
Index index = Index.newBuilder()
.addFilterIndex("id", FieldType.String, IndexType.PRIMARY_KEY)
.addFilterIndex("category", FieldType.String, IndexType.FILTER)
.addVectorIndex("vector", 768, IndexType.HNSW, MetricType.COSINE,
new HNSWParams(16, 200))
.build();
Collection collection = db.createCollection(
"doc_embeddings", 1, 1, "文档向量集合", index
);
4.3 Go SDK对接
Go SDK的使用方式如下:
package main
import (
"context"
"time"
"github.com/tencent/vectordatabase-sdk-go/tcvectordb"
)
func main() {
defaultOption := &tcvectordb.ClientOption{
Timeout: time.Second * 30,
MaxIdldConnPerHost: 2,
IdleConnTimeout: time.Minute,
ReadConsistency: tcvectordb.EventualConsistency,
}
client, err := tcvectordb.NewRpcClient(
"http://10.0.X.X:80",
"root",
"eC4bLRy2va******************************",
defaultOption,
)
if err != nil {
panic(err)
}
// 创建数据库
ctx := context.Background()
db, _ := client.CreateDatabase(ctx, "db_demo")
}
五、HTTP API直接调用
除了使用SDK,腾讯云向量数据库也支持通过HTTP API直接进行数据操作。API的请求要素包括请求方法(GET/POST)、鉴权方式(通过account和api_key参数)、数据库服务的URI地址以及JSON格式的消息体。
API的URL拼接格式为:
http://{实例内网IP地址}:{实例网络端口}/{接口路径}
主要API接口列表:
| 接口层级 | 接口名 | 接口含义 | 请求方式 |
|---|---|---|---|
| Database | /database/create | 创建Base类数据库 | POST |
| Database | /database/drop | 删除Base类数据库 | POST |
| Database | /database/list | 查询所有数据库 | GET |
| Collection | /collection/create | 创建集合 | POST |
| Collection | /collection/drop | 删除集合 | POST |
| Collection | /collection/list | 查询集合 | POST |
| Document | /document/search | 相似性检索 | POST |
使用curl调用API的示例:
# 查询所有数据库
curl -X GET "http://10.0.X.X:80/database/list?account=root&api_key=xxx"
# 创建集合(POST请求,JSON格式)
curl -X POST "http://10.0.X.X:80/collection/create?account=root&api_key=xxx" \
-H "Content-Type: application/json" \
-d '{
"database": "db_demo",
"collection": "doc_embeddings",
"shard": 1,
"replicas": 1,
"index": {
"vector": {
"name": "vector",
"dimension": 768,
"index_type": "HNSW",
"metric_type": "COSINE",
"params": {"m": 16, "efconstruction": 200}
}
}
}'
六、索引类型深度解析
索引类型的选择直接影响检索性能、内存占用和成本,是向量数据库使用中最重要的决策之一。
6.1 HNSW索引
HNSW(Hierarchical Navigable Small World)是基于图算法的索引,通过构建多层导航图来实现高效近似最近邻搜索。HNSW索引在检索性能与召回精度之间达到了最佳平衡,适用于大多数线上业务场景。HNSW支持float32、float16、bfloat16三种数据类型。关键参数:
- M:每个节点的最大连接数,值越大召回率越高但内存占用也越大,通常设为16-64。
- efConstruction:构建索引时的动态候选列表大小,值越大索引质量越高但构建时间越长,通常设为100-500。
6.2 IVF系列索引
IVF(Inverted File)系列索引基于聚类算法,将高维向量空间划分为多个聚类,并为每个聚类构建倒排文件。IVF系列以可控的精度损失换取高速检索与更低的内存成本,适用于超大规模数据场景。主要包括:
- IVF_FLAT:最基础的IVF实现,存储原始向量,检索精度高但内存占用较大。
- IVF_PQ:结合乘积量化(Product Quantization),大幅压缩向量存储空间,适用于海量数据且内存有限的场景。
关键参数:
- nlist:聚类数量,值越大检索精度越高但检索速度越慢。
6.3 索引选型建议
根据业务场景选择索引类型:
- 低延迟、高召回场景(如实时搜索、在线推荐):优先选择HNSW索引,通过调整M和efConstruction参数平衡性能与精度。
- 高吞吐、海量数据场景(如离线分析、大规模知识库):使用IVF_FLAT或IVF_PQ,增大nlist减少搜索范围。
- 混合负载场景:腾讯云向量数据库支持同时部署HNSW+IVF混合索引,热数据使用HNSW保障低延迟,温数据使用IVF平衡资源消耗。
七、Embedding自动向量化
Embedding功能是腾讯云向量数据库的一大特色,它内置了多种Embedding模型,能够自动将原始文本转换为向量数据。这一功能大幅降低了向量数据库的使用门槛,开发者无需自行调用外部Embedding模型即可完成向量化。
使用Embedding功能时,在创建集合时配置Embedding参数:
from tcvectordb.model.collection import Embedding
# 创建带Embedding的集合
collection = db.create_collection(
name='auto_embedding_collection',
shard=1,
replicas=1,
index=index,
embedding=Embedding(
model=EmbeddingModel.BGE_BASE_ZH, # 可选模型:BGE_BASE_ZH、M3E_BASE等
field='text' # 指定需要向量化的文本字段
)
)
# 插入时直接传入原始文本,自动完成向量化
collection.upsert([
Document(id='1', text='向量数据库是AI时代的重要基础设施'),
Document(id='2', text='HNSW索引基于图算法实现高效近似搜索')
])
# 检索时也直接传入文本,自动向量化后执行相似性搜索
results = collection.search(content='什么是向量数据库', limit=5)
八、混合检索
腾讯云向量数据库支持稠密向量与稀疏向量相结合的混合检索方式,通过双路检索整体提升RAG应用的效果。稠密向量擅长捕捉语义相似性,而稀疏向量擅长关键词匹配,两者结合可以实现更精准的检索结果。
使用混合检索需要升级Python SDK至1.5.0或更高版本。腾讯云向量数据库提供了Python、Java、Go三种语言的稀疏向量生成工具。
九、AI套件:一站式文档检索
AI套件是腾讯云向量数据库提供的一站式文档检索解决方案,包含自动化文档解析、信息补充、向量化、内容检索等能力。用户仅需上传Markdown、PDF、Word、PPT等格式的原始文档,向量数据库将自动完成文本切分、向量化、索引构建等一系列操作,数分钟内即可快速构建专属知识库。
AI套件的核心能力:
- 文档解析:支持PDF(含图文)、Word、PPT、Markdown、TXT等多种格式。其中Markdown类型文件最大限制为1MB,其余类型最大限制为100MB。
- 文本切分:自动将长文档切分为适合向量化的文本块。
- 向量化:自动调用Embedding模型将文本块转换为向量。
- 检索优化:支持相似度计算与词级别精排,最终返回排名靠前的Top K条数据及其上下文内容。
十、与主流AI框架集成
10.1 LangChain集成
腾讯云向量数据库与LangChain框架深度兼容,支持标准化向量检索接口:
from langchain.vectorstores import TencentCloudVectorDB
# 创建向量存储实例
db = TencentCloudVectorDB(
endpoint="https://vectordb.tencentcloudapi.com",
api_key="xxx",
index_id="xxx"
)
# 执行相似性搜索
docs = db.similarity_search("量子计算基础", k=5)
10.2 Dify集成
Dify是开源智能体编排平台,已原生支持腾讯云向量数据库。配置方式是在Dify的.env配置文件中设置相关参数:
VECTOR_STORE=tencent
TENCENT_VECTOR_DB_URL=your-instance-url
TENCENT_VECTOR_DB_API_KEY=your-api-key
TENCENT_VECTOR_DB_DATABASE=dify_db
配置完成后,在Dify控制台新建知识库时选择"腾讯云向量数据库"作为存储,上传文档后选择Embedding模型(推荐腾讯云混元Embedding),Dify会自动完成分块、向量化并存入向量库。
十一、最佳实践与性能优化
11.1 索引参数调优
根据数据规模和业务需求调整索引参数:
- HNSW索引:对于追求极致低延迟的场景,适当增大M(如32-64)和efConstruction(如200-500);对于内存敏感的场景,适当减小M(如8-16)。
- IVF索引:数据量越大,nlist应设置越大(通常为向量总数的平方根级别),以平衡检索精度与速度。
11.2 网络与部署建议
- 生产环境优先使用内网访问,避免外网带来的延迟和带宽成本。
- 确保客户端CVM与向量数据库实例处于同一地域和同一VPC内。
- 合理配置安全组规则,仅开放必要的IP访问。
11.3 成本优化
- 根据数据访问频率选择合适的存储类型:热数据使用内存索引(HNSW/IVF),冷数据可使用磁盘索引(DISK_FLAT)。
- 利用IVF_PQ等量化索引技术压缩向量存储空间,降低存储成本。
- 按量计费模式下,根据实际QPS合理规划实例规格,避免资源浪费。
11.4 数据一致性选择
读取一致性支持两种模式:
- 强一致性(STRONG_CONSISTENCY):每次读取都能读到最新写入的数据,适用于对数据实时性要求极高的场景,但会带来一定的性能开销。
- 最终一致性(EVENTUAL_CONSISTENCY):读取可能有一定延迟但性能更优,适用于大多数RAG和推荐系统场景。
十二、典型应用场景
12.1 RAG知识库问答系统
RAG(检索增强生成)是向量数据库最典型的应用场景之一。通过将企业私有文档存入向量数据库,大模型可以在生成回答前先检索相关文档片段,从而克服幻觉问题并接入私有知识。腾讯云向量数据库+DeepSeek/混元大模型的组合方案已被广泛应用于智能客服、企业知识库等场景。
12.2 推荐系统
在电商推荐场景中,向量数据库通过多模态特征向量化技术,将用户行为与商品特征映射到同一向量空间,实现高效的相似性匹配。腾讯云向量数据库在电商场景中实测千万级数据检索延迟可控制在50ms以内。
12.3 智能搜索与问答
向量数据库支持基于语义的搜索,而非传统的关键词匹配。用户用自然语言提问,系统将问题向量化后在数据库中检索语义最相似的文档。结合大模型生成能力,可实现精准的智能问答。
十三、常见问题解答
问1:腾讯云向量数据库支持哪些编程语言的SDK?
答:目前官方提供Python、Java、Go、C++四种语言的SDK。这些SDK均基于HTTP协议,将API封装成易于使用的函数或类。
问2:如何选择HNSW和IVF索引?
答:HNSW适合对检索延迟和召回率要求较高的线上业务场景,参数调优灵活。IVF系列适合超大规模数据场景,以可控的精度损失换取更低的内存成本和更高的吞吐量。对于混合负载,腾讯云向量数据库支持同时部署两种索引。
问3:Embedding功能如何工作?是否需要额外调用外部模型?
答:Embedding功能内置在向量数据库中,无需额外调用外部模型。创建集合时配置Embedding参数后,插入和检索时直接传入原始文本即可,数据库自动完成向量化转换。
问4:外网访问和内网访问有什么区别?
答:内网访问要求客户端与向量数据库实例在同一地域且同一VPC内,延迟更低、安全性更高,是生产环境推荐的方式。外网访问需手动开启并配置IP白名单,适用于本地开发和测试环境。
问5:AI套件支持哪些文件格式?文件大小有限制吗?
答:AI套件支持Markdown、PDF、Word、PPT、TXT等格式。其中Markdown类型文件最大限制为1MB,其余类型最大限制为100MB。
问6:如何实现带标量过滤的向量检索?
答:在创建集合时为标量字段创建FilterIndex,检索时通过Filter表达式指定过滤条件。例如 Filter('category="技术文档"') 即可筛选出类别为"技术文档"的向量进行相似性搜索。




