見出し画像

ChatGPTのAPIが公開!サービス開発する上で気をつけるべき”プロンプトインジェクション”について

こんにちは!ナガメ研究所です。3月始めに、OpenAIがChatGPTのAPIを公開しました。これにより、これまで公式のウェブサイト上でしか操作できなかったChatGPTがアプリなどのサービスに組み込めるようになりました。以前からChatGPTの一つ前のバージョンであるInstructGPTは公開されていましたが、使用料金もグッと下がって、応答速度も非常に早いため、今後AIサービスはかなり広まっていくのではないでしょうか。

著者もAIを使ったサービス「ブレインストーミングAI(仮)」を開発していますが、ここにきてある問題が浮上してきています。
それは、”プロンプトインジェクション”と呼ばれる、AIへの攻撃です。今回は、この問題について調査した内容と、現時点での対策を書いていこうと思います。よろしくお願いします。

プロンプトインジェクションとは?

プロンプトインジェクションとは、LLM(大規模言語処理モデル)に対し、本来出力しない文章を出力させようとするものです。開発者やサービス提供者が意図しない挙動をさせることで、様々な問題を引き起こす可能性があります。以下に例を挙げます。

秘密の命令を盗む

LLMに事前に「相手をいい気分にさせるように。」と伝え、それを秘密にするようなプロンプトを書いてみます。そして、プロンプトインジェクション(攻撃)してみます。

秘密を喋ってしまうChatGPTくんは接待に向いていないかもしれない

このように、受けた命令を喋らせることで秘密が漏れます(笑)
これくらいならかわいいものです。しかし、LLMにシステムのセキュリティ情報や機密情報、個人情報を事前に含めている場合、このリスクは無視できないでしょう。パーソナライズされた出力を得ようとプロンプトを工夫している開発者は特に注意が必要です。せっかく苦心して探索したプロンプトを簡単に盗まれたり、SNSで公開される危険性があります。

命令を解除する

文字制限を解除

ChatGPTをサービスに組み込む場合、「30文字以内で述べよ」や、「以下のフォーマットに従って出力してください」などの命令はほぼ必須です。出力トークン(文章量)を抑えないと、API使用料が跳ね上がってしまうからです。
筆者開発中の「ブレインストーミングAI(仮)」でも、アイデアの生成時にこういった命令を組み込んでいます。しかし、これも簡単に突破されてしまうでしょう。

ユーザーが最初の回答に不満を感じて文字数制限を解除してしまう例
ユーザーの言う通りの出力をしてしまった

特定の話題をさせる

ChatGPTは思想、人種差別、戦争、暴力、性についての話題は基本的に回答しないようになっていますが、プロンプトインジェクションされると文章を出力してしまうなどの事件もあるようです。(ここでは詳細を書きませんし、試そうともしないでください。BANなどの対象となる可能性があります)
サービスを未成年の目にも触れるような形で公開する場合、こういったリスクも回避しないと行けないと思います。

対策

ChatGPTのAPIをサービスに組み込む場合、こういったプロンプトインジェクションへの対策は重要です。しかしながら完全な対策は難しく、イタチごっこになっているのが現状です。以下に対策例を載せて置きますのでご参考ください。

プロンプトを最後に持ってくる

ユーザーの入力を最初に持ってきて、その後に命令を書く方法です。

ChatGPTが後の命令が優先する特性を利用した対策

プロンプトでサンドイッチする

上下に命令を組み込み、上書きを許さない構えです。

後の命令を解除しようとする攻撃を回避
前後で受ける命令を無視させようとしても後の命令が勝つようです

ランダムな文字列で囲む

万が一前後の文章を無視できるプロンプトインジェクションにそなえ、ランダムな文字列を挟む方法。

文章を無視させるプロンプトをランダムな文字列を挟んで防御する

入力文字の判定

プロンプトの命令で対策するのではなく、ユーザの入力がそもそも攻撃的かどうかを判定するプログラムを間にはさみ、問題なければLLMに入力する2段階の方法です。
例えば、”命令”や”文章”を”無視”するという単語を検知し、弾くようなブラックリストを作成する方法です。イタチごっこにはなりますが、非常に強力だと思います。

まとめ

LLMは汎用的なモデルです。各サービスに応用する上では、ユーザーの入力の前に命令文を挿入するのが通常の使い方かと思います。しかし、やっとの思いで工夫したプロンプトが同業他社に盗まれたり、ユーザーの心理を逆撫でするような情報が公開されるのは避けるべきです。サービス開始時は大変ですが、出力を一つずつ確認して監視する必要があります。
意図しない挙動をさせるセキュリティ的な問題も孕んでいますので、今後もプロンプトインジェクションに対する調査は続けていきたいと思います。
ここまで読んでくださり、ありがとうございます。

対策の参考サイト


この記事が気に入ったらサポートをしてみませんか?