AI知识库

53AI知识库

学习大模型的前沿技术与行业应用场景


基于Metadata过滤实现RAG应用中知识权限的访问控制
发布日期:2024-04-26 11:56:14 浏览次数: 2432 来源:少军的AI空间


当越来越多企业构建基于企业知识库的LLM+RAG应用时,自然而然会碰到一个目前讨论较少的问题:基于企业用户权限对大模型RAG应用做问答内容输出范围的控制。即,RAG应用只能回答当前用户有权限可访问的知识内容。


访问控制不是一个新鲜的话题,对于熟练的程序员来说,很自然能想到RBAC、ABAC、PBAC等多种方案,结合场景做基于角色、属性、策略的各类访问控制。


在LLM RAG应用中,首先会有一个存放各类原始企业知识文档的存储。直接在知识库里做权限访问控制,粒度可以到文档级别。通过划分知识库、建立多级文件夹、打标签等方式做强制限制RAG应用在指定范围里做检索。阿里云百炼模型服务平台1.0版用的就是打标签的方式,把上传到知识库的文档通过标签归类聚合,限制RAG应用在该范围里做知识问答。


知识库里的的文档接着做分块Chunk、Embedding后存放向量数据,并用于提供Retrieval功能的向量数据库。自然而然地,我们立刻想到可以在检索向量数据库时做访问控制,基于当前用户角色权限检索出其可以访问的向量数据给到LLM。有的在向量数据库层面支持身份权限访问控制,比如Zilliz的RBAC实践:轻松管理基于 RAG 的知识库!RBAC 的最佳实践来了;更多的时候需要和应用结合更灵活的控制权限,就需要对向量数据库中的数据增加元数据metadata,在metadata中把诸如数据密级、分类、单位部门、时间、地点等信息加入,用于在后续检索中做查询过滤。


比如,我们在向量数据库中增加如下的metadata信息:

collection.add(documents=["这是公司2023年上半年的公开财报。财报中针对..."],              metadatas =[{"auth_level": 1, "category": "公司财报", "department": "IR", "role":"all", "year": "2023"}],              ids="id1")
collection.add(documents=["2023年饮料事业部内部经营分析报告,针对事业部在2023年的经营策略..."], metadatas =[{"auth_level": 2, "category": "经营分析报告", "department": "饮料事业部", "role":"bev|ir|IT|sec", "year": "2023"}], ids="id2")
collection.add(documents=["机密:公司未来一年的重点投资方向和投资策略..."], metadatas =[{"auth_level": 3, "category": "投资策略", "department": "投资部", "role":"hqhead|boardsmembers", "year": "2024"}], ids="id3")


然后写一个检索函数,简单根据前端应用传入的auth_level授权级别做数据查询过滤。

def vector_search_with_rbac(query_text, user_auth_level):   if not isinstance(user_auth_level, int) or user_auth_level < 0:       raise ValueError("Invalid user_auth_level. Must be a non-negative integer.")
try: results = collection.query(query_texts=[query_text],n_results=10, where={"auth_level": user_auth_level}) return results except Exception as e: print(f"An error occurred: {e}") return []


可以基于上面的思路,进一步扩展到根据前端应用传入的时间地点、分类类别、单位部门、角色岗位等元数据信息,做各种数据查询过滤,以满足当前用户只能得到他有权限可以知道的回答内容。


元数据内容,可以是把第一环节知识库中配置好的权限转化过来存入,也可以是直接根据前端应用中的权限配置信息转化直接存入。


总的来说,对企业级RAG应用,权限访问控制是绕不过去的一关,只有做好这步,才能让RAG应用更加放心的投产使用。



53AI,企业落地应用大模型首选服务商

产品:大模型应用平台+智能体定制开发+落地咨询服务

承诺:先做场景POC验证,看到效果再签署服务协议。零风险落地应用大模型,已交付160+中大型企业

联系我们

售前咨询
186 6662 7370
预约演示
185 8882 0121

微信扫码

与创始人交个朋友

回到顶部

 
扫码咨询