ホームページ バックエンド開発 Python チュートリアル RAG と FGA を使用したエンタープライズ グレードのセキュリティを備えた AI アプリケーションの構築

RAG と FGA を使用したエンタープライズ グレードのセキュリティを備えた AI アプリケーションの構築

Nov 19, 2024 am 11:00 AM

この投稿は Bartosz Pietrucha によって書かれています

導入

今日のビジネス環境では、エンタープライズ グレードの LLM アプリケーションを構築することが不可欠です。モデルと API のアクセシビリティは向上していますが、セキュリティの確保と権限の効果的な管理という重要な課題が 1 つ残っています。

これに対処するには、ファイングレイン認証 (FGA) と取得拡張生成 (RAG) が、厳格なアクセス制御を維持する安全でコンテキスト認識型の AI アプリケーションを構築するための効果的な戦略です。この記事では、機密データを保護しながら医療現場で FGA と RAG をどのように適用できるかを検討します。

これを行うには、AstraDB、Langflow、Permit.io の 3 つのツールを使用してリアルタイム更新をサポートするリレーションシップベースのアクセス制御 (ReBAC) 認証システムの実装をガイドします。

使用例: ヘルスケア アプリケーション

LLM アプリケーションにおける認証の複雑さ、および FGA と RAG が提供するソリューションをより深く理解するために、デジタル ヘルスケア分野に注目してみましょう。これは、AI 機能と厳格なセキュリティの両方が不可欠な完璧な例を示しているためです。医療提供者は、ワークフローを合理化し、意思決定を改善し、より良い患者ケアを提供するために、LLM を活用することをますます望んでいます。医師も患者も同様に、チャットボットなどの直感的な AI インターフェイスを通じて医療記録に簡単にアクセスできることを望んでいます。

ただし、医療データは非常に機密性が高いため、慎重に規制する必要があります。 LLM はインテリジェントな洞察を提供できますが、ユーザーが表示を許可されている情報のみにアクセスして公開するようにする必要があります。たとえば、医師は割り当てられた医療センターからの診断のみを見る必要があり、患者は自分の記録にのみアクセスできるようにする必要があります。

きめ細かい認証によるセキュリティ

デジタル ヘルスケアの例に進み、医療アプリケーションの例を見てみましょう。

このアプリケーションは、いくつかのリソース、いくつかのロール、およびこれらのエンティティ間のいくつかの関係で構成されています。

  1. リソースタイプ :

    • 医療センター (例: ロンドン、ワルシャワ)
    • 訪問 (例: 午前の訪問、午後の訪問)
    • 診断 (糖尿病、頭痛、ウイルスなど)
  2. 役割 :

    • 医師 (例: Bartosz 博士)
    • 患者 (例: ガブリエル、オルガ)
  3. 関係 :

    • 医師は医療センターに配置されます
    • 訪問は医療センターに属します
    • 診断は訪問の一部です
    • 患者は訪問につながっています

ご覧のとおり、リソースの階層関係は、権限が直接割り当てられる従来のロールベースのアクセス制御の実装では不十分であることを意味します。

このアプリケーションの認証は複雑であるため、よりきめ細かい認証 (FGA) ソリューション、この場合は関係ベースのアクセス制御 (ReBAC) を使用する必要があります。

Google のザンジバル論文にヒントを得た認可モデルである ReBAC は、権限が直接割り当てられる従来のロールベースのアクセス制御 (RBAC) とは異なり、システム内のエンティティ間の関係から権限を導き出します。

ReBAC の威力は、これらの関係を通じて権限がどのように得られるかにあります。この例を視覚的に表現してみましょう:

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

上記の例では、バルトシュ医師がウイルス診断にアクセスできるのは、直接付与された許可によるものではなく、ワルシャワ医療センターに割り当てられており、午後の診察が含まれており、そこに診断が含まれているためです。 。したがって、これらのリソース間の関係は、アクセス許可を導出できるチェーンを形成します。

このアプローチを使用することには明らかな利点があります:

  • 現実世界の組織構造を自然にモデル化します
  • 関係の変化に応じて権限が自動的に適応されます
  • スケーラビリティを維持しながら、きめ細かい制御を提供します

しかし、課題はそこで終わりません。LLM と連携する必要があるシステムを構築しているため、これらの関係チェーンをリアルタイムで評価する機能が必要です。次のセクションでは、それを可能にする実装を作成する方法を学びます。

続行する前に、導入されていることを確認する承認ルールを簡単に確認してみましょう。

  1. 医療センターと有効な関係を持つ医師のみがその医療センターの診察を受けることができます
  2. 診断へのアクセスは、これらの関係から自動的に導出されます
  3. 人間関係の変化(医師の配置転換など)は、アクセス権に直ちに影響します

