【腾讯云云上实验室】——向量数据库——Embedding

2023-12-27 23:30

本文主要是介绍【腾讯云云上实验室】——向量数据库——Embedding,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Embedding 功能提供将非结构化数据转换为向量数据的能力,自动将原始文本转换为向量数据后插入数据库或进行相似性计算,更简单地使用向量数据库。

目录

概述

一、创建向量数据库以及创建集合

二、Python链接向量数据库

三、向集合插入文本数据

四、查询检索

五、修改数据

总结


概述

Embedding 功能是腾讯云向量数据库(Tencent Cloud VectorDB)提供将非结构化数据转换为向量数据的能力,目前已支持文本 Embedding 模型,能够覆盖多种主流语言的向量转换,包括但不限于中文、英文。开启 Embedding 功能并在创建 Collection 时配置模型,在插入、更新和相似性检索数据时直接传入原始文本,向量数据库会自动将原始文本进行转换,生成对应的向量数据后插入数据库或进行相似性计算,大幅提高业务接入效率。

一、创建向量数据库以及创建集合

请直接参考这个文章。

腾讯向量数据库的基础Web端使用-CSDN博客

向量数据库

二、Python链接向量数据库

需要包

pip install tcvectordb

访问代码

import tcvectordb
from tcvectordb.model.enum import FieldType, IndexType, MetricType, ReadConsistency#create a database client object
client = tcvectordb.VectorDBClient(url='换成自己的公网地址:40000', username='root', key='EgERjI66Plcj8************', read_consistency=ReadConsistency.EVENTUAL_CONSISTENCY, timeout=30)
# 链接你的数据库名称
db = client.database('mytest_01')
# 能输出名称代表成功
print(db.database_name)
print(db)

访问效果:

整体效果:

三、向集合插入文本数据

代码

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='换成自己的公网地址:40000', username='root', key='EgERjI66Plcj8************', read_consistency=ReadConsistency.EVENTUAL_CONSISTENCY, timeout=30)
# 指定写入原始文本的数据库与集合
db = client.database('mytest_01')
coll = db.collection('test_info')# 写入数据,可能存在一定延迟
# 1. 支持动态 Schema,除了 id、text 字段必须写入,可以写入其他任意字段,text 字段为创建集合时,设置的文本字段名
# 2. upsert 会执行覆盖写,若文档id已存在,则新数据会直接覆盖原有数据(删除原有数据,再插入新数据)
# 3. 参数 build_index 为 True,指写入数据同时重新创建索引。
res = coll.upsert(documents=[Document(id='0001', text="华山技能类型介绍 华山派有三种不同类型的技能,分别是狂风快剑、天罡北斗和紫霞神功。狂风快剑以快速攻击为主,天罡北斗以防御和吸收伤害为主,紫霞神功以远程攻击和治疗为主。",menpai='华山派', gamename='笑傲江湖OL', page=21),Document(id='0002', text="嵩山派:内功绝技 嵩山派擅长内功,其绝技“吸星大法”具有吸取对方内力的效果。此绝技的特点在于能够短时间内吸取敌人的内力,使敌人在短时间内无法使用技能。在战斗中,玩家可以使用“吸星大法”对抗内力较强的敌人,通过吸取敌人的内力来增强自己的实力。",menpai='嵩山派', gamename='笑傲江湖网络版', page=22),Document(id='0003', text="""为官之道
技能类型:大唐官府被动技能
技能描述:官场如战场,万事休鲁莽,精学为官道,万事皆无妄
技能效果:0-100级 永久增加物理伤害。
嗜血
技能类型:大唐官府增益技能
技能描述:制造一张临时符,给衣甲增加血气。
技能效果:升级效果:0-100级增强临时符效果,永久增加物理防御。
横扫千军
技能类型:大唐官府单体伤害技能
技能描述:攻击目标三次,下个回合休息(注:使用时气血不低于一半)。
技能效果:升级效果:0-100级 增加使用时的伤害,降低减防效果。
后发制人
技能类型:大唐官府增益技能
技能描述:临时提高防御和抵抗封印,下回合提高伤害,首先出手攻击目标。后发状态下死亡,会自动复活一次。
技能效果:升级效果:0-100级 增加使用时的伤害,永久增加抵抗封印。
破釜沉舟
技能类型:大唐官府范围伤害技能
技能描述:攻击多个目标(前期3个,80级后可攻击4个目标),伤害逐个递减。
技能效果:升级效果:0-79级,增加使用时的伤害,80级可攻击4个目标。80-100级,增加使用时的伤害。
翩鸿一击
技能类型:大唐官府单体增益技能
技能描述:攻击目标,临时提高速度和法术躲避,持续3回合。
技能效果:升级效果:0-100级,永久增加速度。
杀气诀
技能类型:大唐官府增益技能
技能描述:附加5回合杀气状态,用法术和特技攻击敌方单人时,对随机两个其他单位造成额外伤害。
技能效果:升级效果:0-100级,增加附加的额外伤害。
单刀直入
技能类型:大唐官府单体伤害技能
技能描述:攻击杀一个目标,并造成3回合重伤效果。此技能需要在击杀敌方单位5回合内使用。
技能效果:升级效果:0-120级,永久增加角色的气血,增加使用时伤害。
万剑归一
技能类型:大唐官府大招、单体伤害技能
技能描述:消耗150点愤怒,对目标发动5-9次攻击,自身气血越低攻击次数越多。伤害是普通攻击的50%,无法被保护。使用后休息一回合。
技能效果:升级效果:2级,每次攻击造成50%伤害;3级,每次攻击造成55%伤害。""",menpai='大唐官府', gamename='梦幻西游', page=23)],build_index=True
)

