当前位置: 首页 > news >正文

【腾讯云云上实验室】用向量数据库——实现高效文本检索功能

文章目录

  • 前言
  • Tencent Cloud VectorDB 简介
  • Tencent Cloud VectorDB 使用实战
    • 申请腾讯云向量数据库
    • 腾讯云向量数据库使用步骤
    • 腾讯云向量数据库实现文本检索
  • 结论和建议


前言

想必各位开发者一定使用过关系型数据库MySQL去存储我们的项目的数据,也有部分人使用过非关系型数据库Redis去存储我们的一些热点数据作为缓存,提高我们系统的响应速度,减小我们MySQL的压力。那么你有听说过向量数据库吗?知道向量数据库是用来做什么的吗?

向量数据库用来存储非结构化数据,例如,文档,图片,视频,音频和纯文本等,在保证1%信息完整的情况下,通过向量嵌入函数来精准描写非结构化数据的特征,从而提供查询、删除、修改、元数据过滤等操作。而像Mysql这样传统的数据库根本无法完成这些操作。而腾讯云向量数据库(Tencent Cloud VectorDB) 是一款专为存储、检索和分析多维向量数据而设计的全托管式企业级分布式数据库服务,就让我们一起来学习一起吧!

Tencent Cloud VectorDB 简介

向量数据库是一种创新性的数据存储系统,其独特之处在于采用高维向量来表示数据的特征或属性。这些高维向量的维度数量范围广泛,从几十到几千,具体取决于数据的复杂性和细致程度。与此同时,该数据库集成了CRUD操作、元数据过滤和水平扩展等多项功能。这些向量通常是通过对原始数据(例如文本、图像、音频、视频等)应用某种变换或嵌入函数来生成的。这些嵌入函数可能基于各种方法,包括机器学习模型、词嵌入和特征提取算法等。
在这里插入图片描述

向量数据库利用嵌入模型将数据转化为高维向量后,这些向量被存储在数据库中。在用户进行查询时,系统将用户提出的问题转换成高维向量,通过在数据库中计算高维空间中两个向量的距离,迅速检索出最相似的向量,并将相应的数据返回给用户。
向量数据库的显著优势在于其能够通过向量距离或相似性进行快速、准确的相似性搜索和检索。这使得用户能够根据语义或上下文含义查找最相关的数据,而不受传统数据库中基于精确匹配或预定义标准的限制。

该数据库将向量嵌入巧妙地整合在一起,使得我们能够比较任何向量与搜索查询的向量或其他向量之间的相似度。同时,它还支持CRUD操作和元数据过滤。通过将传统数据库功能与搜索和比较向量的能力相结合,向量数据库成为一个极具威力的工具。其在相似性搜索方面表现出色,通常被称为“向量搜索”技术。

腾讯云向量数据库(Tencent Cloud VectorDB) 是一款专为存储、检索和分析多维向量数据而设计的全托管式企业级分布式数据库服务。其独特之处在于支持多种索引类型和相似度计算方法,拥有卓越的性能优势,包括高QPS(每秒查询率)、毫秒级查询延迟,以及单索引支持数亿级向量数据规模。通过简单易用的可视化界面,用户可以快速创建数据库实例,进行数据操作,执行查询操作,并配置嵌入式数据转换,提供更广泛的数据处理能力。该数据库适用于多种场景,如构建大型知识库、推荐系统、智能问答系统以及文本/图像检索任务,为企业提供了强大的工具,助力各种应用场景下的高效数据管理和智能应用实现。
在这里插入图片描述
腾讯云向量数据库 Tencent Cloud VectorDB 基于腾讯集团每日处理千亿次检索的向量引擎 OLAMA,底层采用 Raft 分布式存储,通过 Master 节点进行集群管理和调度,实现系统的高效运行。同时,腾讯云向量数据库支持设置多分片和多副本,进一步提升了负载均衡能力,使得向量数据库能够在处理海量向量数据的同时,实现高性能、高可扩展性和高容灾能力。
在这里插入图片描述

Tencent Cloud VectorDB 使用实战

申请腾讯云向量数据库

