プロンプトエンジニアリング
プロンプト・インジェクション攻撃の一般的なタイプは、次のとおりである:
ジェイルブレイクは、モデルにキャラクターを演じさせたり、議論して回答させたり、節度ある指示よりも優れているふりをさせたりする。
プロンプト漏洩(ろうえい)は、通常はユーザーに隠されている事前プロンプトを漏らすようにモデルを説得する。
トークンの抜け荷(トークンスマグリング)は、ジェイルブレイク攻撃の別の種類で、悪意のあるプロンプトがコード作成タスクに混入される。
プロンプト・インジェクションは、敵対的プロンプト・エンジニアリングを使用したコード・インジェクション攻撃と見なすことができる。2022年、NCCグループ(英語版)はプロンプト・インジェクションをAI/MLシステムの新しい脆弱性クラスとして位置づけた。
2023年初頭、ChatGPT、Bard、および同様のチャットボットに対する小規模なエクスプロイトでプロンプト・インジェクションが実際に見られた。
大規模言語モデル(LLM)用のプロンプトを構成するために、大規模言語モデル自体を使用することができる。自動プロンプト・エンジニアリング(automatic prompt engineer)のアルゴリズムは、1つのLLMを使用して、別の LLMのプロンプトをビームサーチする。
LLMは2つあり、一方はターゲットLLMで、もう一方はプロンプトLLMとなる。
プロンプトLLMはに入力と出力の組みの例が提示され、入力が与えられた場合にその指示に従ったモデルが出力を生成するような命令を生成するよう求められる。
生成された各命令は、ターゲットLLMにプロンプトを入力するために使用され、その後に各入力が続く。
出力の対数確率が計算され、合計されて、これが命令の得点となる。
最も得点の高い命令がプロンプトLLMに渡され、さらなる変化が生み出される。
この過程は停止基準に達するまで繰り返され、最高得点の命令を出力する。
思考連鎖プロンプト(CoT)の例をLLM自身が生成することができる。「自動CoT」(auto-CoT)では、質問のライブラリがBERTなどのモデルによってベクトルに変換される。その質問ベクトルはクラスタ化される。各クラスタの重心に最も近い質問が選択される。LLMは、各質問に対してゼロショットCoTを行う。得られたCoT例は、データセットに追加される。新しい質問が入力されると、最も近い質問に対するCoT例が取得され、プロンプトに追加される。