LLM大语言模型(六):RAG模式下基于PostgreSQL pgvector插件实现vector向量相似性检索

目录

  • HightLight
  • Mac上安装PostgreSQL
  • DBever图形界面管理端
    • 创建DB
  • 使用向量检索
    • vector相似度计算
    • 近似近邻索引
      • HNSW近似近邻索引示例

HightLight

使用PostgreSQL来存储和检索vector,在数据规模非庞大的情况下,简单高效。

可以和在线业务共用一套DB,减少其他组件的引入,降低复杂度,在业务初期可以极大的提升效率。

Mac上安装PostgreSQL

强烈建议使用Postgres.app模式安装

下载最新版(我下载的是16,已包含pgvector插件)
https://postgresapp.com/downloads.html

在这里插入图片描述

图形界面安装,很简单

一定要“Initialize”

Installing Postgres.app
Download   ➜   Move to Applications folder   ➜   Double ClickIf you don't move Postgres.app to the Applications folder, some features may not work (more info)Click "Initialize" to create a new serverConfigure your $PATH to use the included command line tools (optional):sudo mkdir -p /etc/paths.d &&
echo /Applications/Postgres.app/Contents/Versions/latest/bin | sudo tee /etc/paths.d/postgresapp

DBever图形界面管理端

创建DB

创建mydb
在这里插入图片描述

使用向量检索

# 在mydb里启用pgvector插件
CREATE EXTENSION vector;# 创建一张表items,其中的embedding字段是vector类型
CREATE TABLE items (id bigserial PRIMARY KEY, embedding vector(3));# 添加数据
INSERT INTO items (embedding) VALUES ('[1,2,3]'), ('[4,5,6]');# 相似性检索
SELECT * FROM items ORDER BY embedding <-> '[3,1,2]' LIMIT 5;

vector相似度计算

符号相似度计算
<->L2距离
<=>cosine距离
<#>inner product点积距离

近似近邻索引

默认情况下pgvector提供的是精确近邻检索,也即全量计算找近邻,召回精准,但计算性能差。

pgvector还提供了两种近似近邻索引:

  1. HNSW - added in 0.5.0
  2. IVFFlat

HNSW近似近邻索引示例

# Add an index for each distance function you want to use.# 创建L2 distance的hnsw近似近邻索引CREATE INDEX ON items USING hnsw (embedding vector_l2_ops);# 创建Inner product distance的hnsw近似近邻索引CREATE INDEX ON items USING hnsw (embedding vector_ip_ops);# 创建Cosine distance的hnsw近似近邻索引CREATE INDEX ON items USING hnsw (embedding vector_cosine_ops);

2000维以内都可以索引。
Vectors with up to 2,000 dimensions can be indexed.

具体使用哪种近似近邻索引,根据具体业务来测试。

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

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

相关文章

在 Ubuntu 22.04 上安装 Django Web 框架的方法

简介 Django 是一个功能齐全的 Python Web 框架&#xff0c;用于开发动态网站和应用程序。使用 Django&#xff0c;您可以快速创建 Python Web 应用程序&#xff0c;并依赖框架来完成大部分繁重的工作。 在本指南中&#xff0c;您将在 Ubuntu 22.04 服务器上启动 Django。安装…

【动态规划】【C++算法】2188. 完成比赛的最少时间

作者推荐 【动态规划】【前缀和】【C算法】LCP 57. 打地鼠 本文涉及知识点 动态规划汇总 LeetCode2188. 完成比赛的最少时间 给你一个下标从 0 开始的二维整数数组 tires &#xff0c;其中 tires[i] [fi, ri] 表示第 i 种轮胎如果连续使用&#xff0c;第 x 圈需要耗时 fi…

Xshell

更改背景颜色 多个会话同时执行命令 查看 -> 撰写 -> 撰写窗格

【YOLO系列详解——超详细】

YOLO系列详解 1. 介绍2. YOLO原理3. YOLO版本4. 在开发实践中使用YOLO 1. 介绍 YOLO&#xff08;You Only Look Once&#xff09;是一种使用深度学习实现的端到端的目标检测系统&#xff0c;YOLO系列模型以其检测速度快、实时性高而闻名&#xff0c;并且能在图像中同时预测多个…

【Spring】GoF 之工厂模式

一、GoF 23 设计模式简介 设计模式&#xff1a;一种可以被重复利用的解决方案 GoF&#xff08;Gang of Four&#xff09;&#xff0c;中文名——四人组 《Design Patterns: Elements of Reusable Object-Oriented Software》&#xff08;即《设计模式》一书&#xff09;&…

MySQL 的Sql脚本是如何被编译的

MySQL是一个关系型数据库管理系统&#xff08;RDBMS&#xff09;&#xff0c;它使用SQL&#xff08;Structured Query Language&#xff0c;结构化查询语言&#xff09;作为其主要的查询语言。在MySQL中运行一个SQL脚本时&#xff0c;MySQL实际上并不会像传统的编程语言那样将S…

企业级人脸属性检测解决方案

