supabase链接vecs文档

news2024/12/27 11:12:08

使用Supabase链接本地数据库

Vecs 如何使用本地数据库工作。确保机器上安装了Supabase CLI。

# Initialize your project
supabase init

# Start Postgres
supabase start

Supabase vecs同步数据

vecs官方文档

创建集合

import vecs #下面这一行是本地的postgre数据库连接 
#vx = vecs.create_client("postgresql://postgres:postgres@localhost:54322/postgres") DB_CONNECTION = "postgresql://<user>:<password>@<host>:<port>/<db_name>" 
vx = vecs.create_client(DB_CONNECTION) docs = vx.get_or_create_collection(name="docs", dimension=3)

添加向量

现在我们可以使用以下命令将一些嵌入向量插入到我们的“文档”集合中upsert()

import vecs # create vector store client 
docs = vecs.get_or_create_collection(name="docs", dimension=3) 
# a collection of vectors with 3 dimensions 
vectors=[ ("vec0", [0.1, 0.2, 0.3], {"year": 1973}), ("vec1", [0.7, 0.8, 0.9], {"year": 2012}) ] 
# insert our vectors docs.upsert(vectors=vectors)

查询集合

你现在可以查询集合来检索相关匹配:

import vecs 
docs = vecs.get_or_create_collection(name="docs", dimension=3) 
# query the collection filtering metadata for "year" = 2012 
docs.query(
    data=[0.4,0.5,0.6], 
    # required limit=1, 
    # number of records to return 
    filters={"year": {"$eq": 2012}}, 
    # metadata filters )

补充一个重要的空查询,用来查所有数据:

query_vector = [0] * 768 # 全部为0的查询向量 
# 查询数据 
data = docs.query( 
    data=query_vector, 
    limit=1000,#最大limit为1000 
    filters={}, 
    measure="cosine_distance",
    include_value=True,#返回向量值 
    include_metadata=True#返回元数据 )

补充根据id查询:

源代码:

使用(metadata位于[0][2]):


character_data = cards_collection.fetch([str(request.character_id)]) 
if not character_data: 
    raise HTTPException(status_code=404, detail="Character not found") 
metadata = character_data[0][2]

返回数据格式示例:

删除向量

删除记录会将其从集合中移除。要删除记录,请为该方法指定列表ids或元数据过滤器delete。该方法将返回成功删除的记录的 ID。请注意,尝试删除不存在的记录不会引发错误。

docs.delete(ids=["vec0", "vec1"]) # or delete by a metadata filter docs.delete(filters={"year": {"$eq": 2012}})

适配器

适配器是一项可选功能,用于在向集合添加数据或从集合中查询数据之前对其进行转换。适配器让你能够仅使用项目的原生数据类型(例如,仅使用原始文本)与集合进行交互,而无需手动处理向量。

适配器在更新和查询时将你的输入转换为新格式。例如,你可以将大文本拆分为较小的块,或将其转换为嵌入。当然,适配器对 Hugging Face 模型具有一流的支持。

有关可用适配器的完整列表,请参阅内置适配器。

创建一个带有适配器的集合,该适配器将文本分块为段落,并使用模型将每个块转换为嵌入向量all-MiniLM-L6-v2

首先,安装vecs文本嵌入的可选依赖项:

pip install "vecs[text_embedding]"

然后创建一个带有适配器的集合,将文本分块为段落,并使用all-MiniLM-L6-v2384 维文本嵌入模型嵌入每个段落。

import vecs from vecs.adapter 
import Adapter, ParagraphChunker, TextEmbedding 
# create vector store client 
vx = vecs.Client("postgresql://<user>:<password>@<host>:<port>/<db_name>")
# create a collection with an adapter 
docs = vx.get_or_create_collection( name="docs", 
    adapter=Adapter( [ ParagraphChunker(skip_during_query=True),   
    TextEmbedding(model='all-MiniLM-L6-v2'), ] ) )

通过在集合中注册适配器,我们可以将记录插入到集合中,传递文本而不是向量。

# add records to the collection using text as the media type 
docs.upsert( records=[ 
    ( "vec0", "four score and ....", # <- note that we can now pass text here 
    {"year": 1973} ), 
    ( "vec1", "hello, world!", 
    {"year": "2012"} ) ] )

类似地,我们可以使用文本查询集合。

# search by text 
docs.query(data="foo bar")

Supabase可视化管理:

在table editor选择vecs向量库

向量库视图查看

向量搜索原理

余弦相似度

在NLP的任务里,会对生成两个词向量进行相似度的计算,常常采用余弦相似度公式计算。

余弦相似度用向量空间中两个向量夹角的余弦值作为衡量两个个体间差异的大小。余弦值越接近1,就表明夹角越接近0度,也就是两个向量越相似,这就叫"余弦相似性"。

余弦相似性的值范围在-1到1之间:

  • 当余弦相似性等于1时,表示两个向量在多维空间中的方向完全相同,即它们是完全相似的。

  • 当余弦相似性等于0时,表示两个向量之间不存在线性关系,它们是不相关的。

  • 当余弦相似性等于-1时,表示两个向量在多维空间中的方向正好相反,即它们是完全不同的。

 
def cos_sim(vector_a, vector_b): """ 计算两个向量之间的余弦相似度 :param vector_a: 向量 a :param vector_b: 向量 b :return: sim """ 
vector_a = np.mat(vector_a) 
vector_b = np.mat(vector_b) num = float(vector_a * vector_b.T) 
denom = np.linalg.norm(vector_a) * np.linalg.norm(vector_b) 
sim = num / denom return sim
欧几里德距离(Euclidean Distance)
1.理论

欧几里德距离(Euclidean Distance),也称为欧式距离,是用于测量空间中两点之间的直线距离的度量。它是最常用的距离度量之一,通常用于欧几里德空间(Euclidean Space)中的点之间的距离计算。在二维平面上,欧几里德距离就是我们通常所说的两点之间的直线距离。

曼哈顿距离(Manhattan Distance)
1. 理论

曼哈顿距离(Manhattan Distance),也称为城市街区距离或L1距离,是一种用于测量空间中两点之间的距离的度量方法。与欧几里德距离不同,曼哈顿距离是通过计算两点之间在水平和垂直方向上的距离之和来衡量的。它通常用于在网格状或坐标轴对齐的空间中度量距离,例如城市街区的距离。

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

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

相关文章

通过HTforWeb在ARMxy边缘计算网关上实现工业互联网

随着工业互联网技术的不断进步和发展&#xff0c;企业越来越重视通过数字化手段提高生产效率、降低成本并增强竞争力。ARMxy BL340系列作为一款高性能的工业级ARM嵌入式计算机&#xff0c;为实现这些目标提供了坚实的硬件基础。而HTforWeb作为一款专业的前端开发工具&#xff0…

OCR 通用端到端模型GOT

摘要 在人工智能领域&#xff0c;光学字符识别&#xff08;OCR&#xff09;技术已经取得了显著的进展。随着技术的不断进步&#xff0c;我们正迈向OCR 2.0时代。本文将介绍由Vary团队开发的通用端到端模型GOT&#xff0c;这一模型在OCR领域具有革命性的潜力。 论文概览 论文…

【Python 数据分析学习】Pandas的基础和应用(2)

题目 1 数据运算与分析1.1 算数和比较运算1.1.1 算数运算1.1.2 比较运算 1.2 数据排列1.3 统计分析1.3.1 基本的统计分析函数1.3.2 特殊的统计分析函数1.3.3 检查和处理空值 1.4 分组与聚合1.4.1 数据分组1.4.2 数据聚合 1.5 透视交叉表1.5.1 透视表1.5.2 交叉表 2 实战演练2.1…

【nginx】搭配okhttp 配置反向代理

nginx的默认是一个反向代理。 nginx会默认把输入的请求,转向其他的服务器执行。 这些转向的服务器与客户端发起的服务器不是同一个。 客户端只认识nginx,不知道ngiix转向何方。 正向代理修改okhttp的proxy,实际上很多代理都是正向的。 反向代理修改请求路径到nginx。 感觉还…

react-intl——react国际化使用方案

国际化介绍 i18n&#xff1a;internationalization 国家化简称&#xff0c;首字母首尾字母间隔的字母个数尾字母&#xff0c;类似的还有 k8s(Kubernetes) <br /> React-intl是 React 中最受欢迎的库。 使用步骤 安装 # use npm npm install react-intl -D # use yarn项目…

Weblogic部署

要安装weblogic&#xff0c;首先要有java环境&#xff0c;因此需要先安装jdk。 这里需要注意&#xff0c;weblogic版本不同&#xff0c;对应的jdk版本也不同&#xff0c;我在这里就踩了很多坑&#xff0c;我这里下载的是fmw_12.2.1.4.0_wls_lite_generic.jar对应的是jdk-8u333…

Minitab 的直方图结果分析解释

Minitab 的直方图结果分析解释 步骤 1&#xff1a;评估关键特征 检查分布的尖峰和散布。评估样本数量对直方图外观的影响。 标识尖峰&#xff08;即&#xff0c;条的最高聚类&#xff09;&#xff1a; 尖峰表示样本中最常见的值。评估样本的散布以了解数据的变异程度。例如…

1.1 计算机网络基本概述

欢迎大家订阅【计算机网络】学习专栏&#xff0c;开启你的计算机网络学习之旅&#xff01; 文章目录 前言一、网络的基本概念二、集线器、交换机和路由器三、互连网与互联网四、网络的类型五、互连网的组成1. 边缘部分2. 核心部分 六、网络协议 前言 计算机网络是现代信息社会…

时序必读论文08|ITransformer论文解读和我对时序工作未来的展望

论文标题&#xff1a;iTransformer: Inverted Transformers Are Effective for Time Series Forecasting 下载地址&#xff1a;https://arxiv.org/abs/2310.06625 开源代码&#xff1a;https://github.com/thuml/iTransformer 前言 ITransformer这篇文章我很早之前就留意到…

如何用Appium实现移动端UI自动化测试?

&#x1f345; 点击文末小卡片&#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 Appium是一个开源跨平台移动应用自动化测试框架。 既然只是想学习下Appium如何入门&#xff0c;那么我们就直奔主题。文章结构如下&#xff1a; 为什么要使用App…

java程序员入行科目一之CRUD轻松入门教程(一)

之前在操作MySQL的时候&#xff0c;都是采用Navicat&#xff0c;或者cmd黑窗口。 无论使用什么方式和MySQL交互&#xff0c;大致步骤是这样的 建立连接&#xff0c;需要输入用户名和密码编写SQL语句&#xff0c;和数据库进行交互 这个连接方式不会变&#xff0c;但是现在需要 基…

苹果系统(MacOS)中的Finder如何方便展现根目录

前言 初用Finder的时候&#xff0c;感觉非常的不方便。没有Windows的文件管理器来的简单明了。 本文&#xff0c;就是针对找不到文件根目录和隐藏文件夹的设置&#xff0c;进行了说明&#xff0c;供大家参考。 1、设置前 打开Finder&#xff0c;看不到DISK&#xff0c;也就是…

理解前向传播、反向传播和计算图

1. 什么是前向传播&#xff1f; 前向传播&#xff08;Forward Propagation&#xff09;是神经网络的推理过程。它将输入数据逐层传递&#xff0c;通过每一层的神经元计算&#xff0c;最终生成输出。 前向传播的公式 假设我们有一个简单的三层神经网络&#xff08;输入层、一…

一种简单的过某宝验证码的方式(仅做学习使用)

开篇 今天介绍一种简单的过某宝验证码的方式&#xff0c;用的是自动化&#xff0c;这样对不会js逆向的小白非常友好&#xff0c;只需要用到selenium框架就能轻松过某宝验证码&#xff0c;即模拟人的操作对滑块进行滑动。 但是首先还是需要训练验证码和标题 训练前&#xff1a…

各个大厂软件测试面试题,面试经验分享

前言 一、华为测试岗电话面试 一面 1&#xff09;自我介绍 2&#xff09;项目流程 >讲下H模型 3&#xff09;业务流程 >项目讲解、可从贷款流程讲起 4&#xff09;做过自动化吗&#xff1f; 5&#xff09;做过接口测试吗&#xff1f; 可从postman和jmeter做手工接口测…

数业智能心大陆探索生成式AIGC创新前沿

近日&#xff0c;数业智能心大陆参与了第九届“创客中国”生成式人工智能&#xff08;AIGC&#xff09;中小企业创新创业大赛。在这场汇聚了众多创新力量的研讨过程中&#xff0c;广东数业智能科技有限公司基于多智能体的心理健康技术探索与应用成果&#xff0c;从众多参赛者中…

KTM580030bit 绝对角度细分器支持最多 4096 对极与一键非线性自校准集成双 16bit 2M SAR ADC

KTM5800 是一款 30bit 绝对角度细分 4096 对极编码细分器&#xff0c;可以与磁电阻传感器&#xff08; AM R/TMR &#xff09;搭配&#xff0c;构成一个高速高精度的非接触磁性编码器模块。它具有以非常高的采样速率 读取传感器上的差分模拟正弦和余弦信号的能力&#xf…

vue3提交按钮限制重复点击

下载lodash npm install lodash 引入并使用 <template><div click"submit()">提交</div> </template><script setup>import { debounce } from lodash;const submit debounce(() > {//业务代码},2000,{leading: true,trailing:…

ETL数据集成丨建设BI的关键前提是ETL数据集成?

背景 很多企业都购买了商业智能&#xff08;BI&#xff09;来加速数字化转型&#xff0c;但是发现仅仅依赖BI效果往往不太好。虽然通过BI&#xff0c;企业能够快速分析和可视化数据&#xff0c;然而&#xff0c;BI并不是一个万能工具&#xff0c;它虽然能帮助企业解读数据&…

rancker 图形化界面

rancker 图形化界面 图形化界面进行k8s集群的管理 rancher自带监控————普罗米修斯 #在master和两个node上都操作 [rootmaster01 opt]# rz -E rz waiting to receive. [rootmaster01 opt]# docker load -i rancher.tar ​ #在master上操作 [rootmaster01 opt]# docker pul…