运行结果

四、查询检索

这里我提供一个json的列表,根据这些参数修改即可。

{"database": "mytest_01","collection": "test_info","search": {"vectors": [],"documentIds": [],"embeddingItems": ["吸星大法"],"params": {"ef": 100},"filter": "","retrieveVector": false,"limit": 10,"outputFields": []}
}

代码:

import tcvectordb
from tcvectordb.model.enum import FieldType, IndexType, MetricType, EmbeddingModel, ReadConsistency
from tcvectordb.model.index import Index, VectorIndex, FilterIndex, HNSWParams
from tcvectordb.model.document import Document, Filter, SearchParams# create a database client objectclient = tcvectordb.VectorDBClient(url='换成自己的公网地址:40000', username='root', key='EgERjI66Plcj8************', read_consistency=ReadConsistency.EVENTUAL_CONSISTENCY, timeout=30)db = client.database('mytest_01')
coll = db.collection('test_info')# 1. searchByText 提供按照 embeddingItems 输入的文本批量进行相似性查询的能力
# 2. 支持通过 filter 过滤数据
# 3. 如果仅需要部分 field 的数据,可以指定 output_fields 用于指定返回数据包含哪些 field,不指定默认全部返回
# 4. limit 用于限制每个单元搜索条件的条数,如 vector 传入三组向量,limit 为 3,则 limit 限制的是每组向量返回 top 3 的相似度向量
# 5. params 指定索引类型对应的查询参数,HNSW 类型需要设置 ef,指定查询的遍历范围;IVF 系列需要设置 nprobe,指定查询的单位数量
# 6. retrieve_vector 指定是否输出向量字段
doc_lists = coll.searchByText(embeddingItems=['吸星大法'],params=SearchParams(ef=200),limit=3
)
# printf
for i, docs in enumerate(doc_lists.get("documents")):print(i)for doc in docs:print(doc)

效果:

五、修改数据

代码

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='换成自己的公网地址:40000', username='root', key='EgERjI66Plcj8************', read_consistency=ReadConsistency.EVENTUAL_CONSISTENCY, timeout=30)
# 指定写入原始文本的数据库与集合
db = client.database('mytest_01')
coll = db.collection('test_info')# 写入数据,可能存在一定延迟
# 1. 支持动态 Schema,除了 id、text 字段必须写入,可以写入其他任意字段,text 字段为创建集合时,设置的文本字段名
# 2. upsert 会执行覆盖写,若文档id已存在,则新数据会直接覆盖原有数据(删除原有数据,再插入新数据)
# 3. 参数 build_index 为 True,指写入数据同时重新创建索引。
update_doc = Document(text="""万剑归一
技能类型:大唐官府大招、单体伤害技能
技能描述:消耗150点愤怒,对目标发动5-9次攻击,自身气血越低攻击次数越多。伤害是普通攻击的50%,无法被保护。使用后休息一回合。
技能效果:升级效果:2级,每次攻击造成50%伤害;3级,每次攻击造成55%伤害。""",page=23,test_new_field="new field value")
# 对满足查询条件的 Document 更新字段
coll.update(data=update_doc, document_ids=['0001', '0002','0003'])
# 更新之后,确认字段已更新,注意 limit 指每页返回的 Document 数量,默认为 1。
doc_list = coll.query(document_ids=['0001','0002'], retrieve_vector=False, limit=3)
# 输出确认结果
for doc in doc_list:print(doc)

修改以及查询效果

总结

相关 API

含义

Embedding 信息

/collection/create

创建集合

指定 Embedding 模型,配置输入文本的字段名及其输出的向量字段。

/document/upsert

插入数据

