首页 > AI教程 >腾讯云向量数据库指南:从零开始构建AI智能应用

腾讯云向量数据库指南:从零开始构建AI智能应用

来源:互联网 2026-06-29 06:32:00

腾讯云向量数据库是自研全托管的分布式系统,支持千亿向量、百万QPS及毫秒级查询。提供多类型索引,通过PythonSDK实现向量插入与检索,内置Embedding自动向量化,支持稠密与稀疏向量混合检索,集成AI套件处理文档,并可对接LangChain等框架,有标准版与容量增强版可选。

一、向量数据库:大模型落地的核心基础设施

坦白讲,站在当前AI应用落地的角度来看,检索增强生成技术已经成为解决大模型幻觉和私有知识接入的关键方案,几乎没有第二种选择。而向量数据库,正是这套架构里最核心的那个组件——它专门用来存储和查询高维向量数据,能把文本、图像这些非结构化数据转化为向量表示,然后高效地找出最相似的那些。

腾讯云向量数据库,全托管、自研、企业级分布式,单索引能支撑千亿级向量规模,百万级QPS和毫秒级查询延迟。这么说可能有点抽象,换个角度理解:它不仅是给大模型做"外脑"用的,推荐系统、自然语言处理这些AI场景,也全是它的主战场。

长期稳定更新的攒劲资源: >>>点此立即查看<<<

好,话不多说,直接切入正题。

二、向量数据库的核心概念与架构

在看代码之前,有几个基本概念需要先对齐。

2.1 什么是向量数据

向量数据的典型结构就是一个一维数组,里面的元素都是数值(通常是浮点数)。这些数值代表的是某个对象在多维空间中的位置、特征或属性。举个例子:自然语言处理中,一篇文章可以用词向量表示;图像处理里,一张图就是一个像素向量,每个像素用RGB三个数字描述;推荐系统里,用户向量则用不同维度表示其偏好。本质都差不多,就是把现实世界的复杂信息,映射到一个数学空间里去。

2.2 数据库逻辑架构

腾讯云向量数据库采用分布式架构,几个关键层级需要记住:实例是最高级,对应一个独立数据库服务;数据库相当于命名空间,用来隔离不同业务;集合是存储向量数据的核心单元,里面装的是一个个文档;文档是最小数据单元,包含唯一ID、一个向量字段,以及可选的标量字段(用来做过滤查询)。这套逻辑理解透了,后面用SDK和API才不会懵。

2.3 支持的索引类型

创建集合之前,必须给向量数据建索引,否则检索效率会很低。它支持这么几种:FLAT是暴力检索,数据量小的时候用,精度最高,但速度慢;HNSW是基于图的算法,检索快但内存消耗大;IVF系列基于倒排索引,适合大规模数据,在内存和速度之间找平衡。怎么选?需要你根据召回精度、检索速度和内存占用这三个维度来权衡。对于多租户场景,容量增强版还提供了DISK_FLAT磁盘索引,能把数据存在磁盘上,大幅降低存储成本。

三、快速开始:控制台操作与实例创建

3.1 创建向量数据库实例

登录腾讯云控制台,搜索"向量数据库",进到产品页面。创建实例的时候有三个关键点:地域(建议和业务服务器选同一个,方便走内网)、实例规格(入门型1核2GB就够开发测试了)、计费模式(包年包月适合长期稳定业务,按量计费适合弹性场景)。买完后,在实例详情页拿到内网IP和端口,再去密钥管理页面生成API访问密钥。

3.2 网络配置与安全组设置

如果想通过腾讯云CVM内网访问,有两个前置条件:一是CVM和向量数据库实例必须在同一个VPC里,二是安全组规则要配好。CVM安全组出站规则要加上向量数据库的IP和端口,向量数据库安全组入站规则要加上CVM的IP和端口。如果想在本地通过外网快速试一下,可以开启外网访问功能,再配个白名单。

四、Python SDK完整对接实战

腾讯云向量数据库提供了多语言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功能,创建集合时配好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='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输入。

侠游戏发布此文仅为了传递信息,不代表侠游戏网站认同其观点或证实其描述

热游推荐

更多
湘ICP备14008430号-1 湘公网安备 43070302000280号
All Rights Reserved
本站为非盈利网站,不接受任何广告。本站所有软件,都由网友
上传,如有侵犯你的版权,请发邮件给xiayx666@163.com
抵制不良色情、反动、暴力游戏。注意自我保护,谨防受骗上当。
适度游戏益脑,沉迷游戏伤身。合理安排时间,享受健康生活。