当前位置: 首页 > 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包…...

c#开发AI模型对话

AI模型 前面已经介绍了一般AI模型本地部署&#xff0c;直接调用现成的模型数据。这里主要讲述讲接口集成到我们自己的程序中使用方式。 微软提供了ML.NET来开发和使用AI模型&#xff0c;但是目前国内可能使用不多&#xff0c;至少实践例子很少看见。开发训练模型就不介绍了&am…...

3-11单元格区域边界定位(End属性)学习笔记

返回一个Range 对象&#xff0c;只读。该对象代表包含源区域的区域上端下端左端右端的最后一个单元格。等同于按键 End 向上键(End(xlUp))、End向下键(End(xlDown))、End向左键(End(xlToLeft)End向右键(End(xlToRight)) 注意&#xff1a;它移动的位置必须是相连的有内容的单元格…...

代理篇12|深入理解 Vite中的Proxy接口代理配置

在前端开发中,常常会遇到 跨域请求接口 的情况。为了解决这个问题,Vite 和 Webpack 都提供了 proxy 代理功能,用于将本地开发请求转发到后端服务器。 什么是代理(proxy)? 代理是在开发过程中,前端项目通过开发服务器,将指定的请求“转发”到真实的后端服务器,从而绕…...

Java线上CPU飙高问题排查全指南

一、引言 在Java应用的线上运行环境中&#xff0c;CPU飙高是一个常见且棘手的性能问题。当系统出现CPU飙高时&#xff0c;通常会导致应用响应缓慢&#xff0c;甚至服务不可用&#xff0c;严重影响用户体验和业务运行。因此&#xff0c;掌握一套科学有效的CPU飙高问题排查方法&…...

Spring是如何解决Bean的循环依赖:三级缓存机制

1、什么是 Bean 的循环依赖 在 Spring框架中,Bean 的循环依赖是指多个 Bean 之间‌互相持有对方引用‌,形成闭环依赖关系的现象。 多个 Bean 的依赖关系构成环形链路,例如: 双向依赖:Bean A 依赖 Bean B,同时 Bean B 也依赖 Bean A(A↔B)。链条循环: Bean A → Bean…...

C++.OpenGL (14/64)多光源(Multiple Lights)

多光源(Multiple Lights) 多光源渲染技术概览 #mermaid-svg-3L5e5gGn76TNh7Lq {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-3L5e5gGn76TNh7Lq .error-icon{fill:#552222;}#mermaid-svg-3L5e5gGn76TNh7Lq .erro…...

面向无人机海岸带生态系统监测的语义分割基准数据集

描述&#xff1a;海岸带生态系统的监测是维护生态平衡和可持续发展的重要任务。语义分割技术在遥感影像中的应用为海岸带生态系统的精准监测提供了有效手段。然而&#xff0c;目前该领域仍面临一个挑战&#xff0c;即缺乏公开的专门面向海岸带生态系统的语义分割基准数据集。受…...

动态 Web 开发技术入门篇

一、HTTP 协议核心 1.1 HTTP 基础 协议全称 &#xff1a;HyperText Transfer Protocol&#xff08;超文本传输协议&#xff09; 默认端口 &#xff1a;HTTP 使用 80 端口&#xff0c;HTTPS 使用 443 端口。 请求方法 &#xff1a; GET &#xff1a;用于获取资源&#xff0c;…...

RSS 2025|从说明书学习复杂机器人操作任务:NUS邵林团队提出全新机器人装配技能学习框架Manual2Skill

视觉语言模型&#xff08;Vision-Language Models, VLMs&#xff09;&#xff0c;为真实环境中的机器人操作任务提供了极具潜力的解决方案。 尽管 VLMs 取得了显著进展&#xff0c;机器人仍难以胜任复杂的长时程任务&#xff08;如家具装配&#xff09;&#xff0c;主要受限于人…...

LRU 缓存机制详解与实现(Java版) + 力扣解决

&#x1f4cc; LRU 缓存机制详解与实现&#xff08;Java版&#xff09; 一、&#x1f4d6; 问题背景 在日常开发中&#xff0c;我们经常会使用 缓存&#xff08;Cache&#xff09; 来提升性能。但由于内存有限&#xff0c;缓存不可能无限增长&#xff0c;于是需要策略决定&am…...