当前位置: 首页 > news >正文

AI科研助手开发总结:向量与数据权限的应用(二)

一、前言

继上篇文章:AI科研助手开发总结:向量与数据权限的应用(一)

本章根据'向量库内存储数据及权限,向量库统一维护和管理数据权限'方案讨论。

二、方案分析-基于向量Fields

2.1 思路

结合橙语AI科研助手的业务场景,提出基于向量Fields解决数据权限。

2.2 分析

根据向量数据库的特性和存储结构,存储时主要包括向量数据和属性,属性是KeyValue结构,可根据业务需求自定义设置。

在存储数据向量时,将权限抽象为标签,以标签形式设置到属性字段中,后续检索时,可根据权限属性进行过滤,达到数据权限效果。

2.3 设计

数据类型:公开数据、非公开数据(部分人可见、部分组可见、部分部门可见)

通过Fields属性,设置固定标签属性,以区别是否为公开数据;通过动态标签属性,区别数据对哪些人、部门或组可见。

  1)固定标签

  • 公开数据标签:isPublic,值为1.

  • 非公开数据标签:isPublic,值为0. (此时,需设置动态标签)

  2)动态标签

将可见标签作为动态属性,值设置为1。当向量数据的可见性发生变化时,更新动态属性。

  • 个人标签格式:AT-USERID-值 ,例如:AT-USERID-989121,值为1

  • 部门标签格式:AT-DEPID-值, 例如:AT-DEPID-908234,值为1

  • 组标签格式:AT-GROUPID-值, 例如:AT-GROUPID-432122,值为1

3)标签属性条件过滤

isPublic=1 or AT-GROUPID-9890=1 or AT-DEPID-9899=1

三、方案实现

3.1 基础数据类型

调研了阿里DashVector、百度VectorDB、Chroma,支持的基础数据类型:int、str、boolean。本文以DashVector为例。

3.2 公开数据检索

1. 业务数据

{ "id": 1, "query": "应届生实习", "title": "实习生招聘-应届生求职网", "fileId": "7146C7155D1DD6C76671BB4F7B871BFB", "isPublic": 1 }

       

2. 向量化数据

ret = collection.insert( [ ('1', generate_embeddings("实习生招聘-应届生求职网"),{'title':'实习生招聘-应届生求职网', 'fileId':'7146C7155D1DD6C76671BB4F7B871BFB','isPublic': 1}), ('2', generate_embeddings("快快乐乐出门咒-豆丁网"), {'title':'快快乐乐出门咒-豆丁网', 'fileId':'9BD1E4747D1A56E26BE4B356D6439454', 'isPublic': 0, 'allowTags': 'USERID-989121 USERID-989122 USERID-989123 GROUPID-9890 DEPID-9899 ','denyTags':'USERID-989141 USERID-989142 DEPID-9891 DEPID-9892 '}), ('3', generate_embeddings("起点中文网阅文集团旗下网站"), {'title':'起点中文网阅文集团旗下网站', 'fileId':'01E01C1F5947DE63C12DA8EF19E41DF4', 'isPublic': 0, 'allowTags': 'USERID-989121 USERID-989124 GROUPID-9890 ','denyTags':'USERID-989142 DEPID-9891 '}), ('4', generate_embeddings("中方回应布林肯言论"),{'title':'中方回应布林肯言论', 'fileId':'7146C7155D1DD6C76671BB4F7B871BFB','isPublic': 1}), ('5', generate_embeddings("布林肯在上海对所谓"), {'title':'布林肯在上海对所谓', 'fileId':'9BD1E4747D1A56E26BE4B356D6439454', 'isPublic': 0, 'AT-USERID-989121':1,'AT-USERID-989122':1,'AT-USERID-989123':1,'AT-GROUPID-9890':1,'AT-DEID-9899':1,'DT-USERID-989141':2,'DT-USERID-989142':2,'DT-DEPID-9891':2,'DT-DEPID-9892':2}), ('6', generate_embeddings("全面履行世贸组织规则"), {'title':'全面履行世贸组织规则', 'fileId':'01E01C1F5947DE63C12DA8EF19E41DF4', 'isPublic': 0, 'AT-USERID-989121':1,'AT-USERID-989124':1,'AT-GROUPID-9890':1,'DT-USERID-989142':2,'DT-DEPID-9891':2}) ]
)
 