これらの要件は、検索拡張生成 (RAG) を使用することで実現できます。

検索拡張生成 (RAG)

RAG (検索拡張生成) は、2 つの重要なステップを組み合わせることによって LLM 出力を強化する技術です。まず、ナレッジ ベースから関連情報を取得し、次にその情報を使用して LLM のコンテキストを拡張し、より正確に生成します。 RAG は従来のデータベースやドキュメント ストアと連携できますが、ベクトル データベースは意味的類似性検索を実行でき、キーワードが完全に一致しない場合でも概念的に関連する情報を見つけることができるため、この目的には特に強力です。

実際には、これは、ユーザーが「心臓の問題」について質問すると、システムが「心臓の問題」または「心血管疾患」に関する関連文書を取得できることを意味し、LLM の応答がより正確かつ包括的になります。次に、「生成」部分では、LLM がこの取得したコンテキストを事前トレーニングされた知識と合成して、特定のデータに基づいた関連性のある事実に基づく応答を生成します。

実装では、ベクター データベースとして AstraDB を使用します。 AstraDB には次の利点があります:

  • 埋め込みを使用して効率的に保存および検索します
  • データの増加に合わせて適切に拡張できます
  • Langflow のような LLM チェーンとうまく統合します (これについては記事の後半で説明します)

RAG パイプラインを実装するには、視覚的なインターフェイスを通じてこれらのシステムを直感的に構築できるオープンソース フレームワークである LangFlow も使用します。 LangFlow システムは、ローカルまたはクラウドでホストされる DataStax プラットフォームで実行される Python 環境を使用して開発できます。私たちのケースでは、サーバーレス (ベクター) AstraDB データベースを https://astra.datastax.com

に作成することで 2 番目のオプションを選択しています。

私たちの実装では、認可チェックは重要な瞬間、つまりベクトルデータベースからデータを取得した後、データをコンテキストとして LLM に提供するに行われる必要があります。このようにして、最初にすべての関連情報を見つけ、その後、未承認のデータが LLM に到達する前に除外することで、検索効率を維持します。 LLM は、ユーザーが表示を許可されている情報のみを使用および公開できます。

これらのセキュリティ チェックは、複雑な関係チェーンをリアルタイムで評価するためのインフラストラクチャを提供する Permit.io を使用して実装されます。データが増大し、関係がより複雑になるにつれて、システムは適切な権限を持つユーザーのみが各情報にアクセスできるようにし続けます。

