坦白说,从当前AI应用落地的实际需求来看,检索增强生成(RAG)技术已成为解决大模型幻觉问题与私有知识库接入的主流方案,几乎没有替代选项。而向量数据库正是这一架构中最核心的基础组件——它专门用于存储和查询高维向量数据,能够将文本、图像等非结构化内容转化为向量表示,并高效检索出最相似的结果。
腾讯云向量数据库是一款全托管、自研的企业级分布式数据库,单索引可支撑千亿级向量规模,具备百万级QPS与毫秒级查询延迟。这样说可能有些抽象,换个角度理解:它不仅充当大模型的“外脑”,在推荐系统、自然语言处理等AI场景中,同样是核心应用领域。
好,话不多说,直接进入正题。
一、向量数据库的核心概念与架构
在查看代码之前,有几个基础概念需要先对齐。
1.1 什么是向量数据
向量数据的典型结构是一个一维数组,其中的元素均为数值(通常是浮点数)。这些数值代表某个对象在多维空间中的位置、特征或属性。举例来说:在自然语言处理中,一篇文章可以用词向量来表示;在图像处理中,一张图片就是一个像素向量,每个像素由RGB三个数字描述;在推荐系统里,用户向量则通过不同维度来刻画其偏好。本质大同小异,都是将现实世界的复杂信息映射到一个数学空间中。
1.2 数据库逻辑架构
腾讯云向量数据库采用分布式架构,有几个关键层级需要牢记:实例是最高级,对应一个独立的数据库服务;数据库相当于命名空间,用于隔离不同业务;集合是存储向量数据的核心单元,其中包含一个个文档;文档是最小数据单元,包含唯一ID、一个向量字段以及可选的标量字段(用于过滤查询)。把这套逻辑理解透彻,后续使用SDK和API时就不会感到困惑。
1.3 支持的索引类型
创建集合之前,必须为向量数据建立索引,否则检索效率会很低。它支持以下几种类型:FLAT是暴力检索,适用于数据量较小的场景,精度最高但速度较慢;HNSW是基于图的算法,检索速度快但内存消耗较大;IVF系列基于倒排索引,适合大规模数据,在内存与速度之间取得平衡。如何选择?需要根据召回精度、检索速度和内存占用这三个维度来权衡。对于多租户场景,容量增强版还提供了DISK_FLAT磁盘索引,能够将数据存储在磁盘上,大幅降低存储成本。
二、快速开始:控制台操作与实例创建
2.1 创建向量数据库实例
登录腾讯云控制台,搜索“向量数据库”,进入产品页面。创建实例时有三个关键点:地域(建议与业务服务器选择同一地域,便于走内网)、实例规格(入门型1核2GB即可满足开发测试需求)、计费模式(包年包月适合长期稳定业务,按量计费适合弹性场景)。购买完成后,在实例详情页获取内网IP和端口,然后前往密钥管理页面生成API访问密钥。
2.2 网络配置与安全组设置
若想通过腾讯云CVM内网访问,需满足两个前置条件:一是CVM和向量数据库实例必须在同一个VPC内,二是安全组规则需要正确配置。CVM安全组出站规则需添加向量数据库的IP和端口,向量数据库安全组入站规则需添加CVM的IP和端口。如果想在本地通过外网快速体验,可以开启外网访问功能,再配置白名单。
三、Python SDK完整对接实战
腾讯云向量数据库提供了多语言SDK和HTTP API,下面使用Python走一遍完整流程。
3.1 安装SDK
pip3 install tcvectordb
3.2 创建客户端并连接数据库
import tcvectordb
from tcvectordb.model.enum import ReadConsistency
vdb_url = 'https://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
)
3.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
)
3.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)}条数据')
3.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}')
3.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功能,创建集合时配置好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
)
五、混合检索:稠密向量与稀疏向量的双重优势
纯语义检索(稠密向量)存在一个常见问题:对具体数字、编码、数学公式不够敏感,而且容易出现语义过度泛化。比如搜索“2024年财报”,它可能会返回“公司业绩总结”,虽然相关但不够精准。腾讯云向量数据库推出的Hybrid Search混合检索架构,将稠密向量的语义理解能力与稀疏向量的关键词精确匹配能力结合起来。稠密向量负责语义搜索,召回近义和关联内容;稀疏向量基于BM25算法走倒排索引,实现精确匹配。两路结果通过加权排序或RRF(倒数排名融合)算法重排序,最终返回综合最优的结果。根据实测,这种方案比纯向量检索的召回率能够提升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套件可以理解为一个“开箱即用”的文档处理流水线:上传文档,系统自动完成解析、信息补充、向量化、索引构建。支持PDF、Word、TXT、Markdown等常见格式,几分钟内即可建立一个专属知识库。操作也很简便,在CollectionView上直接调用load_and_split_text方法上传文档即可,系统会自动分块、向量化、建索引。目前该功能暂不计费。
七、与LangChain及LlamaIndex框架集成
将向量数据库集成到主流的AI开发框架中,是大多数开发者的实际需求。以LangChain为例,集成步骤清晰明了:先安装langchain-community和tcvectordb,然后通过TencentVectorDB类初始化向量存储,配置连接参数。之后使用文档加载工具读取文本,通过嵌入模型(可以使用腾讯混元Embedding,也可以使用HuggingFace的bge-small-zh)将文本块转换为向量。调用add_texts方法存入数据库后,构建RetrievalQA链,设置检索器为向量存储,一个基于语义检索的问答系统就搭建完成了。LlamaIndex也提供了TencentVectorDB适配器,接入方式类似。
# 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='https://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输入。
