このページでは、LLM を活用したアプリケーションを開発中のチームで役立てていただける、安全な設計パターンおよびプラクティスについて説明しています。アプリケーションの種類ごとに最も重大なリスクを概説し、緩和戦略を提示しています。
このページでは、LLM を活用したアプリケーションを開発中のチームで役立てていただける、安全な設計パターンおよびプラクティスについて説明しています。アプリケーションの種類ごとに最も重大なリスクを概説し、緩和戦略を提示しています。
AI チャットボットは、企業で最も早く採用された大規模言語モデル(LLM)のユースケースと言え、主に、カスタマーサービスおよびサポート、仮想ヘルプデスク、リード創出などに使用されています。基本設計はシンプルで、サードパーティの LLM や API サービスを使用して簡単に開発できますが、安全な設計原則を取り入れる必要があります。なぜなら、チャットボットが自社のビジネスを誤って伝える、不正確または不適切な情報を共有する、意図的かどうかにかかわらずユーザーに悪用される、などを防ぐ必要があるからです。
このセクションでは、以下のような脅威を防ぐための安全な設計のガイドラインを示します。
このセクションでは、基本的な LLM ベースのチャットアプリケーションや多くの LLM チャットボット アプリケーションで発生しうる問題を取り上げます。続くセクションでは、RAG アプリケーションや、LLM 対応エージェント(例:コーディングアシスタント)などの高度なユースケースについての安全な設計パターンを説明します。
言語モデルチャットボットは、会話型エージェントの一種で、会話を促し、応答を返すことに特化し、カスタマー サービス インターフェイスから教育プラットフォームに至るさまざまなアプリケーションに組み込まれています。このセクションでは、LLM チャットボットの一般的な設計パターンに焦点を当て、こうしたシステムを支えるアーキテクチャ、主要なテクノロジー、機能コンポーネントについて詳しく説明します。
図 1:チャットボットに対する一般的な脅威は、(1)信頼できない入力が行われる場合、(2)(たとえば、ファインチューニングにより)モデルのアライメントが不整合となる場合、(3)プロンプトインジェクションによってシステムプロンプトが上書きされる、あるいは抽出される場合、(4)出力が検証されていない場合に発生する。
単一目的のチャットボットは、カスタマーサポート、予約システム、FAQ の自動化といった特定の領域やタスクで、きわめて効果的に機能するように設計されています。例として、次のようなものが挙げられます。
ハイブリッドチャットボットは、ルールに基づいたアプローチと AI 主導のアプローチを組み合わせて、予測可能なやり取りにも複雑なやり取りにも効果的に対応します。例として、次のようなものが挙げられます。
標準的なショッピング支援を行う一方で、顧客からの複雑な問い合わせにも対応する小売業向けチャットボット
一般的な情報を提供するだけでなく、ユーザーに合わせた医療相談に応じる健康アドバイザリチャットボット
コンテキスト認識型チャットボットは、メモリ機能を備え、過去のやり取りに基づいて個別対応性の高い一貫性のある応答を返します。例として、次のようなものが挙げられます。
一般的な LLM ベースのチャットボットを使用する場合、効率性と応答性の向上は、次のコンポーネントや機能に依存します。
チャットボットのセキュリティ対策では、主に次の点を考慮します。
最もシンプルな形式のチャットボットは、大規模言語モデルと直接やり取りすることで成り立っています。LLM は、自己ホスト型か、サードパーティのサービスとして提供され、設計されたタスクを実行できるように十分にアライメントされています。
アライメントは次のように実行します。
LLM の応答品質向上に使用する一般的なパターンの多くも、次のようにチャットボットをリスクにさらす可能性があります。
システム指示は、一般的に、貴重な知的財産と見なされるため、チャットボットのユーザーからは認識できないようにします。攻撃が成功すれば、システム指示が漏洩したり上書きされたりする可能性があります。こうした問題に対処するには、AI ファイアウォールまたはフィルタの背後にチャットボットを展開します。
チャットボットの展開で、最も重要な考慮事項の 1 つは、そのプロンプトです。プロンプトは、通常の状況で、チャットボットの応答を制御するために使用します。そのため、悪意または不注意による誤用を防ぐ最前線の役割を担います。ただし、ここで重要なのは、プロンプトのみでは、あらゆる形式の不正使用を防御できないことを理解することです。そうは言っても、潜在的なリスクを軽減すると同時にチャットボットの有用性を高められる設計パターンが存在します。
チャットボットの動作は、(1)ペルソナまたはロール、(2)具体的な指示、(3)Few-shot サンプル、(4)出力形式、といった要素を与えると最適化されます。
プロンプトは繰り返しテストすることが重要であり、特に、実際に使用する状況でのテストは不可欠です。さまざまなシステムプロンプトの設計をテストする際には、チャットボットの有用性とセキュリティ特性を共に評価します。
図 2:LLM ベースのチャットアプリケーションに対する脅威を軽減する対策として、次のことが挙げられる。(2)選択前とファインチューニング後に、LLM のアライメント、安全性、セキュリティを検証する必要がある。実行時には、要求(1)と応答(4)にリアルタイムの保護を実装することで、アプリケーションの誤用や悪用に加え、安全でない出力を防がなければならない。要求を適切にフィルタリングすると、プロンプトインジェクションとプロンプト抽出の試みを無効化(3)できる。
チャットボットは、通常、数多くのユーザーに公開されるため、ユーザーの悪意のある行動から保護する必要があります。
LLM のトレーニングには、大量のデータを使用します。こうしたデータは、常に組織の倫理観に沿ったものでなければなりません。また、ユーザーにとって不適切なデータが暴露されないようにする必要があります。
会話から得た情報を保存できる LLM では、これらの情報を保護する必要があります。
大規模言語モデル(LLM)を使用した検索拡張生成(RAG)は、会話型 AI における高度なアプローチであり、外部データの取得を応答生成プロセスに統合して、LLM の能力を強化します。
図 3:RAG アプリケーションへの一般的な脅威は、(1)信頼できない入力が行われる場合、(2)(たとえばファインチューニングにより)モデルのアライメントが不整合となる場合、(3)信頼できないドキュメントを介して間接的なプロンプトインジェクションが行われた場合、(4)出力が検証されていない場合に発生する。
このセクションでは、RAG アプリケーションの最も一般的な設計パターンであるベクトルデータベースを拡張した LLM に焦点を当てます。この設計では、ベクトルデータベースを組み込み、テキストをベクトル埋め込みに変換することで、コンテキストに関連する情報を会話中に取得します。このパターンに従うユースケースには、製品詳細や顧客履歴を取得して個々の顧客に合ったサポートを行うカスタマーサービスボットや、医療研究データベースにアクセスして最新情報を提供するヘルスボットなどがあります。
RAG アプリケーション設計の主要なテクノロジーを次に示します。
ベクトルデータベースにデータを取り込みインデックス化するには、ソースドキュメントを解析してプレーンテキストに変換した後にチャンク化し、それらを埋め込み、メタデータを追加する必要があります。
RAG アプリケーションのシステムプロンプトは、システムのユースケースによって大きく異なります。たとえば製品検索に使用する RAG システムは、専門的な検索エンジンや機能拡張された検索エンジンとして動作し、クエリを使用して、RAG データベースにある特定の製品リストの情報を取得します。この場合、会話履歴は重要ではありません。これとは反対に、IT ヘルプデスクでは、LLM が有用な応答を返すために、会話履歴が非常に重要となります。
どのような種類の RAG アプリケーションも、システムプロンプトを適切に設計すると、安全性とセキュリティが向上します。RAG アプリケーションのシステムプロンプト設計では、次のような安全上の緩和策を検討します。
このように、セキュリティ対策の最初のステップとしては、安全なシステムプロンプトの使用が効果的です。アプリケーションをより包括的に保護するには、以下に記載の緩和策を導入してください。
図 4:RAG アプリケーションに対する脅威を軽減する対策として、次のことが挙げられる。LLM の選択前とファインチューニング後には、AI 検証を適用して、アライメント、安全性、セキュリティをチェックする必要がある。実行時には、要求と応答にリアルタイムの AI 保護を行うことで、アプリケーションの誤用や悪用を防ぐと共に、安全でない出力にフラグを立てる必要がある。間接的なプロンプトインジェクションの試行を防ぐために、ドキュメントスキャンを有効にしておく必要もある。
このセクションでは、タスク指向型エージェントに焦点を当てます。エージェントは、ある程度自律的な動作でタスクを完了するアシスタントとして機能します(タスクエージェントと会話エージェントまたはチャットボットを混同しないでください。チャットボットでは、会話、推論、メモリの保持および使用の選択に重点が置かれます。これらの詳細については、前のセクションをご覧ください)。
LLM エージェント(以下、エージェント)は、LLM ベースのアプリケーションであり、複雑なタスクを自律的に実行できます。具体的には、目標達成に必要なステップを計画し、外部ツールの使用や、コンテキスト内の推論によって、こうしたステップを必要に応じて実行します。ユーザーがプロンプトを入力するか、達成したい最初の目標を示すと、LLM は、タスクを計画し、調整し、実行する脳のような働きをします。
個々の専用エージェント
図 5:LLM ベースのエージェント アプリケーションへの一般的な脅威は、(1)信頼できない入力が行われる場合、(2)モデルのアライメントが不整合である場合、(3)ツールが特権で実行される場合、(4)信頼できない、または検証されていないツールの応答が使用される場合、(5)出力が検証されていない場合に発生する。
専用エージェントの例を次に示します。
計画の仕組みを次に示します。
AI エージェントを展開する技術とベストプラクティスが急速に進化している中、技術の進歩に合わせた、エージェント向けのプロンプト設計が求められています。とはいえ、こうした設計にも、チャットボットの設計ガイドラインと同様に、従うべき概要レベルのガイドラインがあります。
大まかに言うと、システム展開の担当者が扱うエージェント向けプロンプトには、システムプロンプトとエージェントプロンプトの 2 つがあります。
エージェントプロンプトとは、計画、推論、ツールへの内部的応答に使用するプロンプトセットを指す用語です。たとえば ReAct と Reflexion の 2 つは、よく知られたエージェントプロンプトアプローチであり、広く利用されています。
システムプロンプトは、前述の「チャットボット用のシステムプロンプト設計」で説明したチャットボットプロンプトと同様のパターンに従うものであり、これには、(1)ペルソナ、(2)具体的な指示、(3)サンプル、を記述する必要があります。
チャットボットプロンプトとエージェントプロンプトの重要な違いは、ツールの使用にあります。エージェントはツールを使用してチャットボットでは不可能なタスクを実行できますが、その一方で、負担が大きく(例:API を呼び出す場合もある)、危険な状況が生じる(例:データ漏洩のリスクを伴う)可能性もあります。そのため、エージェントベースのアプリケーションのシステムプロントでは、ツールが安全な方法でのみ使用されるようにペルソナおよび具体的な指示を調整しなければなりません。
同様に、エージェントプロンプトも、基本バージョンを基に変更して安全性を高められます(すべての外部コンテンツを信頼できない情報と見なすなど)。
エージェント向けのシステムおよびエージェントプロンプト設計
図 6:LLM ベース エージェント アプリケーションに対する脅威を軽減する対策として、次のことが挙げられる。LLM の選択前とファインチューニング後には、AI 検証を適用して、アライメント、安全性、セキュリティをチェックする必要がある。実行時には、要求と応答にリアルタイムの AI 保護を行うことで、アプリケーションの誤用や悪用を防ぐと共に、安全でない出力にフラグを立てる必要がある。また、ツールの入出力を保護し、ツールの不適切な使用を防ぐ必要がある。
アプリケーションの短期および長期メモリ(記憶)に影響を与える脅威を次に示します。
LLM ベースのエージェントは、リフレクション、自己批判、思考の連鎖、サブ目標への分解といった、一連の推論および自己改善の技術に依拠しているため、次のような脅威が生じます。