有了向量数据库,我们还需 SQL 数据库吗?

news2024/11/28 1:49:34

“除了向量数据库外,我是否还需要一个普通的 SQL 数据库?”

这是我们经常被问到的一个问题。如果除了向量数据以外,用户还有其他标量数据信息,那么其业务可能需要在进行语义相似性搜索前先根据某种条件过滤数据,例如:

  • 在法律领域,可能只需要从某个特定数据库中搜索相关的法律条款;

  • 在零售业,可能需要搜索某个尺码的男鞋;

  • 在图像搜索时,可能希望搜索 2010-2016 年上映且 IMDB 电影评分高于 7.0 的电影的海报。

对此,我们的答案是——不需要。用向量数据库 Milvus 或全托管的 Milvus 服务——Zilliz Cloud,就无需额外再维护一个 SQL 数据库存储标量了。只要一个系统,用户便可起送实现“向量搜索+标量过滤”的混合查询,从而获取更精准的搜索结果。

其中,Milvus 允许用户在进行向量搜索时依据标量数据进行条件过滤,数据属性可以是除向量以外的任何字段。Milvus 会对向量字段创建向量索引并进行向量相似性搜索,与此同时,还可以通过表达式对搜索结果进行元数据过滤。只需在搜索时输入过滤表达式,Milvus 就会帮你自动进行这两种操作。

本教程使用 Zilliz Cloud Pipelines—— Zilliz Cloud 内置的功能,用于将非结构化数据编码为 Embedding 向量,同时支持用文本和过滤表达式直接搜索向量。我们将演示如何利用标量过滤来召回只符合某些特定条件的文档片段,例如特定的来源网址,或者特定的文件名称。大家也可以利用类似的思路实现召回带有特定标签的文档,例如发表年份、版本号等。

01. 创建 Collection 和 Pipelines

本教程需要用到 Zilliz Cloud 免费版(海外版)。Zilliz Cloud 是全托管的 Milvus 服务,将用户的数据库部署在 Serverless 云服务器上,但我们仍旧可以通过调用 PyMiluvs API 接口在本地使用 Zilliz Cloud 向量数据库。以下用来测试的文本内容来自于 PyMilvus 文档

  1. 打开 https://cloud.zilliz.com/ 并创建 “Starter” 版本集群。
alt
  1. 添加 Collection 名称,点击“创建 Collection 和 集群”。
alt

默认情况下,创建 Zilliz Cloud 集群时会同时创建 1 个 Collection,本教程中不会使用它。后面我们创建 Zilliz Cloud Pipelines 时,会自动创建另一个 Collection。请注意,这两个 Collection 不相同。

  1. 在左侧导航栏中点击 Piplines,跟随界面提示创建 Pipelines 并上传数据:

a. 请先选择创建“Ingestion Pipeline”。

alt

b. 选择刚刚创建的 Serverless 集群,分别输入 Collection 和 Pipeline 名称,点击“添加 function”。

alt

c. 选择INDEX_DOC function,输入function名称,其他参数值保留默认即可,点击“添加”。这个function会将文档切片生成向量。

alt

d. (可选)再次点击“添加 function”。

alt

e. (可选)选择 PRESERVE function,并为其命名,点击“添加”。这个 function 用来保存文档的标签信息。

alt
  1. 点击“创建 Ingestion Pipeline”。现在,我们已经完成创建 Ingestion Pipeline 和 Collection。
alt
  1. 点击“创建 Deletion 和 Search Pipeline”。

  2. 进入 Pipelines 列表页面,点击按钮“▶️”运行 Ingestion Pipeline。

alt
  1. Ingestion Pipeline支持上传您在对象存储上的文件(例如AWS S3 和 Google Cloud Storage)。本例中我们将数据上传至 AWS S3。上传完成后,点击“通过 Pre-signed-URL 分享”。复制分享链接(Pre-signed URL)。如果没有对象存储,可以使用我们提供的测试文件链接 https://publicdataset.zillizcloud.com/milvus_doc.md 当作Pre-signed URL。
alt
  1. 在代码中粘贴Pre-signed URL 并点击运行。这步会将文件进行分片提取向量并导入到向量数据库 Collection 中。
alt
  1. 进入collection页面,检查 Collection 和 Schema 是否正确。此时文档片段的向量应该已经显示在Data Preview中了。
alt

之后,可以在 Playground 界面上或者通过调用 API 来查询数据。

