使用 EFCore 和 PostgreSQL 实现向量存储及检索

随着 ChatGPT 的兴起及其背后的 AIGC 产业不断升温,向量数据库已成为备受业界瞩目的领域。FAISS、Milvus、Pinecone、Chroma、Qdrant 等产品层出不穷。市场调研公司 MarketsandMarkets 的数据显示,全球向量数据库市场规模预计将从 2020 年的 3.2 亿美元增长至 2025 年的 10.5 亿美元,年均复合增长率高达 26.8%。这表明向量数据库正从最初的不温不火逐步演变为大模型的 “超级大脑”。向量数据库,不仅解决了大模型在 “事实性” 和 “实时性” 方面的固有缺陷,还为企业重新定义了知识库管理方式。此外,与传统关系型数据库相比,向量数据库在处理大规模高维数据方面具有更高的查询效率和更强的处理能力。因此,向量数据库被认为是未来极具潜力的数据库产品。然而,面对非结构化数据的挑战,传统的关系型/非关系型数据库并未坐以待毙。开始支持向量数据库的特性,PostgrelSQL 就是其中的佼佼者。本文探讨的主题是:如何利用 PostgreSQL 实现向量检索以及全文检索。

从大模型的内卷说起

截止目前,OpenAI 官方支持的上下文长度上限为 128K,即 128000 个 token,这意味着它最多可支持约 64000 个汉字的内容。当然,如果考虑到输入、输出两部分的 token 消耗数量,这 64000 个汉字多少要大打折扣。除此以外,国外的 Claude 2、国内的 Moonshot AI,先后将上下文长度提升到 200K 量级,这似乎预示着大模型正在朝着 “更多参数”“更长上下文” 两个方向“内卷”。众所周知的是,现阶段大模型的训练往往需要成百上千的显卡,不论是“更多参数”还是“更长上下文”,本质上都意味着成本增加,这一点,从 Kimi 近期的宕机事件就可以看出。

在这里插入图片描述

所以,为什么说 RAG(Retrieval-Augmented Generation) 是目前最为经济的 AI 应用开发方向呢?因为它在通过外挂知识库 “丰富” 大模型的同时,能更好地适应当前 “上下文长度受限” 这一背景。诚然,如果有一天,随着技术的不断发展,芯片的价格可以变得低廉起来,大模型可以天然地支持更长的上下文长度,或许大家就不需要 RAG 了。可至少在 2024 年这个时间节点下,不管是企业还是个人,如果你更看重知识库私有化和数据安全,RAG 始终是绕不过去的一个点。同济大学在 Retrieval-Augmented Generation for Large Language Models: A Survey 这篇论文中提出了 RAG 的三种不同范式,如下图所示:

在这里插入图片描述

实现向量检索

PostgreSQL,可以说是目前世界上功能最强大的数据库系统之一。针对这个观点,请你先不要急着反驳我。因为,你可以利用这个时间来阅读下面这篇文章《技术极简主义:一切皆用 Postgres》。更不必说,这篇文章里的内容,对于整个 PostgreSQL 生态而言,不过是沧海一粟。单单是向量检索这个话题,你可以看到诸如 pase、pgvector、pg_embedding、pg_vectorize 等解决方案。这里,博主以 pgvector 这个插件为例来进行说明。

pgvector 基本使用

CREATE EXTENSION IF NOT EXISTS vector;

首先,我们使用上面的 SQL 语句来启用 pgvector 插件。此时,我们可以创建一张表来存储向量数据:

CREATE TABLE items (id bigserial PRIMARY KEY, embedding vector(3));

接下来,准备若干条数据进行查询测试,可以注意到,这里的向量为三维向量:

INSERT INTO items (embedding) VALUES ('[1,2,3]'), ('[4,5,6]'), ('[7,8,9]');

现在,假设我们有一个向量为:[3,2,1],如何查询距离该向量最近的数据呢?

# L2/欧式距离
SELECT *, embedding <-> '[3,2,1]' AS distance FROM items ORDER BY distance ASC;# 向量内积
SELECT *, 

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

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

相关文章

Ps 滤镜:风格化

