首頁 >後端開發 >Python教學 >使用 RAG 和 FGA 建立具有企業級安全性的 AI 應用程式

使用 RAG 和 FGA 建立具有企業級安全性的 AI 應用程式

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-11-19 11:00:03263瀏覽

這篇文章由 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