这篇文章由 Bartosz Pietrucha 撰写
构建企业级 LLM 应用程序是当今商业环境中的必要条件。虽然模型和 API 的可访问性正在提高,但仍然存在一个重大挑战:确保其安全性并有效管理其权限。
为了解决这个问题,细粒度授权 (FGA) 和检索增强生成 (RAG) 是构建安全、上下文感知的 AI 应用程序并保持严格访问控制的有效策略。在本文中,我们将探讨如何在医疗保健环境中应用 FGA 和 RAG,同时保护敏感数据。
我们将指导您实现基于关系的访问控制 (ReBAC) 授权系统,该系统支持使用三种工具进行实时更新:AstraDB、Langflow 和 Permit.io。
为了更好地了解 LLM 申请中授权的复杂性以及 FGA 和 RAG 提供的解决方案,我们可以看看数字医疗保健领域 - 因为它提供了一个完美的示例,其中人工智能功能和严格的安全性都是必不可少的。医疗保健提供者越来越希望利用法学硕士来简化工作流程、改进决策并提供更好的患者护理。医生和患者都希望通过聊天机器人等直观的人工智能界面轻松访问医疗记录。
然而,医疗数据高度敏感,应谨慎监管。虽然法学硕士可以提供智能见解,但我们必须确保他们仅访问和披露用户有权查看的信息。例如,医生应该只能看到他们指定的医疗中心的诊断,而患者应该只能访问他们自己的记录。
继续讨论数字医疗保健示例,让我们看一个医疗应用程序的示例。
此应用程序由多个资源、几个角色以及这些实体之间的一些关系组成:
资源类型 :
角色 :
关系 :
如您所见,我们的资源的层次关系意味着实施传统的基于角色的访问控制(直接分配权限)是不够的。
此应用程序授权的复杂性将要求我们使用更细粒度的授权 (FGA) 解决方案 - 在本例中为基于关系的访问控制 (ReBAC)。
ReBAC 是一种受 Google 桑给巴尔论文启发的授权模型,它从系统中实体之间的关系中获取权限 - 与直接分配权限的传统基于角色的访问控制 (RBAC) 不同。
ReBAC 的强大之处在于如何通过这些关系派生权限。让我们看一下示例的视觉表示:
在上面的例子中,Bartosz 医生能够访问病毒诊断并不是因为直接授予许可,而是因为他被分配到华沙医疗中心,其中包含下午就诊,其中包含诊断结果。因此,这些资源之间的关系形成了一条链,允许我们派生访问权限。
使用这种方法有明显的好处:
但挑战并不止于此 - 当我们正在构建一个需要与法学硕士合作的系统时,它需要具有实时评估这些关系链的能力。在下一节中,我们将学习如何创建一个实现来实现这一点。
在继续之前,让我们快速回顾一下我们想要确保到位的授权规则:
这些要求可以通过使用检索增强生成(RAG)来实现。
RAG(检索增强生成)是一种通过结合两个关键步骤来增强 LLM 输出的技术:首先,从知识库中检索相关信息,然后使用该信息来增强 LLM 的上下文,以实现更准确的生成。虽然 RAG 可以与传统数据库或文档存储配合使用,但矢量数据库对于此目的特别强大,因为它们可以执行语义相似性搜索,即使在确切的关键字不匹配时也能找到概念上相关的信息。
在实践中,这意味着当用户询问“心脏问题”时,系统可以检索有关“心脏问题”或“心血管疾病”的相关文档,使LLM的回答更加准确和全面。然后,“生成”部分涉及法学硕士将检索到的上下文与其预先训练的知识相结合,以生成基于您的特定数据的相关、事实响应。
对于我们的实施,我们将使用 AstraDB 作为我们的矢量数据库。 AstraDB 具有以下优势:
为了实现我们的 RAG 管道,我们还将使用 LangFlow,这是一个开源框架,可以通过其可视化界面直观地构建这些系统。 LangFlow 系统可以使用本地运行的 Python 环境或云托管的 DataStax 平台进行开发。在我们的例子中,我们选择第二个选项,通过在以下位置创建无服务器(矢量)AstraDB 数据库:https://astra.datastax.com
在我们的实现中,授权检查应该在关键时刻进行 - 从矢量数据库检索数据之后,在将其作为上下文提供给 LLM 之前。通过这种方式,我们首先查找所有相关信息,然后在未经授权的数据到达法学硕士之前过滤掉未经授权的数据,从而保持搜索效率。 LLM 只能使用和透露用户有权查看的信息。
这些安全检查是使用 Permit.io 实现的,它提供了实时评估复杂关系链的基础设施。随着您的数据增长和关系变得更加复杂,系统将继续确保每条信息只能由具有适当授权的人员访问。
要开始使用 Permit,您可以通过访问网站 https://app.permit.io 轻松创建免费帐户。创建免费帐户后,您将可以访问 Permit 的仪表板,您可以在其中设置授权策略、管理用户和角色,并将 Permit 集成到您的应用程序中。免费套餐提供了创建具有基于关系的访问控制 (ReBAC) 的数字医疗示例所需的所有功能。
LangFlow 和 Permit 都提供免费帐户来开始工作,因此您无需支付任何费用来构建这样的系统并亲自看看它是如何工作的。
在我们深入了解实现细节之前,了解我们将使用的工具 - Langflow 非常重要。 Langflow 构建于 LangChain 之上,是一个开源框架,可通过可视化界面简化复杂的 LLM 应用程序的创建。 LangChain 通过为常见的 LLM 操作(如文本分割、嵌入生成和思路提示)提供标准化组件,提供了强大的基础。这些组件可以组装成强大的管道,处理从数据摄取到响应生成的所有事务。
Langflow 对我们的用例特别有价值的是它的可视化构建器界面,它允许我们通过图形方式连接组件来构建这些管道 - 类似于绘制流程图的方式。这种可视化方法使我们更容易理解和修改应用程序中的数据流,从初始用户输入到最终授权响应。此外,Langflow 的开源性质意味着它既可以免费使用,也可以使用自定义组件进行扩展,这对于实现我们的授权检查至关重要。
我们的 Langflow 解决方案利用两个不同但相互关联的流程来提供对医疗信息的安全访问:
摄取流负责将诊断及其各自的嵌入加载到 AstraDB 中。我们使用 MistralAI 为每个诊断生成嵌入,从而可以稍后对诊断数据进行语义搜索。此流程涉及的关键组件是:
聊天流程负责与用户交互并向他们提供所需的诊断数据。下面的图片应该从左到右阅读(第一张图片的右侧延续第二张图片的左侧):
? 注意: 还有一个额外的“_ Pip Install” _ 组件,仅执行一次以安装许可模块。这是因为我们正在 DataStax 低代码平台上实现 LangFlow。此步骤相当于在本地执行 pip install grant 。
聊天流程中的操作顺序如下:
Seasonal Migraine Flu virus with high fever --- You are a doctor's assistant and help to retrieve information about patients' diagnoses. Given the patients' diagnoses above, answer the question as best as possible. The retrieved diagnoses may belong to multiple patients. Question: list all the recent diagnoses Answer:
为了运行 PermitFilter 组件(该组件在我们的实现中起着至关重要的作用),我们需要 Permit 的策略决策点 (PDP) 的运行实例。 PDP 负责评估策略并决定是否允许特定用户和资源执行给定操作。通过在上下文到达语言模型之前强制执行此权限检查,我们可以防止敏感信息泄露并确保访问控制策略的执行。
完整的实现可以在我们的 GitHub 存储库中找到,您可以在其中找到:
要开始与我们的 AI 助手进行交互并实施授权检查,我们只需启动 LangFlow 游乐场即可。在下面的示例中,我的身份验证为 bartosz@health.app,这意味着我只能访问下午访问和晚上访问,而不能访问患有糖尿病的上午访问。这意味着法学硕士在其上下文中没有有关糖尿病的信息。
在利用 LLM 功能的同时确保对敏感医疗数据的访问安全既是首要任务,也是一项挑战。通过结合RAG和细粒度授权,我们可以构建既智能又安全的AI应用。主要好处是:
使用 LangFlow 和 Permit.io 等工具,医疗保健提供者可以实施基于关系的访问控制系统,动态响应角色和关系变化,确保只有授权个人才能访问数据。通过集成这些解决方案,医疗保健组织可以有效地利用人工智能来改善患者护理,而不会影响安全性。
以上是使用 RAG 和 FGA 构建具有企业级安全性的 AI 应用程序的详细内容。更多信息请关注PHP中文网其他相关文章!