风格化 Stylize滤镜通过置换像素和通过查找并增加图像的对比度&#xff0c;基于原图像生成绘画或印象派的效果。 查找边缘 Find Edges “查找边缘”滤镜通过分析图像的色彩和亮度变化来识别边缘。 这种处理方式使得图像的主要轮廓以一种艺术化的线条形式被强调出来&#xff0c;…

js中如何进行隐式类型转换

ToPrimitive 方法&#xff0c;是js中每个值隐含的自带方法&#xff0c;用来将值转换为基本类型。如果值为基本类型&#xff0c;则返回本身&#xff0c;否则&#xff0c;进行转换&#xff0c;返回基本类型值。 /** * obj 需要转换的对象 * type 期望的结果类型 Number或String …

UVA839 Not so Mobile 天平 解题报告

题目链接 https://vjudge.net/problem/UVA-839 题目大意 输入一个树状天平&#xff0c;根据力矩相等原则判断是否平衡。如图6-5所示&#xff0c;所谓力矩相等&#xff0c;就是WlDlWrDr&#xff0c;其中Wl和Wr分别为左右两边砝码的重量&#xff0c;D为距离。 采用递归&#…

大语言模型的指令调优:综述

&#x1f349; CSDN 叶庭云&#xff1a;https://yetingyun.blog.csdn.net/ 论文标题&#xff1a;Instruction Tuning for Large Language Models: A Survey 论文地址&#xff1a;https://arxiv.org/abs/2308.10792 指令调优是提升大语言模型&#xff08;LLMs&#xff09;性能…

python爬虫3-xpath批量定位元素的方法

以爬取豆瓣影评的电影名称为例。 第一步 鼠标右键单击&#xff0c;选择【检查】 第二步 切换到【元素】标签&#xff0c;展示源代码 选择下图的小箭头&#xff0c;再选择想要定位的文本&#xff0c;源代码会自动定位到该文本。 第三步 鼠标放在该文本的源代码上&#xff0c;…

Pytorch官方FlashAttention速度测试

在Pytorch的2.2版本更新文档中&#xff0c;官方重点强调了通过实现FlashAtteneion-v2实现了对scaled_dot_product_attention约2X左右的加速。 今天抽空亲自试了下&#xff0c;看看加速效果是否如官方所说。测试前需要将Pytorch的版本更新到2.2及以上&#xff0c;下面是测试代码…

【QT教程】QT6SVG处理

QT6SVG处理 使用AI技术辅助生成 QT界面美化视频课程 QT性能优化视频课程 QT原理与源码分析视频课程 QT QML C扩展开发视频课程 免费QT视频课程 您可以看免费1000个QT技术视频 免费QT视频课程 QT统计图和QT数据可视化视频免费看 免费QT视频课程 QT性能优化视频免费看 免费QT视…

全量知识系统 程序详细设计 之 先验逻辑-实现:从“平凡”回到“平凡” (百度文库QA)

Q1. 思考&#xff1a;数学中的平凡&#xff0c;和程序中的平凡&#xff08;比如POJO&#xff09;、语言中的平凡&#xff08;比如纯文本&#xff09;&#xff0c;数据中的平凡&#xff08;比如 Number&#xff09;。因为我设计中的全知系统将设计的三个方面刻画为语言设计、程序…

Prometheus-Grafana基础篇安装绘图

首先Prometheus安装 1、下载 https://prometheus.io/download/ 官网路径可以去这儿下载 2、如图&#xff1a; 3.解压&#xff1a; tar -xf prometheus-2.6.1.linux-amd64 cd prometheus-2.6.1.linux-amd64 4.配置文件说明&#xff1a; vim prometheus.yml 5.启动Promethe…

JavaScript教程(一)--- 语法和数据类型

基础 JavaScript 借鉴了 Java 的大部分语法&#xff0c;但同时也受到 Awk、Perl 和 Python 的影响。 JavaScript 是区分大小写的&#xff0c;并使用 Unicode 字符集。举个例子&#xff0c;可以将单词 Frh&#xff08;在德语中意思是“早”&#xff09;用作变量名。 var Frh …

问题解决四步法

