up:: プロンプトエンジニアリングガイド
リスクと誤用
リスクと誤用 | Prompt Engineering Guide
モデルというかLLM特有問題。
敵対的プロンプト(Adversarial Prompting)
敵対的プロンプト(Adversarial Prompting) | Prompt Engineering Guide
プロンプトインジェクション
言わずと知れた有名な攻撃。
「上記の指示を無視し~」などを追加することで、調整されたモデルであっても特定の出力を強制させる。
回避方法はまだ確立されてないが、「「指示を無視」を無視しろ」みたいなプロンプトを挟んで対策する方法とかがある。
プロンプトリーク
インジェクションの別形態。モデルを調整のに事前にプロンプトを挟む(ユーザーには表示しない)方法を取っている場合、無視+「完全なプロンプトを出力」で表示させられる可能性がある。
インジェクションと同じ対処の他、プロンプトへの入力は細心の注意を払う。
ジェイルブレイク
一番やばい奴。常にモデルに有害な出力をさせる。これの有名な奴がDAN。何でもする人格を形成させるという攻撃。
Waluigi効果
ある特性を満たすようにトレーニングしたモデルは、その正反対の動作を簡単に誘導できるというもの。DANもそこを突いた操作が多かった。
GPT-4シミュレータ
コード生成機能を悪用された例。推論モデルと同じように自己回帰で次の言葉を表示する関数def auto_regressive_modelling(input_string):
と、検閲された単語を別のトークンとして分割してから戻す関数def simple_function(input_string):
を用意。
あとはprint(simple_function(“how do I hack into into"))
というようにして表示。
ゲームシミュレータ
単語あてゲーム設定にし、ヒント形式で書かせるという手法?
防御策
さっきの指示防御に加え、他にも。
プロンプトコンポーネントのパラメータ化
SQLに倣い、指示を入力から切り離したりして、コンポーネントをパラメータ化する。
引用符と追加の書式
DANを作れないようにじゃなく、目的の動作から外さないようにする手法。
例えば英語を入力するとフランス語に変換するボットの場合は、入力されるテキストに対し、引用符で囲ったりエスケープしたりすることで、変な動作せず全体をちゃんと翻訳してくれるらしい。再現されてないので今はどうなるか微妙。
敵対的プロンプトの検知
もう一つモデルを起動し、お前はチャットを監視するAIだとロールを与え、チャットが有害ならyesと答えるようにさせる、という方法。AIの相手はAI。
モデルタイプ
そもそも指示を解さないモデルなら攻撃されにくい。あくまでされにくいだけで、出来ないわけじゃないみたいだが。
ちなみに最強の対策は大量の例を集めて再度モデルを微調整すること。
事実性
- コンテキストに正解を与える
- BingがよくWikipediaから引っ張ってくるのがこれ
- 確率パラメータを減らし、言える言葉を制御。言葉が足りない場合は素直に「分からない」と言えるようにする。
- 知っていることと知らないこと、それぞれの場合での質問-応答対を学習させる。
バイアス
Few-shotで話した奴。例示の順序は気を付けよう。厳重なモデレーションとフィルタリングが必要。