在当今数字化、智能化的时代背景下&#xff0c;人脸识别技术已经成为众多行业不可或缺的一部分。美摄科技&#xff0c;作为人脸识别技术的领先者&#xff0c;为企业提供了一整套先进且高效的人脸属性检测解决方案。 美摄科技的人脸属性检测解决方案&#xff0c;基于深度学习算…

使用深度学习对网络摄像头图像进行分类

目录 加载相机和预训练网络 对相机快照进行分类 连续对相机图像进行分类 显示排名靠前的预测值 连续分类图像并显示排名靠前的预测值 另请参阅 此示例说明如何使用预训练的深度卷积神经网络 GoogLeNet 实时对来自网络摄像头的图像进行分类。 使用 MATLAB、普通的…

Vue-Vue3 集成编辑器功能

1、安装依赖 编辑器插件需要安装 wangeditor/editor 和 wangeditor/editor-for-vue 两个插件 npm install wangeditor/editor --savevue3运行如下命令安装 npm install wangeditor/editor-for-vuenext --savevue2运行如下命令安装 npm install wangeditor/editor-for-vue -…

Java强训day15(选择题编程题)

选择题 自连接使用一张表编程题 题目1 import java.util.Scanner;public class Main { public static int res(int n) {StringBuffer s new StringBuffer();while(n!0) {s.append(n%2);n/2;}int sum 0;String ss s.reverse().toString();for(int i0;i<ss.length()…

C语言的循环结构

目录 前言 1.三种循环语句 1.while循环 2.for循环 2.1缺少表达式的情况 3.do while循环 2.break语句和continue语句 2.1在while循环中 2.2在for循环中 2.3在do while 循环中 3.循环的嵌套 4.go to语句 前言 C语⾔是结构化的程序设计语⾔&#xff0c;这⾥的结构指的是…

LeetCode 207:课程表(图论,利用拓扑排序判断是否有环)

题目 你这个学期必须选修 numCourses 门课程&#xff0c;记为 0 到 numCourses - 1 。 在选修某些课程之前需要一些先修课程。 先修课程按数组 prerequisites 给出&#xff0c;其中 prerequisites[i] [ai, bi] &#xff0c;表示如果要学习课程 ai 则 必须 先学习课程 bi 。 …

nginx + DNS域名解析

配置链接: Nginx 安装配置 | 菜鸟教程 安装完nginx后&#xff0c;访问&#xff1a; cd /usr/local/nginx/sbin/ 然后使用./nginx可使用nginx。 访问:http://服务器的ip地址后出现 因为访问IP地址很繁琐&#xff0c;需要记忆ip的数字地址&#xff0c;因此需要给它一个通俗的…

Rust入门2——随机数

文章目录 一、生成随机数二、比较两个数相等 简单列出两个Rust的小例子 一、生成随机数 在Cargo.toml的dependencies中引入rand&#xff0c;指定rand的版本 [dependencies] rand "^0.3.14"之后在主函数中调用rand函数&#xff0c;生成随机数 use rand::Rng; f…

MyBatis 实现动态 SQL

MyBatis 中的动态 SQL 就是SQL语句可以根据不同的情况情况来拼接不同的sql。 本文会介绍 xml 和 注解 两种方式的动态SQL实现方式。 XML的实现方式 先创建一个数据表&#xff0c;SQL代码如下&#xff1a; DROP TABLE IF EXISTS userinfo; CREATE TABLE userinfo (id int(1…

Mac上几款好用的MacBook视频播放器

使用Mac电脑时&#xff0c;视频播放器可以说是我们使用频率最高的软件之一了&#xff0c;不管是工作时看视频资料还是在家里看下载好的电影&#xff0c;都需要用到视频播放器&#xff0c;本文中我们就来推荐几款好用的Macbook视频播放器&#xff0c;总有一款适合你&#xff01;…

centos ssh 默认端口 修改

centos7更改SSH端口-腾讯云开发者社区-腾讯云 (tencent.com) linux centos修改ssh端口号_semanage port -a -t ssh_port_t -p tcp-CSDN博客

数据结构——B/顺序表和链表

&#x1f308;个人主页&#xff1a;慢了半拍 &#x1f525; 创作专栏&#xff1a;《史上最强算法分析》 | 《无味生》 |《史上最强C语言讲解》 | 《史上最强C练习解析》 &#x1f3c6;我的格言&#xff1a;一切只是时间问题。 ​ 1.线性表 线性表&#xff08;linear list&…

QXlsx Qt操作excel(1)

QXlsx 是一个用于处理Excel文件的开源C库。它允许你在你的C应用程序中读取和写入Microsoft Excel文件&#xff08;.xlsx格式&#xff09;。该库支持多种操作&#xff0c;包括创建新的工作簿、读取和写入单元格数据、格式化单元格、以及其他与Excel文件相关的功能。 关于QXlsx的…

SQL拆分字段内容(含分隔符)

问题描述&#xff1a; 在做数据迁移的过程中&#xff0c;我们希望对表中的某个字段根据分隔符进行拆分&#xff0c;得到多条数据&#xff0c;原代码有点意思&#xff0c;因此记录一下。 我们假设某条数据如下&#xff1a; IDSTRS1公司名称不能小于四个字&#xff0c;行业类别…