Permit の使用を開始するには、Web サイト (https://app.permit.io) にアクセスして無料アカウントを簡単に作成できます。無料アカウントが作成されると、Permit のダッシュボードにアクセスできるようになり、認可ポリシーの設定、ユーザーとロールの管理、Permit のアプリケーションへの統合が可能になります。無料利用枠では、関係ベースのアクセス制御 (ReBAC) を備えたデジタル ヘルスケアのサンプルを作成するために必要な機能がすべて提供されます。

LangFlow と Permit はどちらも作業を開始するための無料アカウントを提供しているため、そのようなシステムを構築して自分でどのように機能するかを確認するために何も支払う必要はありません。

実装ガイド

実装の詳細に入る前に、使用するツールである Langflow を理解することが重要です。 LangChain 上に構築された Langflow は、ビジュアル インターフェイスを通じて複雑な LLM アプリケーションの作成を簡素化するオープンソース フレームワークです。 LangChain は、テキスト分割、埋め込み生成、思考連鎖プロンプトなどの一般的な LLM 操作用の標準化されたコンポーネントを提供することにより、堅牢な基盤を提供します。これらのコンポーネントは、データの取り込みから応答の生成まですべてを処理する強力なパイプラインに組み立てることができます。

Langflow が私たちのユースケースにとって特に価値があるのは、そのビジュアルなビルダー インターフェイスです。これにより、フローチャートを描くのと同じように、コンポーネントをグラフィカルに接続することでこれらのパイプラインを構築できます。この視覚的なアプローチにより、最初のユーザー入力から最終的な承認された応答に至るまで、アプリケーション内のデータ フローを理解し、変更することが容易になります。さらに、Langflow はオープンソースであるため、無料で使用でき、カスタム コンポーネントで拡張できることも意味します。これは、認証チェックを実装するために非常に重要です。

当社の Langflow ソリューションは、相互接続された 2 つの異なるフローを活用して、医療情報への安全なアクセスを提供します。

1.摂取フロー

取り込みフローは、診断をそれぞれの埋め込みとともに AstraDB にロードする役割を果たします。 MistralAI を使用して各診断のエンベディングを生成し、後で診断データに対してセマンティック検索を実行できるようにします。このフローに関係する主要なコンポーネントは次のとおりです:

  • リストの作成: このコンポーネントは、AstraDB に取り込む診断リストを作成するために使用されます。
  • MistralAI エンベディング : このコンポーネントは各診断のエンベディングを生成し、AstraDB に保存されます。
  • AstraDB : AstraDB は、診断とその埋め込みがさらに検索できるように保存されるベクトル ストアとして機能します。 Building AI Applications with Enterprise-Grade Security Using RAG and FGA

2. チャットの流れ

チャット フローは、ユーザーと対話し、必要な診断データを提供する責任があります。以下の画像は左から右に読まれることになっています (最初の画像の右側が 2 番目の画像の左側として続きます):

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

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

? 注: 許可 モジュールをインストールするために 1 回だけ実行される追加の「_ Pip Install」 _ コンポーネントがあります。これは、DataStax ローコード プラットフォームに LangFlow を実装しているためです。このステップは、 pip installmit をローカルで実行することと同じです。

チャット フローの一連の操作は次のとおりです:

  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 コンポーネント

実装で重要な役割を果たす PermitFilter コンポーネントを実行するには、Permit の Policy Decision Point (PDP) の実行インスタンスが必要です。 PDP は、ポリシーを評価し、特定のユーザーおよびリソースに対して特定のアクションを許可するかどうかを決定する責任があります。コンテキストが言語モデルに到達するにこの権限チェックを強制することで、機密情報の漏洩を防ぎ、アクセス制御ポリシーの適用を確実にします。

実際に見てみる

完全な実装は、以下の GitHub リポジトリで入手できます。

  • カスタム LangFlow コンポーネント
  • Permit.io 統合コード
  • 詳細なセットアップ手順
  • クエリと応答の例

認証チェックが実装された AI アシスタントとの対話を開始するには、LangFlow プレイグラウンドを開始するだけです。以下の例では、私は bartosz@health.app として認証されています。これは、糖尿病のある午前の訪問はなしの午後の訪問と夕方の訪問のみにアクセスできることを意味します。これは、LLM がそのコンテキスト内で糖尿病に関する情報を持っていないことを意味します。

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

結論

LLM 機能を活用しながら機密医療データへのアクセスを保護することは、優先事項であると同時に課題でもあります。 RAG ときめ細かい認証を組み合わせることで、インテリジェントで安全な AI アプリケーションを構築できます。主な利点は次のとおりです:

  • RAG を介したコンテキスト認識型応答
  • ReBAC による正確なアクセス制御
  • 組織関係の自然なモデリング
  • 変化する関係に適応するスケーラブルなセキュリティ

医療提供者は、LangFlow や Permit.io などのツールを使用して、役割や関係の変化に動的に対応する関係ベースのアクセス制御システムを実装し、許可された個人のみがデータにアクセスできるようにすることができます。これらのソリューションを統合することで、医療機関は AI を効果的に活用して、セキュリティを犠牲にすることなく患者ケアを向上させることができます。

以上がRAG と FGA を使用したエンタープライズ グレードのセキュリティを備えた AI アプリケーションの構築の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットな記事タグ

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

HTMLを解析するために美しいスープを使用するにはどうすればよいですか? HTMLを解析するために美しいスープを使用するにはどうすればよいですか? Mar 10, 2025 pm 06:54 PM

HTMLを解析するために美しいスープを使用するにはどうすればよいですか?

Pythonでファイルをダウンロードする方法 Pythonでファイルをダウンロードする方法 Mar 01, 2025 am 10:03 AM

Pythonでファイルをダウンロードする方法

Pythonでの画像フィルタリング Pythonでの画像フィルタリング Mar 03, 2025 am 09:44 AM

Pythonでの画像フィルタリング

Pythonを使用してテキストファイルのZIPF配布を見つける方法 Pythonを使用してテキストファイルのZIPF配布を見つける方法 Mar 05, 2025 am 09:58 AM

Pythonを使用してテキストファイルのZIPF配布を見つける方法

Pythonを使用してPDFドキュメントの操作方法 Pythonを使用してPDFドキュメントの操作方法 Mar 02, 2025 am 09:54 AM

Pythonを使用してPDFドキュメントの操作方法

DjangoアプリケーションでRedisを使用してキャッシュする方法 DjangoアプリケーションでRedisを使用してキャッシュする方法 Mar 02, 2025 am 10:10 AM

DjangoアプリケーションでRedisを使用してキャッシュする方法

TensorflowまたはPytorchで深い学習を実行する方法は? TensorflowまたはPytorchで深い学習を実行する方法は? Mar 10, 2025 pm 06:52 PM

TensorflowまたはPytorchで深い学習を実行する方法は?

Natural Language Toolkit(NLTK)の紹介 Natural Language Toolkit(NLTK)の紹介 Mar 01, 2025 am 10:05 AM

Natural Language Toolkit(NLTK)の紹介

See all articles