点击下面的链接或者腾讯云搜索向量数据库,可用微信进行扫码实名认证登录,腾讯云向量数据库免费实例领取链接:点击申请
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
以上我们就申请好了腾讯云向量数据库,然后我们可以进行一些实操。

腾讯云向量数据库使用步骤

领取资源后可创建一个向量数据库,点击新建
在这里插入图片描述
默认没有网络和安全组,请点击新建私用网络和自定义安全组进行新建
在这里插入图片描述
下面是创建私有网络
在这里插入图片描述
下面是创建安全组
在这里插入图片描述
创建向量数据库后需要开启外网访问才可登录并远程控制
在这里插入图片描述
账号名为root 密码为向量数据库实例中复制API 密钥
在这里插入图片描述
在这里插入图片描述
点击新建数据库
在这里插入图片描述
有两种模式:一种是不开启embedding ,一种是开启embedding
在这里插入图片描述
创建了两个数据库一个时一种是开启embedding ,一种是不开启embedding,分别是test_1和test_2 表
在这里插入图片描述

{"database": "gwx_vector","collection": "test_1","buildIndex": true,"documents": [
{"id": "0001","types": "基础数学","infos": "1+1=2","text":"小学生数学课程"},{"id": "0002","types": "初中数学","infos": "x+y=22","text":"初中生学习课程"},{"id": "0003","types": "高中数学","infos": "f(x)","text":"高中生学习课程"}]
}

将上面的代码分别放入test_1进行数据操作然后执行,可在精准查询和相似度查询对向量数据库里面的数据进行检索

腾讯云向量数据库实现文本检索

文本检索任务是指在大规模文本数据库中搜索出与指定图像最相似的结果,在检索时使用到的文本特征可以存储在向量数据库中,通过高性能的索引存储实现高效的相似度计算,进而返回和检索内容相匹配的文本结果。
在这里插入图片描述
如果想用IDE 通腾讯向量数据库进行开发则可通过python 或java 开发,下面用python 进行演示
环境依赖安装:

	pip install tcvectordb

或者通过 https://github.com/Tencent/vectordatabase-sdk-python 链接源码安装

首先在腾讯云上面购买向量数据库服务器后,在本地创建VectorDBClient,一个向量数据库的客户端对象,用于与向量数据库服务器连接并进行数据交互。
具体代码如下:

import tcvectordb
from tcvectordb.model.enum import FieldType, IndexType, MetricType, ReadConsistency#create a database client object
client = tcvectordb.VectorDBClient(url='http://10.0.X.X', username='root', key='eC4bLRy2va******************************', read_consistency=ReadConsistency.EVENTUAL_CONSISTENCY, timeout=30)

然后创建数据库,并查询集群中所有的向量数据库。

read_consistency=ReadConsistency.EVENTUAL_CONSISTENCY, timeout=30)
# 创建数据库
client.create_database('db-test')
client.create_database('db_test0')
client.create_database('db_test1')
# list databases
db_list = client.list_databases()for db in db_list:print(db.database_name)

下面写入原始文本数据:

import tcvectordb
from tcvectordb.model.collection import Embedding, UpdateQuery
from tcvectordb.model.document import Document, Filter, SearchParams
from tcvectordb.model.enum import FieldType, IndexType, MetricType, EmbeddingModel
from tcvectordb.model.index import Index, VectorIndex, FilterIndex, HNSWParams, IVFFLATParams
from tcvectordb.model.enum import FieldType, IndexType, MetricType, ReadConsistency
#create a database client object
client = tcvectordb.VectorDBClient(url='http://10.0.X.X', username='root', key='eC4bLRy2va******************************', read_consistency=ReadConsistency.EVENTUAL_CONSISTENCY, timeout=30)
# 指定写入原始文本的数据库与集合
db = client.database('db-test')
coll = db.collection('book-emb')
# 写入数据。
# 参数 build_index 为 True,指写入数据同时重新创建索引。
res = coll.upsert(
documents=[
Document(id='0001', text="话说天下大势,分久必合,合久必分。", author='罗贯中', bookName='三国演义', page=21),
Document(id='0002', text="混沌未分天地乱,茫茫渺渺无人间。", author='吴承恩', bookName='西游记', page=22),
Document(id='0003', text="甄士隐梦幻识通灵,贾雨村风尘怀闺秀。", author='曹雪芹', bookName='红楼梦', page=23) 
],
build_index=True
)