3. 向量检索

ret = collection.query( vector=generate_embeddings(text), topk=10, filter='isPublic=1', # 条件过滤,查询公开数据 output_fields=['title', 'fileId'], include_vector=True 
)

3.3 非公开数据检索

1. 业务数据

{ "id": 2, "query": "布林肯", "title": "布林肯在上海对所谓", "fileId": "9BD1E4747D1A56E26BE4B356D6439454", "isPublic": 0, "AT-USERID-989121": 1, "AT-USERID-989122": 1, "AT-USERID-989123": 1, "AT-GROUPID-9890": 1, "AT-DEPID-9899": 1 }

{ "id": 3, "query": "世贸组织", "title": "全面履行世贸组织规则", "fileId": "01E01C1F5947DE63C12DA8EF19E41DF4", "isPublic": 0, "AT-USERID-989121": 1, "AT-USERID-989124": 1, "AT-GROUPID-9890": 1, "AT-USERID-989142": 1, "AT-DEPID-9891": 1 }

2. 向量化数据

ret = collection.insert( [ ('1', generate_embeddings("实习生招聘-应届生求职网"),{'title':'实习生招聘-应届生求职网', 'fileId':'7146C7155D1DD6C76671BB4F7B871BFB','isPublic': 1}), ('2', generate_embeddings("快快乐乐出门咒-豆丁网"), {'title':'快快乐乐出门咒-豆丁网', 'fileId':'9BD1E4747D1A56E26BE4B356D6439454', 'isPublic': 0, 'allowTags': 'USERID-989121 USERID-989122 USERID-989123 GROUPID-9890 DEPID-9899 ','denyTags':'USERID-989141 USERID-989142 DEPID-9891 DEPID-9892 '}), ('3', generate_embeddings("起点中文网阅文集团旗下网站"), {'title':'起点中文网阅文集团旗下网站', 'fileId':'01E01C1F5947DE63C12DA8EF19E41DF4', 'isPublic': 0, 'allowTags': 'USERID-989121 USERID-989124 GROUPID-9890 ','denyTags':'USERID-989142 DEPID-9891 '}), ('4', generate_embeddings("中方回应布林肯言论"),{'title':'中方回应布林肯言论', 'fileId':'7146C7155D1DD6C76671BB4F7B871BFB','isPublic': 1}), ('5', generate_embeddings("布林肯在上海对所谓"), {'title':'布林肯在上海对所谓', 'fileId':'9BD1E4747D1A56E26BE4B356D6439454', 'isPublic': 0, 'AT-USERID-989121':1,'AT-USERID-989122':1,'AT-USERID-989123':1,'AT-GROUPID-9890':1,'AT-DEID-9899':1,'DT-USERID-989141':2,'DT-USERID-989142':2,'DT-DEPID-9891':2,'DT-DEPID-9892':2}), ('6', generate_embeddings("全面履行世贸组织规则"), {'title':'全面履行世贸组织规则', 'fileId':'01E01C1F5947DE63C12DA8EF19E41DF4', 'isPublic': 0, 'AT-USERID-989121':1,'AT-USERID-989124':1,'AT-GROUPID-9890':1,'DT-USERID-989142':2,'DT-DEPID-9891':2}) ]
)

3. 向量检索

ret = collection.query( vector=generate_embeddings(text), topk=10, filter='isPublic=0 and (AT-GROUPID-9890=1 or AT-DEPID-9899=1) ', # 条件过滤,查询USERID    为989121或DEPID为9899可见的数据 output_fields=['title', 'fileId'], include_vector=True 
)

3.4 联合数据检索

基于2.2、2.3节的数据,联合检索

1. 向量检索