02. 用标量过滤召回符合特定标签的向量

  1. 在 Pipeline 列表中找到 “Search Pipeline”并点击右侧的按钮“▶️”运行 Search Pipeline。

  2. 在请求中,输入一个问题并点击“运行”。

alt
  1. 编辑“过滤条件”。请使用布尔表达式。点击运行后,可以看到 Zilliz Cloud 已经根据您输入的条件过滤了搜索结果。
alt

用 Zilliz Cloud Pipelines 进行元数据过滤就是这么简单!你可以通过布尔表达式针对除向量字段以外的所有标量字段进行条件过滤。

03. 通过 API 接口进行搜索

同样,我们也可以通过调用 API 接口来进行搜索,使用 API 过程中,用户需要提供以下两点:

  • Zilliz API Token

  • Pipeline ID

我们可以通过集群详情页获取 API Token。

alt

如需获取 Pipeline ID,请先在 Pipelines 列表页找到 Search Pipeline,随后在 Pipeline ID 一栏中复制该 Pipelines 的ID。在调用 API 接口时将 Pipeline ID 粘贴到 URL 中。

alt

import requests, json
url = "https://controller.api.gcp-us-west1.zillizcloud.com/v1/pipelines/pipe-xxxx/run"
headers = {
    "Content-Type": "application/json",
    "Authorization": f"Bearer {TOKEN}",
}
data = {
    "data": {
        "query_text": SAMPLE_QUESTION
    },
    "params": {
        "limit": TOP_K,
        "offset": 0,
        # Any of these fields can be used in filter expression.
        "outputFields": ["chunk_text", "chunk_id", "doc_name", "source"],
        "filter": "doc_name == 'param.html'"
    }
}

# Send the POST request
response = requests.post(url, headers=headers, json=data)

用 API 进行元数据过滤搜索就是这么简单!如果大家有兴趣了解更多 Zilliz Cloud Pipelines 的使用方法,可以参考 Notebook用 Pipelines 搭建一个有标签过滤功能的 RAG 问答机器人,欢迎上手尝试。

本文由 mdnice 多平台发布

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1349110.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

spring创建与使用

spring创建与使用 创建 Spring 项⽬创建⼀个 Maven 项⽬添加 Spring 框架⽀持添加启动类 存储 Bean 对象创建 Bean将 Bean 注册到容器 获取并使⽤ Bean 对象创建 Spring 上下⽂获取指定的 Bean 对象获取bean对象的方法 使⽤ Bean 总结 创建 Spring 项⽬ 接下来使⽤ Maven ⽅式…

Linux:apache优化(6)—— apache的ab压力测试

要对所购买的物理机(二手)进行烧机在产品上线之前,对应用的一个压力测试对产品本身的压力测试 作用:Apache 附带了压力测试工具 ab,非常容易使用,并且完全可以模拟各种条件对 Web 服务器发起测试请求。在进行性能调整优化过程中&a…

国家开放大学形成性考核 统一考试 资料参考

试卷代号:11141 工程经济与管理 参考试题 一、单项选择题(每题2分,共20分) 1.资金的时间价值( )。 A.现在拥有的资金在将来投资时所能获得的利益 B.现在拥有的资金在将来消费时所付出的福利损失 C.…

C练习——银行存款

题目:设银行定期存款的年利率 rate为2.25%,已知存款期为n年,存款本金为capital 元,试编程计算并输出n年后本利之和deposit。 解析:利息本金*利率,下一年的本金又是是今年的本利之和 逻辑:注意浮点数,导入…

计算机操作系统(OS)——P5设备管理

1、I/O设备的概念和分类 什么是I/O设备 I/O就是输入/输出(Input/Output)。 I/O设备就是可以将数据输入到计算机,或者可以接收计算机输出数据的外部设备,属于计算机中的硬件部件。 UNIX系统将外部设备抽象为一种特殊的文件&#x…

Vue:使用IDEA开发Vue的相关配置

一、IDEA无法识别.vue文件 1、IDEA 添加Vue插件 2、添加Vue配置 File | Settings | Editor | File Types 找到 HTML 文件 在下面点号 输入*.vue 二、IDEA无法创建.vue文件 1、问题 在开发过程中,发现创建文件的界面,没有vue模板 2、相关配置 Fi…

PAT乙级1045 快速排序

著名的快速排序算法里有一个经典的划分过程:我们通常采用某种方法取一个元素作为主元,通过交换,把比主元小的元素放到它的左边,比主元大的元素放到它的右边。 给定划分后的 N 个互不相同的正整数的排列,请问有多少个元…

