首页 > 后端开发 > Python教程 > 使用 RAG 和 FGA 构建具有企业级安全性的 AI 应用程序

使用 RAG 和 FGA 构建具有企业级安全性的 AI 应用程序

Mary-Kate Olsen
发布: 2024-11-19 11:00:03
原创
253 人浏览过

这篇文章由 Bartosz Pietrucha 撰写

介绍

构建企业级 LLM 应用程序是当今商业环境中的必要条件。虽然模型和 API 的可访问性正在提高,但仍然存在一个重大挑战:确保其安全性并有效管理其权限。

为了解决这个问题,细粒度授权 (FGA) 和检索增强生成 (RAG) 是构建安全、上下文感知的 AI 应用程序并保持严格访问控制的有效策略。在本文中,我们将探讨如何在医疗保健环境中应用 FGA 和 RAG,同时保护敏感数据。

我们将指导您实现基于关系的访问控制 (ReBAC) 授权系统,该系统支持使用三种工具进行实时更新:AstraDB、Langflow 和 Permit.io。

用例示例:医疗保健应用

为了更好地了解 LLM 申请中授权的复杂性以及 FGA 和 RAG 提供的解决方案,我们可以看看数字医疗保健领域 - 因为它提供了一个完美的示例,其中人工智能功能和严格的安全性都是必不可少的。医疗保健提供者越来越希望利用法学硕士来简化工作流程、改进决策并提供更好的患者护理。医生和患者都希望通过聊天机器人等直观的人工智能界面轻松访问医疗记录。

然而,医疗数据高度敏感,应谨慎监管。虽然法学硕士可以提供智能见解,但我们必须确保他们仅访问和披露用户有权查看的信息。例如,医生应该只能看到他们指定的医疗中心的诊断,而患者应该只能访问他们自己的记录。

通过细粒度授权确保安全

继续讨论数字医疗保健示例,让我们看一个医疗应用程序的示例。

此应用程序由多个资源、几个角色以及这些实体之间的一些关系组成:

  1. 资源类型 :

    • 医疗中心(例如伦敦、华沙)
    • 参观(例如上午参观、下午参观)
    • 诊断(例如糖尿病、头痛、病毒)
  2. 角色 :

    • 医生(例如 Bartosz 医生)
    • 患者(例如,Gabriel、Olga)
  3. 关系 :

    • 医生被分配到医疗中心
    • 属于医疗中心的访问
    • 诊断是就诊的一部分
    • 患者与其就诊相关

如您所见,我们的资源的层次关系意味着实施传统的基于角色的访问控制(直接分配权限)是不够的。

此应用程序授权的复杂性将要求我们使用更细粒度的授权 (FGA) 解决方案 - 在本例中为基于关系的访问控制 (ReBAC)。

ReBAC 是一种受 Google 桑给巴尔论文启发的授权模型,它从系统中实体之间的关系中获取权限 - 与直接分配权限的传统基于角色的访问控制 (RBAC) 不同。

ReBAC 的强大之处在于如何通过这些关系派生权限。让我们看一下示例的视觉表示:

Building AI Applications with Enterprise-Grade Security Using RAG and FGA

在上面的例子中,Bartosz 医生能够访问病毒诊断并不是因为直接授予许可,而是因为他被分配到华沙医疗中心,其中包含下午就诊,其中包含诊断结果。因此,这些资源之间的关系形成了一条链,允许我们派生访问权限。

使用这种方法有明显的好处:

  • 它自然地模拟现实世界的组织结构
  • 权限会随着关系的变化而自动调整
  • 它提供细粒度的控制,同时保持可扩展性

但挑战并不止于此 - 当我们正在构建一个需要与法学硕士合作的系统时,它需要具有实时评估这些关系链的能力。在下一节中,我们将学习如何创建一个实现来实现这一点。

在继续之前,让我们快速回顾一下我们想要确保到位的授权规则:

  1. 只有与医疗中心有有效关系的医生才能查看其就诊情况
  2. 对诊断的访问是从这些关系自动得出的
  3. 关系的变化(例如医生调动)会立即影响访问权限

这些要求可以通过使用检索增强生成(RAG)来实现。

检索增强生成 (RAG)

RAG(检索增强生成)是一种通过结合两个关键步骤来增强 LLM 输出的技术:首先,从知识库中检索相关信息,然后使用该信息来增强 LLM 的上下文,以实现更准确的生成。虽然 RAG 可以与传统数据库或文档存储配合使用,但矢量数据库对于此目的特别强大,因为它们可以执行语义相似性搜索,即使在确切的关键字不匹配时也能找到概念上相关的信息。