一、界定问题 1.问题陈述表 1.问题的定义&#xff1a;smart原则 2.背景信息&#xff1a;对解决问题的影响 3.决策人&#xff1a; 4.利益相关者&#xff1a; 5.成功标准&#xff1a; 6.约束条件&#xff1a; 7.问题边界&#xff1a;包含范围不包含问题&#xff0c;地域范…

Liunx和Windows中重启MySql

MySQL 通常不需要在更改密码或执行大多数配置更改后重启。但在某些情况下&#xff0c;如果您更改了配置文件&#xff08;如 my.cnf 或 my.ini&#xff09;或需要重置整个数据库状态&#xff0c;您可能需要重启 MySQL 服务。以下是如何查看 MySQL 状态和重启 MySQL 服务的方法。…

kail渗透工具之nmap的使用方法

准备工作&#xff1a;开启两台虚拟机和一台Windows主机 kail Linux攻击机&#xff1a;192.168.80.131 red hat靶机&#xff1a;192.168.80.129 Windows主机&#xff1a;192.168.252.42 1、nmap扫描工具的简介 nmap是用来探测计算机网络上的主机和服务的一种安全扫描器。为了绘…

20240411金融读报:生态保护补偿条例印发外汇局优化贸易外汇业务通知

1、通过《生态保护补偿条例》&#xff08;生态保护到位的地方、单位、个人予以激励&#xff0c;市场层面含碳排放权、排污权、用水权、碳汇权益等&#xff09;&#xff0c;6月1日起执行。 &#xff08;可以搞个一站式领取吗&#xff0c;申请绿色贷款的时候&#xff0c;判断其是…

2024年视频号小店无货源,你一定要尝试一下,出九单收入1W+

大家好&#xff0c;我是电商花花。 如果说去年视频号的流量还差点意思&#xff0c;那么今年的视频号销量一定是非常高的&#xff0c;随着视频号的扩展&#xff0c;也让更多的创业者和博主入驻视频号&#xff0c;让更多人了解到了视频号小店&#xff0c;是这样赚钱的。 首先&am…

系统架构评估_1.相关概念

1.系统架构评估 系统架构评估是在对架构分析、评估的基础上&#xff0c;对架构策略的选取进行决策。它利用数学或逻辑分析技术&#xff0c;针对系统的一致性、正确性、质量属性、规划结果等不同方面&#xff0c;提供描述性、预测性和指令性的分析结果。 2.系统架构评估的方法 …

计算机科学与技术CS考研408资料

在github上整理了考研的一些资料&#xff1a; 内容包括&#xff1a; 王道数据结构、组成原理、操作系统、计算机网络.408笔记PDF408思维导图408真题2009-2021真题无logo版408真题2029-2023王道真题&#xff08;持续更新&#xff09;历年真题考频统计灰灰考研择校&#xff0c;…

深水采样器小口径特氟龙材质FEP贝勒管

FEP贝勒管&#xff0c;深水采样器(bailers tube)&#xff0c;是一种经济型便携式水质采样器&#xff0c;操作简单&#xff0c;使用方便&#xff0c;性价比高&#xff0c;能大限度的保证样品的真实性。采样管直径很小&#xff0c;能够采取小口径的深水井水样。是一款简单实用&am…

磁盘管理显示u盘无媒体怎么恢复数据

随着科技的发展&#xff0c;U盘已成为我们日常生活和工作中不可或缺的数据存储工具。然而&#xff0c;当我们在使用U盘时&#xff0c;有时会遇到“磁盘管理显示U盘无媒体”的困扰。面对这一问题&#xff0c;许多用户可能会感到惊慌失措&#xff0c;担心数据丢失。本文将为您详细…

c语言例题,计算1/1-1/2+1/3-1/4+1/5……+1/99-1/100的值,打印结果

例题&#xff1a;计算分式1/1-1/21/3-1/41/5……1/99-1/100的值&#xff0c;打印结果 根据题目&#xff0c;我们知道需要计算的是一个固定值&#xff0c; 先定义三个变量来当作分式里的三个值&#xff0c;变量i当作分式里的分母部分&#xff0c;通过for循环来实现分母每次循环…