插入原始文本信息,将原始文本直接向量化,将原始文本与向量数据一并存入数据库。

/document/update

更新数据

更新之前写入的文本信息,自动向量化后存入数据库。

/document/search

检索数据

检索数据时,可根据输入的文本信息,自动向量化并检索与其最相似的数据。

多用几次就熟悉了,可以创建用一个方便调用的工厂类,难度相对来说简单一些,如果在pip install的时候比较慢建议改到国内的镜像下载的会快得多,希望能给大家带来一定的帮助,后面还会补上对应操作的factory类。

这篇关于【腾讯云云上实验室】——向量数据库——Embedding的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/544580

相关文章

Druid连接池实现自定义数据库密码加解密功能

《Druid连接池实现自定义数据库密码加解密功能》在现代应用开发中,数据安全是至关重要的,本文将介绍如何在​​Druid​​连接池中实现自定义的数据库密码加解密功能,有需要的小伙伴可以参考一下... 目录1. 环境准备2. 密码加密算法的选择3. 自定义 ​​DruidDataSource​​ 的密码解密3

Maven项目中集成数据库文档生成工具的操作步骤

《Maven项目中集成数据库文档生成工具的操作步骤》在Maven项目中,可以通过集成数据库文档生成工具来自动生成数据库文档,本文为大家整理了使用screw-maven-plugin(推荐)的完... 目录1. 添加插件配置到 pom.XML2. 配置数据库信息3. 执行生成命令4. 高级配置选项5. 注意事

在Java中基于Geotools对PostGIS数据库的空间查询实践教程

《在Java中基于Geotools对PostGIS数据库的空间查询实践教程》本文将深入探讨这一实践,从连接配置到复杂空间查询操作,包括点查询、区域范围查询以及空间关系判断等,全方位展示如何在Java环... 目录前言一、相关技术背景介绍1、评价对象AOI2、数据处理流程二、对AOI空间范围查询实践1、空间查

Python+PyQt5实现MySQL数据库备份神器

《Python+PyQt5实现MySQL数据库备份神器》在数据库管理工作中,定期备份是确保数据安全的重要措施,本文将介绍如何使用Python+PyQt5开发一个高颜值,多功能的MySQL数据库备份工具... 目录概述功能特性核心功能矩阵特色功能界面展示主界面设计动态效果演示使用教程环境准备操作流程代码深度解

MySQL数据库实现批量表分区完整示例

《MySQL数据库实现批量表分区完整示例》通俗地讲表分区是将一大表,根据条件分割成若干个小表,:本文主要介绍MySQL数据库实现批量表分区的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考... 目录一、表分区条件二、常规表和分区表的区别三、表分区的创建四、将既有表转换分区表脚本五、批量转换表为分区

MySQL Workbench工具导出导入数据库方式

《MySQLWorkbench工具导出导入数据库方式》:本文主要介绍MySQLWorkbench工具导出导入数据库方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝... 目录mysql Workbench工具导出导入数据库第一步 www.chinasem.cn数据库导出第二步

Mysql数据库中数据的操作CRUD详解

《Mysql数据库中数据的操作CRUD详解》:本文主要介绍Mysql数据库中数据的操作(CRUD),详细描述对Mysql数据库中数据的操作(CRUD),包括插入、修改、删除数据,还有查询数据,包括... 目录一、插入数据(insert)1.插入数据的语法2.注意事项二、修改数据(update)1.语法2.有

查看MySQL数据库版本的四种方法

《查看MySQL数据库版本的四种方法》查看MySQL数据库的版本信息可以通过多种方法实现,包括使用命令行工具、SQL查询语句和图形化管理工具等,以下是详细的步骤和示例代码,需要的朋友可以参考下... 目录方法一:使用命令行工具1. 使用 mysql 命令示例:方法二:使用 mysqladmin 命令示例:方

MySQL数据库约束深入详解

《MySQL数据库约束深入详解》:本文主要介绍MySQL数据库约束,在MySQL数据库中,约束是用来限制进入表中的数据类型的一种技术,通过使用约束,可以确保数据的准确性、完整性和可靠性,需要的朋友... 目录一、数据库约束的概念二、约束类型三、NOT NULL 非空约束四、DEFAULT 默认值约束五、UN

数据库面试必备之MySQL中的乐观锁与悲观锁

《数据库面试必备之MySQL中的乐观锁与悲观锁》:本文主要介绍数据库面试必备之MySQL中乐观锁与悲观锁的相关资料,乐观锁适用于读多写少的场景,通过版本号检查避免冲突,而悲观锁适用于写多读少且对数... 目录一、引言二、乐观锁(一)原理(二)应用场景(三)示例代码三、悲观锁(一)原理(二)应用场景(三)示例