苦心分享两款免费AI 绘图软件,效果真的不错

这里写自定义目录标题 图一是 AI 绘画软件一键抠图做的,软件还免费 网址:https://www.yijiankoutu.com/ 一个非常强大的AI绘画网站,能够免费生成各种好看的二次元、3D、国风、漫画、卡通等风格的图片,生成图片跟文字匹配度非常高,…

2023/12/30 c++ work

定义一个Person类,私有成员int age,string &name,定义一个Stu类,包含私有成员double *score,写出两个类的构造函数、析构函数、拷贝构造和拷贝赋值函数,完成对Person的运算符重载(算术运算符、条件运算…

Go语言实战:如何使用Timeout Context优雅地取消任务

Go语言实战:如何使用Timeout Context优雅地取消任务 引言Go语言和并发编程简介什么是ContextTimeout Context的原理实战演示最佳实践和注意事项总结 引言 在现代软件开发中,尤其是在处理高并发系统时,正确地管理和取消正在进行的任务成为一项…

5个用于构建Web应用程序的Go Web框架

探索高效Web开发的顶级Go框架 Go(或称为Golang)以其简洁性、高效性和出色的标准库而闻名。然而,有几个流行的Go Web框架和库为构建Web应用程序提供了额外的功能。以下是五个最值得注意的Go框架: 1. Gin: Gin是一个高…

【致远OA】按人员编码获取所有待办事项

接口说明 按人员编码获取所有待办事项 兼容版本 since V7.0 请求方式 http请求方式:GET http://ip:port/seeyon/rest/affairs/pending/code/{memberCode} 如 http://127.0.0.1/seeyon/rest/affairs/pending/code/9981 效果参考 响应结果 参考对象实例&#x…

ROS TF坐标变换 - 动态坐标变换

目录 一、动态坐标变换(C实现)二、动态坐标变换(Python实现) 一、动态坐标变换(C实现) 所谓动态坐标变换,是指两个坐标系之间的相对位置是变化的。比如机械臂末端执行器与 base_link 之间&…

在Go中使用Goroutines和Channels发送电子邮件

学习如何使用Goroutines和Channels在Go中发送电子邮件 在现代软件开发的世界中,通信是一个关键元素。发送电子邮件是各种目的的常见实践,例如用户通知、报告等。Go是一种静态类型和编译语言,为处理此类任务提供了高效和并发的方式。在本文中&…

OSG读取和添加节点学习

之前加载了一个模型,代码是, osg::Group* root new osg::Group(); osg::Node* node new osg::Node(); node osgDB::readNodeFile("tree.osg"); root->addChild(node); root是指向osg::Group的指针; node是 osg:…

【力扣题解】P106-从中序与后序遍历序列构造二叉树-Java题解

👨‍💻博客主页:花无缺 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 本文由 花无缺 原创 收录于专栏 【力扣题解】 文章目录 【力扣题解】P106-从中序与后序遍历序列构造二叉树-Java题解🌏题目描述💡题…

2023结婚成家,2024借势起飞

您好,我是码农飞哥(wei158556),感谢您阅读本文,欢迎一键三连哦。 💪🏻 1. Python基础专栏,基础知识一网打尽,9.9元买不了吃亏,买不了上当。 Python从入门到精…

OpenGL FXAA抗锯齿算法(Qt)

文章目录 一、简介二、实现代码三、实现效果参考资料一、简介 之前已经提供了使用VCG读取Mesh的方式,接下来就需要针对读取的网格数据进行一些渲染操作了。在绘制Mesh数据时总会遇到图形的抗锯齿问题,OpenGL本身已经为我们提供了一种MSAA技术,但该技术对于一些实时渲染性能有…

看了好多烟花,自己也来了段

<!DOCTYPE html> <!DOCTYPE html> <html lang"zh-CN"> <meta charset"UTF-8"> <title>烟花动画</title> <style>body, html { height: 100%; margin: 0; }canvas { position: absolute; } </style> </…

基于C#的机械臂欧拉角与旋转矩阵转换

欧拉角概述 机器人末端执行器姿态描述方法主要有四种&#xff1a;旋转矩阵法、欧拉角法、等效轴角法和四元数法。所以&#xff0c;欧拉角是描述机械臂末端姿态的重要方法之一。 关于欧拉角的历史&#xff0c;由来已久&#xff0c;莱昂哈德欧拉用欧拉角来描述刚体在三维欧几里…