ret = collection.query( vector=generate_embeddings(text), topk=10, filter='isPublic=1 or AT-GROUPID-9890=1 or AT-DEPID-9899=1', # 条件过滤,公开数据或USERID为989121和DEPID为9899可见的数据 output_fields=['title', 'fileId'], include_vector=True 
)

四、总结

  采用动态Field,可解决数据可见性问题,总结如下:

  4.1 优点

  1. Field为KeyValue结构,设置和扩展灵活,可支持上百个。

  2. 通过Key过滤,效率较高,对业务无侵入

  3. 兼容性好

 4.2 缺点

  1. 可见标签为动态Field,相对于预定义的Field会占用较多内存和磁盘,检索速度也有所影响

  2. 目前不支持黑名单业务场景

相关文章:

AI科研助手开发总结:向量与数据权限的应用(二)

一、前言 继上篇文章:AI科研助手开发总结:向量与数据权限的应用(一) 本章根据向量库内存储数据及权限,向量库统一维护和管理数据权限方案讨论。 二、方案分析-基于向量Fields 2.1 思路 结合橙语AI科研助手的业务场…...

python爬虫----爬取视频实战

python爬虫-爬取视频 本次爬取,还是运用的是requests方法 首先进入此网站中,选取你想要爬取的视频,进入视频页面,按F12,将网络中的名称栏向上拉找到第一个并点击,可以在标头中,找到后续我们想要…...

HarmonyOS NEXT 实战之元服务:静态案例效果--航空出行

背景: 前几篇学习了元服务,后面几期就让我们开发简单的元服务吧,里面丰富的内容大家自己加,本期案例 仅供参考 先上本期效果图 ,里面图片自行替换 效果图1完整代码案例如下: import { authentication } …...

DP83848以太网移植流程,可以TCP通信

DP83848-EP 是一款高度可靠、功能丰富的强大器件,包含了增强型 ESD 保护、MII 和 RMII,从而在 MPU 选择方面实现最大的灵活性,所有这些特性都融入于 48 引脚 PQFP 封装中。 DP83848-EP 配备 集成子层以支持 10BASE-T 和 100BASE-TX 以太网协议,这些协议确保了与基于其他标…...

css 裁剪 clip-path

clip-path 是一个强大的 CSS 属性,用于裁剪元素的可视区域,支持多种形状裁剪。它可以用来创建复杂的裁剪效果,如圆形、多边形、路径等。 clip-path: none | shape | url(#clipPathId);none:不裁剪,显示完整内容。shap…...

MySQL用表组织数据

用表组织数据 文章目录 用表组织数据一.四种完整性约束二.数值类型2-1三.数值类型2-2四.字符串.日期类型五.设置1.设置主键2.设置标识列3.设置非空4.设置默认值 六.主外键建立后注意事项 一.四种完整性约束 1.域完整性 列 域完整性约束方法:限制数据类型,检查约束,外键约束,默…...

细说STM32F407单片机轮询方式读写SPI FLASH W25Q16BV

目录 一、工程配置 1、时钟、DEBUG 2、GPIO 3、SPI2 4、USART6 5、NVIC 二、软件设计 1、FALSH (1)w25flash.h (2) w25flash.c 1)W25Q16基本操作指令 2)计算地址的辅助功能函数 3)器…...

C++-------指针

