腾讯云向量数据库全面对接指南:从零开始构建AI智能应用
一、向量数据库:AI时代的核心基础设施
随着大语言模型的爆发式增长,检索增强生成技术成为解决大模型幻觉和私有知识接入的关键方案。向量数据库作为RAG架构的核心组件,专门用于存储和查询高维向量数据,通过将文本、图像、音视频等非结构化数据转化为向量表示,实现高效相似性搜索。腾讯云向量数据库(Tencent Cloud VectorDB)是一款全托管的自研企业级分布式数据库服务,单索引支持千亿级向量规模,可达到百万级QPS及毫秒级查询延迟,不仅能为大模型提供外部知识库,还可广泛应用于推荐系统、自然语言处理等AI领域。
需要先登录腾讯云控制台,点击:腾讯云控制台,还没有账号,点击:注册后再关联,已有账号点击:登录后再关联
二、向量数据库的核心概念与架构
2.1 什么是向量数据
向量数据的典型结构是一个一维数组,其中的元素是数值(通常是浮点数)。这些数值表示对象或数据点在多维空间中的位置、特征或属性。例如,在自然语言处理中,一篇文章可以用一个词向量表示,每个维度表示该词在向量空间中的位置;在图像处理中,一张图片可以用一个像素向量表示,每个像素可以用三个数字表示其RGB值;在推荐系统中,一个用户可以用一个用户向量表示,每个维度可以表示不同的兴趣爱好或行为偏好。
2.2 数据库逻辑架构
腾讯云向量数据库采用分布式架构设计,核心逻辑层级包括:实例(Instance)为数据库服务的最高层级,对应一个独立的数据库服务进程;数据库(Database)类似于传统数据库中的命名空间,用于逻辑隔离不同业务的数据;集合(Collection)是存储向量数据的核心单元,包含多个文档(Document);文档是数据库中的最小数据单元,每个文档包含一个唯一的ID、一个向量字段以及可选的标量字段(用于过滤查询)。掌握这一逻辑架构,使用SDK与API接口时才能得心应手。
2.3 支持的索引类型
创建集合之前,必须为向量数据构建索引以提升检索效率。腾讯云向量数据库支持FLAT(暴力检索,适合小规模数据)、HNSW(基于图的层次化可导航小世界算法,检索快但内存消耗大)、IVF系列(基于倒排索引的聚类方法,适合大规模数据)等多种向量索引方式。索引类型的选择需要在召回精度、检索速度和内存占用之间权衡:HNSW提供亚毫秒级检索,适合高QPS在线业务;IVF在内存和速度之间取得平衡;FLAT精确度最高但速度最慢。对于多租户场景,容量增强版提供DISK_FLAT磁盘索引,通过磁盘存储大幅降低存储成本。
三、快速开始:控制台操作与实例创建
3.1 创建向量数据库实例
登录腾讯云控制台后搜索“向量数据库”,进入向量数据库产品页面。创建实例时需要选择地域(建议选择与业务服务器相同的地域以利用内网访问)、实例规格(入门型1核2GB即可满足开发测试需求)以及计费模式(包年包月适合长期稳定业务,按量计费适合波动性业务)。购买实例后,在控制台的实例详情页面可以获取内网IP地址和网络端口,同时需要在密钥管理页面生成API访问密钥。
3.2 网络配置与安全组设置
若通过腾讯云CVM内网访问向量数据库,需要确保CVM与向量数据库实例在同一VPC内,并在CVM安全组出站规则中添加向量数据库的IP及端口,同时在向量数据库安全组入站规则中添加CVM的IP地址及端口。如需在本地通过外网快速体验,可开启外网访问功能并配置白名单。
四、Python SDK完整对接实战
腾讯云向量数据库提供Python、Java、Go等多语言SDK及HTTP API接口,以下以Python为例进行完整演示。
4.1 安装SDK
pip3 install tcvectordb
4.2 创建客户端并连接数据库
import tcvectordb
from tcvectordb.model.enum import ReadConsistency
vdb_url = 'http://10.0.X.X:80'
vdb_key = 'your-api-key-here'
client = tcvectordb.RPCVectorDBClient(
url=vdb_url,
key=vdb_key,
username='root',
read_consistency=ReadConsistency.EVENTUAL_CONSISTENCY,
timeout=30
)
4.3 创建数据库和集合
from tcvectordb.model.index import Index, VectorIndex, FilterIndex, HNSWParams
from tcvectordb.model.enum import FieldType, IndexType, MetricType
# 创建数据库
db_name = 'test_db'
db = client.create_database(db_name)
# 定义索引结构
index = Index()
index.add(FilterIndex('id', FieldType.String, IndexType.PRIMARY_KEY))
index.add(VectorIndex(
name='vector',
dimension=768,
index_type=IndexType.HNSW,
metric_type=MetricType.COSINE,
params=HNSWParams(m=16, efconstruction=200)
))
index.add(FilterIndex('category', FieldType.String, IndexType.FILTER))
# 创建集合
coll_name = 'documents'
collection = db.create_collection(
name=coll_name,
shard=1,
replicas=1,
description='document vector collection',
index=index
)
4.4 插入向量数据
from tcvectordb.model.document import Document
documents = [
Document(
id='doc_001',
vector=[0.2123, 0.23, 0.213] + [0.0] * 765,
category='technology',
text='向量数据库技术介绍'
),
Document(
id='doc_002',
vector=[0.5123, 0.42, 0.113] + [0.0] * 765,
category='ai',
text='人工智能的发展历程'
)
]
result = client.upsert(
database_name=db_name,
collection_name=coll_name,
documents=documents,
build_index=True
)
print(f'插入成功,影响{len(documents)}条数据')
4.5 执行相似性检索
from tcvectordb.model.document import SearchParams
query_vector = [0.2123, 0.23, 0.213] + [0.0] * 765
results = client.search(
database_name=db_name,
collection_name=coll_name,
vectors=[query_vector],
params=SearchParams(ef=200),
limit=3,
output_fields=['text', 'category']
)
for doc in results[0]:
print(f'ID: {doc.id}, 相似度: {doc.score:.4f}, 文本: {doc.text}')
4.6 标量过滤检索
filtered_results = client.search(
database_name=db_name,
collection_name=coll_name,
vectors=[query_vector],
filter='category="technology"',
params=SearchParams(ef=200),
limit=5,
output_fields=['text']
)
五、Embedding功能:自动向量化接入
腾讯云向量数据库提供内置的Embedding功能,在创建Collection时配置Embedding模型后,插入、更新和相似性检索时可直接传入原始文本,数据库会自动将原始文本转换为对应的向量数据。当前支持多种Embedding模型:中文场景推荐bge-large-zh-v1.5(1024维)或bge-base-zh-v1.5(768维),多语言场景推荐BAAI/bge-m3(1024维,支持8K Token输入长度,但建议不超过2K Token以保证性能)。Embedding按Token数量计费,系统每小时进行一次结算。
from tcvectordb.model.collection_view import Embedding
# 开启Embedding的AI类数据库
db = client.create_ai_database(database_name='knowledge_db')
coll_view = db.create_collection_view(
name='docs',
embedding=Embedding(
enable_words_embedding=True,
model='bge-large-zh-v1.5'
)
)
# 直接上传原始文本文件
coll_view.load_and_split_text(local_file_path='./documents/')
# 直接使用文本进行检索
search_results = coll_view.search(
content='如何对接腾讯云向量数据库',
limit=3
)
六、混合检索:稠密向量与稀疏向量的双重优势
在实际的AI应用及搜索推荐等业务场景中,仅使用语义检索(稠密向量)容易对具体数字、编码、数学公式等不敏感,且存在语义过度泛化的问题。腾讯云向量数据库推出Hybrid Search混合检索架构,结合稠密向量的语义理解能力与稀疏向量的关键词精确匹配能力。稠密向量通过Embedding模型生成,支持多语言语义搜索,具备输入容错能力,可召回近义与关联内容;稀疏向量基于BM25算法通过倒排索引实现精确匹配,每个集合仅支持定义1个稀疏向量字段,每条稀疏向量最多支持1024个非空值。两路检索后通过加权排序或RRF(倒数排名融合)算法对结果进行重排序,最终返回综合最优的Top K条数据。该方案召回率较纯向量检索可提升30%以上。
from tcvectordb.model.document import AnnSearch, KeywordSearch, RRFRerank
# 安装稀疏向量工具包
# pip3 install tcvdb-text
from tcvdb_text.encoder import BM25Encoder
bm25 = BM25Encoder.default('zh')
texts = ['腾讯云向量数据库是一款全托管的自研企业级分布式数据库服务']
sparse_vectors = bm25.encode_texts(texts)
# 稠密向量+稀疏向量混合检索
search_results = client.hybrid_search(
database_name=db_name,
collection_name=coll_name,
ann=[AnnSearch(field_name='vector', data=query_vector, limit=10)],
match=[KeywordSearch(field_name='sparse_vector', data=sparse_vectors[0], limit=10)],
rerank=RRFRerank(k=60),
limit=5
)
七、AI套件:一站式文档检索解决方案
腾讯云向量数据库的AI套件提供完整的文档处理流水线,包含自动化文档解析、信息补充、向量化(Embedding)和索引构建等能力。用户仅需上传原始文档(支持PDF、Word、TXT、Markdown等格式),数分钟内即可快速构建专属知识库。AI套件支持在CollectionView上直接调用load_and_split_text方法上传单个或多个文档,文档会被自动分块、向量化并建立索引,当前暂不计费。
八、与LangChain及LlamaIndex框架集成
LangChain和LlamaIndex是目前最主流的AI应用开发框架,腾讯云向量数据库提供了深度的原生集成支持。以LangChain为例,集成步骤如下:首先安装langchain-community和tcvectordb;然后通过TencentVectorDB类初始化向量存储,配置连接参数(实例地址、API密钥);接着使用文档加载工具(如TextLoader)读取文本,通过嵌入模型(可选用腾讯云混元Embedding或HuggingFace的bge-small-zh)将文本块转为向量;调用add_texts方法将文本与向量存入数据库;最后构建RetrievalQA链,设置检索器为上述向量存储,实现基于语义检索的问答系统。LlamaIndex同样提供了TencentVectorDB的适配器,支持直接作为VectorStore接入。
# LangChain集成示例
# pip3 install langchain-community tcvectordb
from langchain_community.vectorstores import TencentVectorDB
from langchain_community.embeddings import HuggingFaceEmbeddings
embeddings = HuggingFaceEmbeddings(model_name='BAAI/bge-small-zh')
vector_store = TencentVectorDB(
url='http://10.0.X.X:80',
api_key='your-api-key',
database='test_db',
collection='documents',
embeddings=embeddings
)
vector_store.add_texts(['文本1', '文本2'])
results = vector_store.similarity_search('查询内容', k=3)
九、标准版与容量增强版选型建议
腾讯云向量数据库提供标准版和容量增强版两个产品版本。标准版采用内存索引方案,支持FLAT、HNSW、IVF系列索引,提供低延迟高性能查询,适合对延迟敏感的在线业务场景。容量增强版采用DISK_FLAT磁盘索引,向量数据存储在磁盘上而非内存中,专为多租户形态业务优化存储成本,副本数至少为2,分片数建议按预估总数据量每300万计算一个分片。容量增强版暂不支持与稀疏向量同时使用,且索引结构固定不支持修改。两个版本实例暂不支持互相切换类型,购买时需根据实际场景合理选择。如需数据迁移,可使用离线迁移工具实现集合到集合的数据迁移。
十、性能特点与计费模式
腾讯云向量数据库的内核源自自研向量引擎OLAMA,历经6年打磨,已支撑集团60+业务线,日均处理8500亿次检索请求。分布式架构支持单索引千亿级数据规模,平均QPS达2000+,延迟低于20ms,性能领先行业平均水平1.5倍。计费提供包年包月和按量计费两种模式,按量计费会冻结账户中一个小时的硬件费用并在每个整点结算,Embedding按Token数量单独计费。AI套件当前暂不计费,企业级应用可享受99.99%可用性SLA保障。
十一、常见问题与解答
问:连接向量数据库失败如何排查?
首先检查CVM和向量数据库是否在同一VPC内且内网互通;其次确认安全组入站和出站规则是否正确配置;最后验证API Key是否获取正确。如果使用外网访问,还需检查外网白名单配置。
问:如何选择适合业务的向量维度?
向量维度由Embedding模型决定,中文场景可选bge-large-zh-v1.5(1024维)或bge-base-zh-v1.5(768维)。高维向量表达能力强但存储和计算成本更高,低维向量更节省资源。中小型业务从768维开始足够,需更高精度场景可选1024维。
问:标准版和容量增强版如何选择?
对延迟敏感、需要毫秒级响应的在线业务选标准版;数据量大但对延迟要求不高、需要承载大量中小租户的多租户场景选容量增强版。
问:腾讯云向量数据库支持哪些检索方式?
支持向量检索(稠密向量相似性搜索)、关键字检索(稀疏向量精确匹配)、混合检索(稠密+稀疏+重排序)以及标量字段过滤检索。
问:如何提升向量检索的召回率?
推荐启用混合检索功能,结合稠密向量的语义理解和稀疏向量的关键词匹配,同时可调整检索的limit参数召回更多候选结果,再通过重排序筛选最优结果。
问:Embedding模型的Token数量如何控制?
建议将原始文本拆分后再传入Embedding模型,每次token数量控制在2K以内可获得最优性能与效果。长文本场景可选用BAAI/bge-m3模型,它支持8K Token输入。




