向量数据库PGVECTOR,AI浪潮下崛起的新秀!

makefile 复制代码
作者:IT邦德
中国DBA联盟(ACDU)成员,10余年DBA工作经验
擅长主流数据Oracle、MySQL、PG、openGauss运维
备份恢复,安装迁移,性能优化、故障应急处理等

可提供技术业务:
1.DB故障处理/疑难杂症远程支援
2.Mysql/PG/Oracle/openGauss
数据库部署及数仓搭建
•••
微信:jem_db
QQ交流群:587159446
公众号:IT邦德
•••

@TOC 向量数据库因为可以为大模型提供记忆而需求倍增,随着AI的热潮开始崭露头角,本文也聚焦于被 AI 炒火了的向量数据库,介绍什么是向量数据库,以及以插件形式存在的 pgvector,与PostgreSQL 强强联合,成为AI浪潮下的崛起新星。

1.序言

自从OpenAI推出了全新的对话式通用人工智能工具------ChatGPT,ChatGPT 表现出了非常惊艳的语言理解、生成、知识推理能力,ChatGPT 的横空出世拉开了大语言模型产业和生成式AI产业蓬勃发展的序幕,大模型作为新一代的AI处理器,提供了数据处理能力;而向量数据库提供了存储能力,成为大模型时代的重要基座。

2.向量数据库

数据库有事务处理(OLTP)与数据分析(OLAP)两大核心场景,向量数据库自然也不例外。典型的事务处理场景包括:知识库,问答,推荐系统,人脸识别,图片搜索,等等等等。知识问答:给出一个自然语言描述的问题,返回与这些输入最为接近的结果;以图搜图:给定一张图片,找出与这张图片在逻辑上最接近的其他相关图片。 这些功能说到底都是一个共同的数学问题:向量最近邻检索(KNN):给定一个向量,找到距离此向量最近的其他向量。

向量数据库的主要应用场景:
1.人脸识别
向量数据库可以存储大量的人脸向量数据,
并通过向量索引技术实现快速的人脸识别和比对。

2.图像搜索
向量数据库可以存储大量的图像向量数据,
并通过向量索引技术实现快速的图像搜索和相似度匹配。

3.音频识别
向量数据库可以存储大量的音频向量数据,
并通过向量索引技术实现快速的音频识别和匹配。

4.自然语言处理
向量数据库可以存储大量的文本向量数据,
并通过向量索引技术实现快速的文本搜索和相似度匹配。

5.推荐系统
向量数据库可以存储大量的用户向量和物品向量数据,
并通过向量索引技术实现快速的推荐和相似度匹配。

6.数据挖掘
向量数据库可以存储大量的向量数据,
并通过向量索引技术实现快速的数据挖掘和分析。

3.向量插件PGVECTOR

在所有现有向量数据库中,pgvector是一个独特的存在 ------ 它选择了在现有的世界上最强大的开源关系型数据库 PostgreSQL 上以插件的形式添砖加瓦,而不是另起炉灶做成另一个专用的"数据库" pgvector有着优雅简单易用的接口,不俗的性能表现,更是继承了PG生态的超能力集合。

4.PGVECTOR安装

bash 复制代码
1.配置yum源
yum install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-8-x86_64/pgdg-redhat-repo-latest.noarch.rpm

2.编译安装
# 先安装git(如果已安装,跳过)
yum install -y git

# 切换到/tmp目录,下载源码包,我这里选择是目前最新版本0.5.1
cd /tmp
git clone --branch v0.6.0 https://github.com/pgvector/pgvector.git

# 进入/tmp/pgvector目录,进行编译安装
cd pgvector
make & make install


3.安装vector扩展
# 创建demo数据库
create database demo;

# 切换到demo数据库
\c demo

# 安装vector扩展
CREATE EXTENSION vector;

# 创建测试表
CREATE TABLE test (id bigserial PRIMARY KEY, embedding vector(3));

# 插入测试数据
INSERT INTO test (embedding) VALUES ('[1,2,3]'), ('[4,5,6]');

# 按与给定向量相似度(L2 distance)排序,显示前5条
SELECT * FROM test ORDER BY embedding <-> '[3,1,2]' LIMIT 5;

5.PGVECTOR实践

5.1 知识检索

python 复制代码
用一个简易的 Python 小脚本,
就可以制作一个全文模糊检索的命令行小工具

# !/usr/bin/env python3
from text2vec import SentenceModel
from psycopg2 import connect
model = SentenceModel('shibing624/text2vec-base-chinese')

def query(question, limit=64):
    vec = model.encode(question)  # 生成一个一次性的编码向量,默认查找最接近的64条记录
    item = 'ARRAY[' + ','.join([str(f) for f in vec.tolist()]) + ']::VECTOR(768)'
    cursor = connect('postgres:///').cursor()
    cursor.execute("""SELECT id, txt, vec <-> %s AS d FROM sentences ORDER BY 3 LIMIT %s;""" % (item, limit))
    for id, txt, distance in cursor.fetchall():
        print("%-6d [%.3f]\t%s" % (id, distance, txt))

5.2 距离定位

6.总结

向量数据库是一个非常有前景和潜力的行业,相信未来随着AI技术的不断发展,向量数据库也必将迎来更加广阔的发展空间。

相关推荐
冯志浩1 天前
Harmony NEXT:如何给数据库添加自定义分词
harmonyos·掘金·金石计划
中杯可乐多加冰2 个月前
【AI落地应用实战】DAMODEL深度学习平台部署+本地调用ChatGLM-6B解决方案
人工智能·掘金·金石计划
中杯可乐多加冰2 个月前
Amazon Bedrock +Amazon Step Functions实现链式提示(Prompt Chaining)
人工智能·掘金·金石计划
阿李贝斯2 个月前
el-select海量数据渲染-分页解决方案
前端·javascript·掘金·金石计划
宇宙之一粟3 个月前
Error Flows in Go
后端·go·掘金·金石计划
雨绸缪3 个月前
如何在 Eclipse 中调试ABAP程序
后端·掘金·金石计划
中杯可乐多加冰3 个月前
解决方案:昇腾aarch64服务器安装CUDA+GCC+CMake,编译安装Pytorch,华为昇腾HPC服务器深度学习环境安装全流程
人工智能·掘金·金石计划
雨绸缪4 个月前
第 1章 BW 建模工具概念介绍
后端·数据挖掘·掘金·金石计划
宇宙之一粟4 个月前
Python Asyncio 如何工作?从零开始重新创建
后端·python·掘金·金石计划