把地址当做数值 在 C 中,指针本质上就是存储内存地址的变量。每个变量在内存中都有一个唯一的地址,通过取地址运算符 & 可以获取变量的地址,这个地址本质上是一个整数(在 32 位系统中是 32 位整数,64 位系统中是 …...

Linux文件目录 --- 移动和改名命令MV、强制移动、试探性移动过、按时间移动

二、MV移动改名命令 重命名文件:mv [选项] 旧文件名 新文件名 移动文件/文件夹:mv [选项] 源文件 目标目录 选项作用-b当覆盖文件时会对被覆盖文件进行先行备份。-i交互式操作,当目标文件已经存在时,会询问是否覆盖。-n试探性覆盖…...

03.HTTPS的实现原理-HTTPS的工作流程

03.HTTPS的实现原理-HTTPS的工作流程 简介1. HTTPS的工作流程1.1. TCP的工作流程1.1.1. 三次握手的详细步骤1.1.2. 三次握手的作用 1.2. HTTPS的工作流程1.2.1. HTTPS与TCP的关系1.2.2. HTTPS的工作流程 2. 公钥和私钥的作用3. 对称密钥的生成和交换4. 对称加密和非对称加密的区…...

vue实现批量下载文件流并压缩

为了实现文件流压缩,我们可以使用 JSZip 和 FileSaver 这两个第三方库。JSZip 是一个用于创建、读取和编辑 .zip 文件的 JavaScript 库,而 FileSaver 则用于在客户端保存文件。 ‌JSZip‌:用于创建和操作zip文件。可以通过 file 方法将文件添…...

前端入门之VUE--ajax、vuex、router,最后的前端总结

前言 VUE是前端用的最多的框架;这篇文章是本人大一上学习前端的笔记;欢迎点赞 收藏 关注,本人将会持续更新。本人不是学前端的,这个是大一的时候上学的和做的笔记,那个时候学的也蒙,故这里对前端做一个总…...

安装k8s涉及命令(方便放到txt离线使用)

查看操作系统信息 uname -a # 查看所有操作系统信息 uname -s # 查看内核名称 uname -r # 查看内核版本号 uname -m # 查看机器硬件名称 cat /etc/os-release # 查看所有操作系统信息 配置hosts cat >> /etc/hosts << EOF 172.171.16.147 crawler-k8s-mast…...

FLV视频封装格式详解

目录(?)[-] OverviewFile Structure The FLV headerThe FLV File BodyFLV Tag Definition FLVTAGAudio TagsVideo TagsSCRIPTDATA onMetaDatakeyframes Overview Flash Video(简称FLV),是一种流行的网络格式。目前国内外大部分视频分享网站都是采用的这种格式. File Structure…...

搭建vue3+vant项目架构

git代码仓库&#xff0c;直接下载压缩包使用 1、首先要安装node.js(18.3 或更高版本) 2、创建vue3项目 npm create vuelatest然后按照自己的需要进行选择就行 到此vue3项目创建完成&#xff0c;接下来是搭建项目架构 3、配置Vant (移动端ui) vue3项目引入vant&#xff0c…...

【Linux】进程间通信 -> 匿名管道命名管道

进程间通信的目的 数据传输&#xff1a;一个进程许需要将它的数据发送给另外一个进程。资源共享&#xff1a;多个进程之间共享同样的资源。通知事件&#xff1a;一个进程需要向另一个或一组进程发送消息&#xff0c;通知它们发生了某种事件&#xff08;如进程终止时要通知父进程…...

大数据开发学习路线

编程语言&#xff1a; Python&#xff1a;数据分析、数据预处理 Java&#xff1a;Hadoop和许多大数据工具的基础 Scala&#xff1a;用于Apache Spark数据库知识&#xff1a; SQL和NoSQL数据库的基本概念 数据库系统如MySQL、MongoDB等操作系统&#xff1a; Linux基础命令和脚本…...

华为云计算HCIE笔记05

第七章&#xff1a;其它模式 灾备组网 高可用性组网&#xff0c;单核心场景下&#xff0c;直接在两个站点中设置一个第三方仲裁站点&#xff0c;两个站点同时连接到仲裁&#xff0c;并且连接到对方。一旦出现问题&#xff0c;则由仲裁站点进行判断&#xff0c;进行业务切换 双核…...

wordpress网站用token登入开发过程

生成跳转token 示例&#xff1a; function generate_login_token($user_id, $secret_key) {$payload [user_id > $user_id,timestamp > time(),];$payload_json json_encode($payload);$signature hash_hmac(sha256, $payload_json, $secret_key);return base64_en…...

Python基础知识回顾

数据类型 Python可以区分整数&#xff08;integers、下文简写为int&#xff09;、浮点数&#xff08;float&#xff09;、字符串&#xff08;string&#xff09;和布尔值&#xff08;Boolean&#xff09;等数据类型。 1&#xff09;int是可正可负的整数 2&#xff09;float包…...

web vue 项目 Docker化部署

Web 项目 Docker 化部署详细教程 目录 Web 项目 Docker 化部署概述Dockerfile 详解 构建阶段生产阶段 构建和运行 Docker 镜像 1. Web 项目 Docker 化部署概述 Docker 化部署的主要步骤分为以下几个阶段&#xff1a; 构建阶段&#xff08;Build Stage&#xff09;&#xff1a…...

在rocky linux 9.5上在线安装 docker

前面是指南&#xff0c;后面是日志 sudo dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo sudo dnf install docker-ce docker-ce-cli containerd.io -y docker version sudo systemctl start docker sudo systemctl status docker …...

基于Flask实现的医疗保险欺诈识别监测模型

基于Flask实现的医疗保险欺诈识别监测模型 项目截图 项目简介 社会医疗保险是国家通过立法形式强制实施&#xff0c;由雇主和个人按一定比例缴纳保险费&#xff0c;建立社会医疗保险基金&#xff0c;支付雇员医疗费用的一种医疗保险制度&#xff0c; 它是促进社会文明和进步的…...

JVM垃圾回收机制全解析

Java虚拟机&#xff08;JVM&#xff09;中的垃圾收集器&#xff08;Garbage Collector&#xff0c;简称GC&#xff09;是用于自动管理内存的机制。它负责识别和清除不再被程序使用的对象&#xff0c;从而释放内存空间&#xff0c;避免内存泄漏和内存溢出等问题。垃圾收集器在Ja…...

Python爬虫(一):爬虫伪装

一、网站防爬机制概述 在当今互联网环境中&#xff0c;具有一定规模或盈利性质的网站几乎都实施了各种防爬措施。这些措施主要分为两大类&#xff1a; 身份验证机制&#xff1a;直接将未经授权的爬虫阻挡在外反爬技术体系&#xff1a;通过各种技术手段增加爬虫获取数据的难度…...

【Android】Android 开发 ADB 常用指令

查看当前连接的设备 adb devices 连接设备 adb connect 设备IP 断开已连接的设备 adb disconnect 设备IP 安装应用 adb install 安装包的路径 卸载应用 adb uninstall 应用包名 查看已安装的应用包名 adb shell pm list packages 查看已安装的第三方应用包名 adb shell pm list…...

区块链技术概述

区块链技术是一种去中心化、分布式账本技术&#xff0c;通过密码学、共识机制和智能合约等核心组件&#xff0c;实现数据不可篡改、透明可追溯的系统。 一、核心技术 1. 去中心化 特点&#xff1a;数据存储在网络中的多个节点&#xff08;计算机&#xff09;&#xff0c;而非…...

数据结构第5章:树和二叉树完全指南(自整理详细图文笔记)

名人说&#xff1a;莫道桑榆晚&#xff0c;为霞尚满天。——刘禹锡&#xff08;刘梦得&#xff0c;诗豪&#xff09; 原创笔记&#xff1a;Code_流苏(CSDN)&#xff08;一个喜欢古诗词和编程的Coder&#x1f60a;&#xff09; 上一篇&#xff1a;《数据结构第4章 数组和广义表》…...

ThreadLocal 源码

ThreadLocal 源码 此类提供线程局部变量。这些变量不同于它们的普通对应物&#xff0c;因为每个访问一个线程局部变量的线程&#xff08;通过其 get 或 set 方法&#xff09;都有自己独立初始化的变量副本。ThreadLocal 实例通常是类中的私有静态字段&#xff0c;这些类希望将…...

Linux【5】-----编译和烧写Linux系统镜像(RK3568)

参考&#xff1a;讯为 1、文件系统 不同的文件系统组成了&#xff1a;debian、ubuntu、buildroot、qt等系统 每个文件系统的uboot和kernel是一样的 2、源码目录介绍 目录 3、正式编译 编译脚本build.sh 帮助内容如下&#xff1a; Available options: uboot …...