分享
带有访问控制的 RAG
输入“/”快速插入内容
带有访问控制的 RAG
2024年8月19日修改
作者:向量检索实验室 | AI 搜索引擎
原文:
https://mp.weixin.qq.com/s/IChH1eIk...
原文链接:
https://www.pinecone.io/learn/rag-access-control/?utm_content=290774141&utm_medium=social&utm_source=twitter&hss_channel=tw-1287624141001109504
RAG 的访问控制是 RAG 在落地过程中一个很重要的环节,这篇来自 Pinecone 的文章介绍了基于 ReBAC 模型如何实现访问控制,以及当登陆不同用户时,相同问题给出不同的问答效果。enjoy~
访问控制在几乎所有面向用户的应用程序中都起着至关重要的作用,尤其是在涉及敏感信息的情况下。它在保护敏感信息方面发挥着重要作用,确保只有获得所需权限的人才能接触到这些信息。
在 RAG 应用程序中,很可能不是每个用户都能平等地访问所有索引文档。某些信息可能具有机密性,只有特定角色或指定人员才能访问--我们的 RAG 应用程序不能泄露任何敏感信息,这一点至关重要。这就凸显了强大而有效的访问控制机制的必要性。通过防止未经授权的访问,这些机制有助于保持数据的机密性。
在 Pinecone 中,您可以使用元数据将用户和角色与特定向量关联起来,但这并不符合关注点分离的核心架构原则:如果可以避免的话,系统不应过多地考虑 "外来 "因素。正如我们将在这篇文章中探讨的那样,RAG 用例非常适合查询后过滤流程,而且这种流程适合在数据库本身之外管理授权机制。
认证和授权
在具体实施 RAG 应用程序的访问控制之前,我们先来谈谈访问控制的组成部分,即身份验证和授权。
•
身份验证是验证用户身份的过程。这通常涉及用户提供某种形式的凭证,如用户名和密码。如果凭证与系统中存储的相符,用户就通过了身份验证,并被授予访问权限。
•
授权是确定特定身份可使用哪些资源的过程。有几种流行的授权范式:
◦
访问控制列表(ACL)--对资源的访问权限由被授予权限的用户列表决定。这是一种易于理解和实施的简单模式,但随着用户和资源数量的增加,管理起来会变得很困难。
◦
基于角色的访问控制(RBAC)--根据用户的角色授予访问权限。例如,"管理员 "角色可以访问所有内容,而 "访客 "角色的访问权限可能非常有限。这种模式比 ACL 更灵活,可扩展性更强,但管理起来仍然很复杂。
◦
基于属性的访问控制(ABAC)--根据属性组合授予访问权限。这些属性可以与用户(如角色、部门、位置)、资源(如类型、敏感性、位置)、操作(如读、写、删除)和上下文(如时间、网络、设备)相关联。这种模式具有最大的灵活性和可扩展性,但管理起来也最为复杂。
◦
基于关系的访问控制(ReBAC)--一种较新的模式,根据用户与资源之间的关系授予访问权限。例如,在社交网络应用程序中,用户可以访问与自己有某种 "关联 "的资源(如好友、关注者等)。这种模式可以处理复杂的访问控制场景,但实施和管理起来也很复杂。
RAG 应用程序的访问控制
既然我们已经对身份验证和授权有了很好的了解,那么让我们来看看如何在 RAG 应用程序中应用它们。粗略地说,我们可以把任何 RAG 系统分成两个阶段:摄取和查询。
•
在摄入阶段,我们必须将系统已知的身份与允许访问的资源关联起来。
•
在查询阶段,我们必须确定身份试图访问的文件中哪些是允许的,哪些不能包含在最终响应中。
为了演示 RAG 应用程序的基本授权流程,我们将应用 ReBAC 模型,原因如下:RBAC 和 ABAC 主要针对端点等应用资源的管理。例如,当我们构建一个应用程序时,我们希望确定哪个用户或角色可以执行映射到端点的特定操作。就 RAG 而言,授权的主要模式是在执行查询后过滤结果。这就要求我们在用户或角色与资源之间创建关系。
实际上,对于一组文档,我们将定义一组可能的类别。我们将为系统中的用户分配这些类别,并只允许他们访问属于其分配类别的文档。
我们将使用上一篇文章中介绍过的 RAG 应用程序 [1],并将其扩展为具有身份验证和授权功能(完整代码列表[2])。
为了方便身份验证和授权过程,我们将使用两种服务:
•
Clerk [3]
- 一个用户身份验证平台,开发人员可以用它来管理应用程序中的用户访问。它提供登录服务、双因素身份验证、会话管理和用户管理等功能,有助于确保应用程序的安全并保护用户数据。
•
Aserto [4]
是一个权限即服务平台,开发人员可利用它将授权纳入自己的应用程序。它提供基于策略的权限、基于角色和属性的访问控制以及基于关系的访问控制等功能,使管理应用程序中谁有权访问什么变得更容易。
💡 Clerk
首先,我们注册一个 Clerk 账户并创建一组用户:
我们要在这里标记 "Admin "用户拥有一些额外权限,因此我们要在用户条目中添加一些私人元数据: