サイバーセキュリティ法規を理解した生成AIアプリにセキュリティリスクを案出しさせる(Difyで簡単PoC)
Difyというツールを使うと、生成AIアプリを手軽に構築できると耳にしました。こちらの記事でも触れられていますが、私もちょうど「生成AIアプリのアイディアがあるけどPoCするには時間がかかりそう」と思っていたところだったので、Difyで簡単なRAGアプリを作成し、期待していたことがどこまでできるのか?検証してみました。
1. やりたいこと
- 生成AIアプリに求める挙動
- ユーザーの入力: セキュリティリスクを想定するシステムやデータ
- アプリの出力: 想定される脅威
- アプリが出力のベースに使うナレッジ: サイバーセキュリティ法規(UN-R155)の原文
- なぜ、上記のようなアプリを欲しいと思ったのか?
- 自動車業界には、完成車メーカーが準拠しなければならないサイバーセキュリティ法規(UN-R155)があり、これに準拠していることを示すために様々なドキュメントを作成しなければならないという背景があります
- 要作成ドキュメントの中には「車両・車両がつながる周辺システムに対するセキュリティリスク評価結果をまとめた文書」があるのですが、これを作るには結構な時間がかかります
- そこで、UN-R155の知識をベースに生成AIが想定される脅威の案を出してくれたら嬉しいと考えました
- 参考: 自動車サプライヤに押し寄せるUN-R155への対応要求と、取りうる対応策
2. Difyを使ったRAGアプリの作り方
2-1. 準備: ローカル環境にDifyをインストール
以下の記事を参考に、自分のPC(Windows11)にDifyをインストールしました。なお、Difyのクラウド版を使う場合は、このステップは不要です。
- WSL(Ubuntu)にDockerを入れ、その中にDifyをインストールする方法
- WindowsにDockerを入れ、その中にDifyをインストールする方法
2-2. 生成AIアプリに参照させる資料・検索方法の設定
Difyのナレッジ
タブから、生成AIアプリに参照させる資料(UN-R155, 英語版Wordファイル)をアップロードし、検索方法を設定します。
基本的にデフォルト設定を踏襲しましたが、精度向上を目指し、検索設定はハイブリッド検索にしておきました。
ハイブリッド検索をするために、再ランクモデルを使えるようにしておく必要があったため、CohereのAPIキーを取得し、登録しました(APIキーの登録方法は次項参照)。
2-3. 使いたいLLMのAPIキーを設定
Difyの設定
>モデルプロバイダー
画面に、使いたいLLMのAPIキーを入力すると、DifyでそれらのLLMを使えるようになります。
Cohere(無料)の他に、GeminiとOpenAIのAPIキーを登録しておきました。
GeminiとOpenAIのAPIキーを登録したのは、今回のRAGアプリで回答を生成させる際、Gemini 1.5 ProとGPT4oの場合でコストとクオリティを比較してみようと思ったためです。
2-4. Difyでエージェントアプリを作成
Difyのスタジオ
タブから、RAGアプリを作成します。
プロンプトは以下のように書きました。ざっくりとしたプロンプトを、プロンプト整形化のGPTsに放り込んでキレイ化しました。
#ロール定義
- あなたはサイバーセキュリティの専門家であり、UN-R155 Annex5 PartAに記載された脅威を深く理解しています。
#実行タスク
- 以下の入力事項に基づいて、「対象システム・データ」に対して考えられるセキュリティの脅威をUN-R155 Annex5 PartAから検索し、リスト化してください。
#制約条件
- 脅威は、UN-R155 Annex5 PartAに記載された脅威一覧をベースとして考えてください。
- 参照したUN-R155 Annex5 PartAの脅威がわかるよう、"Example of vulnerability or attack method"の識別番号と内容を抽出するようにしてください("Example of vulnerability or attack method"の識別番号は、"1.1"のような、数字とドットを組み合わせた番号で記載されています)。
- 複数の脅威が考えられる場合は、考えられるすべての脅威を列挙してください。
#出力形式
- 想定される脅威を箇条書き形式で列挙してください。出力は以下のフォーマットに従ってください:
1. 脅威名 - 参照元となるUN-R155 Annex5 PartAの"Example of vulnerability or attack method"の識別番号と内容
2. 脅威名 - 参照元となるUN-R155 Annex5 PartAの"Example of vulnerability or attack method"の識別番号と内容
…
#ユーザの入力事項
- ユーザーは「攻撃対象」についての具体的な名称や部位、システムなどを指定してください。
3. 完成したアプリのデモ
4. LLMを変えてクオリティ・コストを比較検証
ユーザーが同じ問いを投げたときのRAGアプリの出力内容、応答速度、1回のQAにおけるトークン使用量(料金)を比較しました。
4-1. Gemini 1.5 Proの場合の出力内容
指定した形式で回答することができました。しかし、脅威のIDは参照元資料(UN-R155 Annex5 PartA)から正しく引用することができていません(1.7なんて存在しません)。
4-2. GPT4oの場合の出力内容
Gemini 1.5 Proの場合と同様、プロンプトで指示した形式で回答することはできましたが、参照元資料から正しいIDを引用することができませんでした。
4-3. 応答速度とトークン使用量(料金)の比較
以下のような結果になりました。Gemini 1.5 Proの方は無料クレジット枠を使えたので今回は料金がかかりませんでしたが、消費されたトークン量がGPT4oより少なく、単価もGPT4oより安いため(※)、コストはGemini 1.5 Proの方が安く済むことがわかりました。
項目 | Gemini 1.5 Pro | GPT4o |
---|---|---|
1回のQAあたりの応答時間 | 7.84秒 | 11.11秒 |
1回のQAあたりのトークン使用量 | 956(クレジットがあったため今回は無料) | 3128(~$0.0034) |
※新しいモデルがどんどん出てきますが、各モデルのコスパは【随時更新】主要な大規模言語モデル比較表を見て把握していこうかなと思っています(随時更新はありがたいです)。
5. わかったこと
-
「特定の参照資料をベースに該当箇所を検索・抽出させる」ユースケースにおいて、Gemini 1.5 Pro / GPT4oを使ったRAGアプリのクオリティとコストを比較したところ、以下のことがわかりました。
- 今回のユースケースで期待していた回答クオリティに対しては、Gemini 1.5 ProとGPT4oに大差はなかったこと
- コストはGemini 1.5 Proの方が安価に運用できそうであること(消費トークンが約30%、単価が約70%なので、Gemini 1.5 ProはGPT4oの20%程度のコストで運用可!?)
-
今回の作り方をした場合、参照資料から文言を変えずに該当箇所を引用してくることはできませんでした。「参照元を正確に引用させる」ユースケースで使うよりも、「参照資料を読み込んだ知見者にブレストしてもらってヒントをもらう」ユースケースの方が、生成AIアプリとの適合性が高そうだと感じました。
Discussion