下面进行查询
1、基于精确匹配的查询方式:query() 用于精确查找与查询条件完全匹配的向量,具体支持如下功能。
支持根据主键 id(Document ID),搭配自定义的标量字段的 Filter 表达式一并检索。
支持指定查询起始位置 offset 和返回数量 limit,实现数据 SCAN 能力。

#create a database client object
client = tcvectordb.VectorDBClient(url='http://10.0.X.X', username='root', key='eC4bLRy2va******************************', read_consistency=ReadConsistency.EVENTUAL_CONSISTENCY, timeout=30)
db = client.database('db-test')
coll = db.collection('book-vector')
# Set filter
filter_param=Filter(Filter.In("bookName",["三国演义", "西游记"]))
# query 
doc_list = coll.query(document_ids=['0001','0002','0003'], retrieve_vector=True, filter=filter_param, limit=3, offset=0, output_fields=['bookName','author'])
for doc in doc_list:
print(doc)

2、基于相似度匹配的查询方式:search()接口用于查找与给定查询向量相似的文档,返回指定的 Top K 个最相似的文档,并支持搭配自定义的标量字段的 Filter 表达式一并进行相似度检索。

doc_lists = coll.search(
vectors=[[0.3123, 0.43, 0.213],[0.315, 0.4, 0.216],[0.40, 0.38, 0.26]],
filter=Filter(Filter.In("bookName",["三国演义", "西游记"])),
params=SearchParams(ef=200),
retrieve_vector=True,
limit=3,
output_fields=['bookName','author']
) 
for i, docs in enumerate(doc_lists):
print(i)
for doc in docs:
print(doc)

更新数据代码如下

#create a database client object
client = tcvectordb.VectorDBClient(url='http://10.0.X.X', username='root', key='eC4bLRy2va******************************', read_consistency=ReadConsistency.EVENTUAL_CONSISTENCY, timeout=30)
# 指定需更新文档所属的数据库
db = client.database('db-test')
# 指定集合
coll = db.collection('book-vector')
#设置需更新的字段,或增加新的字段
update_doc = Document(vector=[0.2123, 0.290, 0.213], page=30, test_new_field="new field value")
# 对满足查询条件的 Document 更新字段
coll.update(data=update_doc, document_ids=['0001','0002','0003'], filter=Filter(Filter.In("bookName",["三国演义", "西游记"])))
# 更新之后,确认字段已更新
doc_list = coll.query(document_ids=['0001','0002'], retrieve_vector=True, limit=3)
# 输出确认结果
for doc in doc_list:
print(doc)

注意:
1、VectorDBClient 中的 url 和 key 填写成自己申请的向量数据库的哦(key就是秘钥)
2、read_consistency :设置读一致性,是非必填参数,默认取值EVENTUAL_CONSISTENCY,可取值如下:

  • ReadConsistency.STRONG_CONSISTENCY:强一致性。
  • ReadConsistency.EVENTUAL_CONSISTENCY:最终一致性。

结论和建议

整体使用腾讯云向量数据下来,我觉得腾讯数据库是一个非常棒的产品,即使你是一个小白,你也可以很快的入手,因为它的文档 产品文档 是非常详细的
在这里插入图片描述
它能够带你快速入门,文档基本覆盖了你所有可能遇到的问题,而且在实战使用过程中它的速度也是非常快的,完全可以满足企业的要求,有这方面需要的伙伴可以快速入手了。

选择一款合适的向量数据库是一件非常重要的事,不仅要考虑成本而且还要考虑效率等方面,腾讯云向量数据库用于大模型预训练数据的分类、去重和清洗相比传统方式可以实现10倍效率的提升,如果将腾讯云向量数据库作为外部知识库用于模型推理,则可以将成本降低2-4个数量级。所以我觉得不管是个人还是企业腾讯云向量数据库都是我们的第一选择。比如企业原先接入一个大模型需要花1个月左右时间,使用腾讯云向量数据库后,3天时间即可完成,极大降低了企业的接入成本。