在实践中,这意味着当用户询问“心脏问题”时,系统可以检索有关“心脏问题”或“心血管疾病”的相关文档,使LLM的回答更加准确和全面。然后,“生成”部分涉及法学硕士将检索到的上下文与其预先训练的知识相结合,以生成基于您的特定数据的相关、事实响应。

对于我们的实施,我们将使用 AstraDB 作为我们的矢量数据库。 AstraDB 具有以下优势:

  • 它通过嵌入有效地存储和搜索
  • 它可以随着数据的增长而很好地扩展
  • 它与像 Langflow 这样的 LLM 链很好地集成(我们将在文章后面介绍)

为了实现我们的 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 解决方案利用两个不同但相互关联的流程来提供对医疗信息的安全访问:

1. 摄取流程

摄取流负责将诊断及其各自的嵌入加载到 AstraDB 中。我们使用 MistralAI 为每个诊断生成嵌入,从而可以稍后对诊断数据进行语义搜索。此流程涉及的关键组件是:

  • 创建列表:此组件用于创建要摄取到 AstraDB 中的诊断列表。
  • MistralAI Embeddings:该组件为每个诊断生成嵌入,这些嵌入存储在 AstraDB 中。
  • AstraDB:AstraDB 充当向量存储,其中存储诊断及其嵌入以供进一步检索。 Building AI Applications with Enterprise-Grade Security Using RAG and FGA

2. 聊天流程

聊天流程负责与用户交互并向他们提供所需的诊断数据。下面的图片应该从左到右阅读(第一张图片的右侧延续第二张图片的左侧):

Building AI Applications with Enterprise-Grade Security Using RAG and FGA

Building AI Applications with Enterprise-Grade Security Using RAG and FGA

注意: 还有一个额外的“_ Pip Install” _ 组件,仅执行一次以安装许可模块。这是因为我们正在 DataStax 低代码平台上实现 LangFlow。此步骤相当于在本地执行 pip install grant

聊天流程中的操作顺序如下:

  1. 用户输入:用户通过键入查询来发起交互。
  • 示例:“我们有诊断患有糖尿病的患者吗?
  1. 检索诊断:根据用户的输入查询AstraDB以获取相关诊断。
  • 搜索结果示例(在上面的流程图像上用 1 标记):

Building AI Applications with Enterprise-Grade Security Using RAG and FGA

  1. 根据权限过滤数据:在将响应发送到下一个处理组件之前,为响应初始查询的 LLM 创建上下文,我们使用自定义 PermitFilter 组件过滤检索到的诊断,以确保用户拥有权限查看每个诊断。
  • 过滤结果示例(在上面的流程图像上用 2 标记):

Building AI Applications with Enterprise-Grade Security Using RAG and FGA

  1. 生成响应:过滤后,允许的诊断将用作上下文,使用 MistralAI 为用户提示生成响应。
  • 使用授权步骤过滤上下文的示例提示:
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 存储库中找到,您可以在其中找到:

  • 自定义 LangFlow 组件
  • Permit.io 集成代码
  • 详细设置说明
  • 示例查询和响应

要开始与我们的 AI 助手进行交互并实施授权检查,我们只需启动 LangFlow 游乐场即可。在下面的示例中,我的身份验证为 bartosz@health.app,这意味着我只能访问下午访问和晚上访问,而不能访问患有糖尿病的上午访问。这意味着法学硕士在其上下文中没有有关糖尿病的信息。

Building AI Applications with Enterprise-Grade Security Using RAG and FGA

结论

在利用 LLM 功能的同时确保对敏感医疗数据的访问安全既是首要任务,也是一项挑战。通过结合RAG和细粒度授权,我们可以构建既智能又安全的AI应用。主要好处是:

  • 通过 RAG 进行上下文感知响应
  • 通过 ReBAC 进行精确的访问控制
  • 组织关系的自然建模
  • 可扩展的安全性,适应不断变化的关系

使用 LangFlow 和 Permit.io 等工具,医疗保健提供者可以实施基于关系的访问控制系统,动态响应角色和关系变化,确保只有授权个人才能访问数据。通过集成这些解决方案,医疗保健组织可以有效地利用人工智能来改善患者护理,而不会影响安全性。

以上是使用 RAG 和 FGA 构建具有企业级安全性的 AI 应用程序的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:dev.to
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板