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

这篇文章由 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中文网其他相关文章!

声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
如何使用Python查找文本文件的ZIPF分布如何使用Python查找文本文件的ZIPF分布Mar 05, 2025 am 09:58 AM

本教程演示如何使用Python处理Zipf定律这一统计概念,并展示Python在处理该定律时读取和排序大型文本文件的效率。 您可能想知道Zipf分布这个术语是什么意思。要理解这个术语,我们首先需要定义Zipf定律。别担心,我会尽量简化说明。 Zipf定律 Zipf定律简单来说就是:在一个大型自然语言语料库中,最频繁出现的词的出现频率大约是第二频繁词的两倍,是第三频繁词的三倍,是第四频繁词的四倍,以此类推。 让我们来看一个例子。如果您查看美国英语的Brown语料库,您会注意到最频繁出现的词是“th

我如何使用美丽的汤来解析HTML?我如何使用美丽的汤来解析HTML?Mar 10, 2025 pm 06:54 PM

本文解释了如何使用美丽的汤库来解析html。 它详细介绍了常见方法,例如find(),find_all(),select()和get_text(),以用于数据提取,处理不同的HTML结构和错误以及替代方案(SEL)

如何在Python中下载文件如何在Python中下载文件Mar 01, 2025 am 10:03 AM

Python 提供多种从互联网下载文件的方法,可以使用 urllib 包或 requests 库通过 HTTP 进行下载。本教程将介绍如何使用这些库通过 Python 从 URL 下载文件。 requests 库 requests 是 Python 中最流行的库之一。它允许发送 HTTP/1.1 请求,无需手动将查询字符串添加到 URL 或对 POST 数据进行表单编码。 requests 库可以执行许多功能,包括: 添加表单数据 添加多部分文件 访问 Python 的响应数据 发出请求 首

python中的图像过滤python中的图像过滤Mar 03, 2025 am 09:44 AM

处理嘈杂的图像是一个常见的问题,尤其是手机或低分辨率摄像头照片。 本教程使用OpenCV探索Python中的图像过滤技术来解决此问题。 图像过滤:功能强大的工具 图像过滤器

如何使用Python使用PDF文档如何使用Python使用PDF文档Mar 02, 2025 am 09:54 AM

PDF 文件因其跨平台兼容性而广受欢迎,内容和布局在不同操作系统、阅读设备和软件上保持一致。然而,与 Python 处理纯文本文件不同,PDF 文件是二进制文件,结构更复杂,包含字体、颜色和图像等元素。 幸运的是,借助 Python 的外部模块,处理 PDF 文件并非难事。本文将使用 PyPDF2 模块演示如何打开 PDF 文件、打印页面和提取文本。关于 PDF 文件的创建和编辑,请参考我的另一篇教程。 准备工作 核心在于使用外部模块 PyPDF2。首先,使用 pip 安装它: pip 是 P

如何在django应用程序中使用redis缓存如何在django应用程序中使用redis缓存Mar 02, 2025 am 10:10 AM

本教程演示了如何利用Redis缓存以提高Python应用程序的性能,特别是在Django框架内。 我们将介绍REDIS安装,Django配置和性能比较,以突出显示BENE

引入自然语言工具包(NLTK)引入自然语言工具包(NLTK)Mar 01, 2025 am 10:05 AM

自然语言处理(NLP)是人类语言的自动或半自动处理。 NLP与语言学密切相关,并与认知科学,心理学,生理学和数学的研究有联系。在计算机科学

如何使用TensorFlow或Pytorch进行深度学习?如何使用TensorFlow或Pytorch进行深度学习?Mar 10, 2025 pm 06:52 PM

本文比较了Tensorflow和Pytorch的深度学习。 它详细介绍了所涉及的步骤:数据准备,模型构建,培训,评估和部署。 框架之间的关键差异,特别是关于计算刻度的

See all articles

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
2 周前By尊渡假赌尊渡假赌尊渡假赌
仓库:如何复兴队友
4 周前By尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒险:如何获得巨型种子
3 周前By尊渡假赌尊渡假赌尊渡假赌

热工具

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

适用于 Eclipse 的 SAP NetWeaver 服务器适配器

适用于 Eclipse 的 SAP NetWeaver 服务器适配器

将Eclipse与SAP NetWeaver应用服务器集成。

mPDF

mPDF

mPDF是一个PHP库,可以从UTF-8编码的HTML生成PDF文件。原作者Ian Back编写mPDF以从他的网站上“即时”输出PDF文件,并处理不同的语言。与原始脚本如HTML2FPDF相比,它的速度较慢,并且在使用Unicode字体时生成的文件较大,但支持CSS样式等,并进行了大量增强。支持几乎所有语言,包括RTL(阿拉伯语和希伯来语)和CJK(中日韩)。支持嵌套的块级元素(如P、DIV),

Atom编辑器mac版下载

Atom编辑器mac版下载

最流行的的开源编辑器