目前腾讯云向量数据库只支持文本向量化写入,但对图片这些非结构化数据暂时不支持,浅浅的期待一波,等上线后,俺第一个使用。
在这里插入图片描述

相关文章:

【腾讯云云上实验室】用向量数据库——实现高效文本检索功能

文章目录 前言Tencent Cloud VectorDB 简介Tencent Cloud VectorDB 使用实战申请腾讯云向量数据库腾讯云向量数据库使用步骤腾讯云向量数据库实现文本检索 结论和建议 前言 想必各位开发者一定使用过关系型数据库MySQL去存储我们的项目的数据,也有部分人使用过非关…...

Pytorch中的gather的理解和用法

Pytorch中的gather的理解和用法 这个Gather的用法花费了点时间,我相信很多人一开始不太懂。 跟着我简单理解。 首先样例是: tensor([[ 3, 4, 5],[ 6, 7, 8],[ 9, 10, 11]])然后index: [[2, 1, 0]]然后执行的代码: tensor_0.gather(0…...

唯创知音WTN6系列语音芯片:高音频采样率与精细音量控制赋能广泛应用

在语音芯片领域,唯创知音的WTN6系列语音芯片以其出色的性能和广泛的应用领域,无疑是行业的一颗璀璨明星。近期,该系列芯片实现了音频采样率32kHz的突破,以及16级音量控制的精细调节,进一步提升了其在各类应用中的表现。…...

机器人分类

从发展阶段分类: 1第一代机器人2第二代机器人3第三代机器人:智能型机器人。生于90年代。具有传感器,以前的机器人都不具有传感器 从控制方式分类:(我觉得这个分类好乱) 操作型机器人:可自动控…...

html/css中位置position的绝对位置absolute顺时针盒子案例图片排序

目标图片&#xff1a; Dreamweaver界面&#xff1a; 代码部分&#xff1a; <!doctype html> <html> <head> <meta charset"utf-8"> <title>无标题文档</title> <style type"text/css">.red{background-color:r…...

分享86个清新唯美PPT,总有一款适合您

分享86个清新唯美PPT&#xff0c;总有一款适合您 86个清新唯美PPT下载链接&#xff1a;https://pan.baidu.com/s/1QEaXeWAekCbAWDD0iTgvMw?pwd8888 提取码&#xff1a;8888 Python采集代码下载链接&#xff1a;采集代码.zip - 蓝奏云 学习知识费力气&#xff0c;收集整…...

虚拟机系列:Oracle VM VirtualBox安装/更新/卸载出现 无法访问你试图使用的功能所在的网络位置

Oracle VM VirtualBox安装/更新/卸载出现 无法访问你试图使用的功能所在的网络位置 Oracle VM VirtualBox安装/更新/卸载出现 无法访问你试图使用的功能所在的网络位置Oracle VM VirtualBox安装/更新/卸载出现 无法访问你试图使用的功能所在的网络位置 在更新Oracle VM Virtua…...

【数据库】数据库并发控制的冲突检测,冲突可串行化的调度,保障事务的特性

冲突可串行化 ​专栏内容&#xff1a; 手写数据库toadb 本专栏主要介绍如何从零开发&#xff0c;开发的步骤&#xff0c;以及开发过程中的涉及的原理&#xff0c;遇到的问题等&#xff0c;让大家能跟上并且可以一起开发&#xff0c;让每个需要的人成为参与者。 本专栏会定期更新…...

java 对象大小计算

说明&#xff1a; 对于64位机&#xff1a;一个对象由三部分组成 对象头(object header) mark word &#xff1a;64bitkclass pointer &#xff1a;32bit(默认使用指针压缩)&#xff0c;如果取消指针压缩( XX:-UseCompressedOops)&#xff0c;则占用64bit数组长度&#xff1a;数…...

12个国外电子元器件基本参数(下)

DAC8162SDSCR TI DAC088S085CISQNOPB TI TL4050C41QDBZR TI NE3516S02-T1D-A RENESAS TECHNOLOGY MXL862-AL-R MAXLINEAR SI32176-B-GM1R SILICON LAB...

Docker容器中的OpenCV:轻松构建可移植的计算机视觉环境

前言 「作者主页」&#xff1a;雪碧有白泡泡 「个人网站」&#xff1a;雪碧的个人网站 构建可移植的计算机视觉环境 文章目录 前言引言简介&#xff1a;目的和重要性&#xff1a; 深入理解Docker和OpenCVDocker的基本概念和优势&#xff1a;OpenCV简介和应用领域&#xff1a;…...

SSH基础和高级用法

SSH基础和高级用法 SSH&#xff08;Secure Shell&#xff09;是一种安全协议&#xff0c;用于在不安全的网络上提供安全的远程登录和数据传输。以下是一些SSH的用法和高级用法&#xff1a; 基本用法&#xff1a; 远程登录&#xff1a;使用ssh命令可以实现在本地计算机上远程…...

算法通关第十三关-青铜挑战数学基础问题

数组元素积的符号 描述 : 已知函数 signFunc(x) 将会根据 x 的正负返回特定值&#xff1a; 如果 x 是正数&#xff0c;返回 1 。如果 x 是负数&#xff0c;返回 -1 。如果 x 是等于 0 &#xff0c;返回 0 。 给你一个整数数组 nums 。令 product 为数组 nums 中所有元素值的…...

如何使用 Freepik 的 Pikaso 工具来画图

Freepik 是一个提供高质量的照片、矢量图像、插图以及 PSD 文件素材的网站https://www.freepik.com/您可以在这里找到各种风格和主题的素材&#xff0c;用于您的创意项目。Freepik 还提供了一个名为 Pikaso 的在线画图工具&#xff0c;让您可以轻松地创建和编辑您自己的图像&am…...

一个没正常处理tcp对端关闭的bug

最近使用自研的http client时发现一个问题&#xff0c;对端在发送响应数据之后立即调用close关闭了连接&#xff0c;我这没有调用到响应的回调&#xff0c;而是调用到了连接关闭的回调。对端延迟一会再关闭连接就没问题&#xff0c;用curl去访问也是正常的。经过排查是没有正确…...

什么是JDK

JDK是Java的开发工具&#xff0c;全称为Java Development Kit&#xff0c;包含Java运行环境&#xff0c;Java工具&#xff0c;Java基础类库三大部分。 Java运行环境 Java运行环境&#xff0c;也就是JRE&#xff0c;全称为Java Runtime Environment &#xff0c;其中包含JVM&…...

积分表二(高等数学同济版中所有的积分公式)

文章目录 含有 x − a x a \sqrt{\pm \frac{x-a}{xa}} xax−a​ ​ 或者 ( x − a ) ( b − x ) \sqrt{(x-a)(b-x)} (x−a)(b−x) ​ 的积分含有三角函数函数的积分含有反三角函数的积分 (其中 a > 0 a>0 a>0)含有指数函数的积分含有对数函数的积分含有双曲函数的…...

Golang数据类型(数字型)

Go数据类型&#xff08;数字型&#xff09; Go中数字型数据类型大致分为整数&#xff08;integer&#xff09;、浮点数&#xff08;floating point &#xff09;和复数&#xff08;Complex&#xff09;三种 整数重要概念 整数在Go和Python中有较大区别&#xff0c;主要体现在…...

【JVM系列】- 穿插·对象的实例化与直接内存

对象的实例化与直接内存 &#x1f604;生命不息&#xff0c;写作不止 &#x1f525; 继续踏上学习之路&#xff0c;学之分享笔记 &#x1f44a; 总有一天我也能像各位大佬一样 &#x1f31d;分享学习心得&#xff0c;欢迎指正&#xff0c;大家一起学习成长&#xff01; 文章目录…...

【C++干货铺】继承 | 多继承 | 虚继承

个人主页点击直达&#xff1a;小白不是程序媛 C系列专栏&#xff1a;C干货铺 代码仓库&#xff1a;Gitee 目录 继承的概念及定义 继承的概念 继承的定义 继承基类成员访问方式的变化 基类和派生类的赋值转化 继承中的作用域 派生类的默认成员函数 构造函数 拷贝构造…...

模型参数、模型存储精度、参数与显存

模型参数量衡量单位 M&#xff1a;百万&#xff08;Million&#xff09; B&#xff1a;十亿&#xff08;Billion&#xff09; 1 B 1000 M 1B 1000M 1B1000M 参数存储精度 模型参数是固定的&#xff0c;但是一个参数所表示多少字节不一定&#xff0c;需要看这个参数以什么…...

2025年能源电力系统与流体力学国际会议 (EPSFD 2025)

2025年能源电力系统与流体力学国际会议&#xff08;EPSFD 2025&#xff09;将于本年度在美丽的杭州盛大召开。作为全球能源、电力系统以及流体力学领域的顶级盛会&#xff0c;EPSFD 2025旨在为来自世界各地的科学家、工程师和研究人员提供一个展示最新研究成果、分享实践经验及…...

页面渲染流程与性能优化

页面渲染流程与性能优化详解&#xff08;完整版&#xff09; 一、现代浏览器渲染流程&#xff08;详细说明&#xff09; 1. 构建DOM树 浏览器接收到HTML文档后&#xff0c;会逐步解析并构建DOM&#xff08;Document Object Model&#xff09;树。具体过程如下&#xff1a; (…...

拉力测试cuda pytorch 把 4070显卡拉满

import torch import timedef stress_test_gpu(matrix_size16384, duration300):"""对GPU进行压力测试&#xff0c;通过持续的矩阵乘法来最大化GPU利用率参数:matrix_size: 矩阵维度大小&#xff0c;增大可提高计算复杂度duration: 测试持续时间&#xff08;秒&…...

在鸿蒙HarmonyOS 5中使用DevEco Studio实现录音机应用

1. 项目配置与权限设置 1.1 配置module.json5 {"module": {"requestPermissions": [{"name": "ohos.permission.MICROPHONE","reason": "录音需要麦克风权限"},{"name": "ohos.permission.WRITE…...

Android Bitmap治理全解析:从加载优化到泄漏防控的全生命周期管理

引言 Bitmap&#xff08;位图&#xff09;是Android应用内存占用的“头号杀手”。一张1080P&#xff08;1920x1080&#xff09;的图片以ARGB_8888格式加载时&#xff0c;内存占用高达8MB&#xff08;192010804字节&#xff09;。据统计&#xff0c;超过60%的应用OOM崩溃与Bitm…...

如何在最短时间内提升打ctf(web)的水平?

刚刚刷完2遍 bugku 的 web 题&#xff0c;前来答题。 每个人对刷题理解是不同&#xff0c;有的人是看了writeup就等于刷了&#xff0c;有的人是收藏了writeup就等于刷了&#xff0c;有的人是跟着writeup做了一遍就等于刷了&#xff0c;还有的人是独立思考做了一遍就等于刷了。…...

html-<abbr> 缩写或首字母缩略词

定义与作用 <abbr> 标签用于表示缩写或首字母缩略词&#xff0c;它可以帮助用户更好地理解缩写的含义&#xff0c;尤其是对于那些不熟悉该缩写的用户。 title 属性的内容提供了缩写的详细说明。当用户将鼠标悬停在缩写上时&#xff0c;会显示一个提示框。 示例&#x…...

阿里云Ubuntu 22.04 64位搭建Flask流程(亲测)

cd /home 进入home盘 安装虚拟环境&#xff1a; 1、安装virtualenv pip install virtualenv 2.创建新的虚拟环境&#xff1a; virtualenv myenv 3、激活虚拟环境&#xff08;激活环境可以在当前环境下安装包&#xff09; source myenv/bin/activate 此时&#xff0c;终端…...

WEB3全栈开发——面试专业技能点P7前端与链上集成

一、Next.js技术栈 ✅ 概念介绍 Next.js 是一个基于 React 的 服务端渲染&#xff08;SSR&#xff09;与静态网站生成&#xff08;SSG&#xff09; 框架&#xff0c;由 Vercel 开发。它简化了构建生产级 React 应用的过程&#xff0c;并内置了很多特性&#xff1a; ✅ 文件系…...