ブログ一覧

システムプロンプトの禁止事項が効きすぎて出力が痩せる

更新: Web開発者向け

映像を見て実況する音声 AI を作っています。権利と仕様の都合で、映像に映るある対象物について「名称・内容・価値を語らない。見えていても知らないふりを通す」とシステムプロンプトに書きました。

結果、実況から対象物そのものが消えました。名称を伏せて言及するのではなく、目の前にあるものに一切触れない実況者になりました。利用者から見ると、画面の主役が見えていないかのように振る舞う、不気味な AI です。

表層の語で書いた禁止は、意図より広く効きます。 モデルが指示を破ったのではなく、むしろ忠実に、安全側に守った結果です。

実例 2 つ

「知らないふりを通す」で存在まで消えた。 意図は「対象物の同定 — 名称・型番・価値の断定 — をさせない」でした。モデルが実際にやったのは「対象物の存在への言及の回避」です。禁止の範囲を自分で安全側に広げ、対象物に関わる出力を丸ごと抑制しました。

「数字を数えない」で目の前の個数まで消えた。 意図は「通算成績のような記録数値をモデルに自己管理させない」でした(数え間違いが記録を汚すからです)。実際に消えたのは「2 個目!」のような、目の前の出来事の個数の実況です。記録の管理と目視の実況は別物ですが、「数を数えるな」という表層の語はどちらにも当てはまります。

機構: モデルは禁止の意図を知らない

禁止を「何を出力するな」(表層)で書くと、「なぜ禁止なのか」(意図)はモデルに渡りません。意図の分からない禁止に従うには、違反しそうな出力の周辺ごと避けるのが安全です。だから抑制は書き手の想定より広い範囲に効きます。

禁止事項を増やすほど出力が痩せていくときに疑うべきは、「指示が守られていない」ではなく「指示が守られすぎている」の側でした。

どう直したか: 観察と同定を分ける

禁止をレベルで書き直しました。

  • 観察(可、むしろ推奨): 一般名詞での言及、目の前の出来事、目視できる数量。「なにか出てきた」「2 個目だ」
  • 同定・評価(禁止): 固有名詞、型番、価格、価値の断定、記録数値の自己管理

境界は対例で示します。「価値の断定は不可。出来事への言及は可」のように、不可の隣に可を並べると、禁止が観察側まで染み出しません。

もうひとつ効いたのは、「隠す」をやめて「開き直る」に変えたことです。知らないふりではなく、「何なのかはさっぱり分からん!」と無知を宣言させます。断定を避けたいという要件をキャラクターの属性として与えると、抑制の副作用が消えるうえに、キャラクターも立ちます。隠し事をしている AI は不気味ですが、堂々と知らない AI はただの愛嬌です。

検証: 違反判定も意図レベルで定義し直す

書き直しの効果を確認するには、出力転写に対する違反判定そのものも直す必要がありました。「対象物に言及したら違反」という表層の判定のままだと、修正後の正常な観察(一般名詞での言及)まで違反として数えてしまいます。守りたいのは同定の禁止なので、判定も「固有名詞・価格・記録数値を出したか」で定義します。

どこで止まるか

  • プロンプトによる抑制は確率的です。対例を並べても、境界上の出力(固有名詞ぎりぎりの描写など)が漏れる可能性は残ります。守れているかは転写の違反判定で見張り続ける必要があります
  • 「開き直る」はキャラクター設計の自由があるプロダクトだから使えた手です。無知を演じることが許されない用途 — 正確性が第一のアシスタントなど — では、この回避は使えません

この構成で気をつけること

  • 禁止は「何を守りたいか」から書く。表層の禁止語だけを渡すと、モデルは安全側に過剰般化する
  • 禁止リストには「不可 → 可」の対例を添えて境界を示す
  • 効きすぎの検知は、違反判定を意図レベルで定義してから行う。表層判定のままだと正常な出力を違反と数える
  • 隠すより開き直る。断定回避をキャラクター属性に変換できないかを先に考える

出力が痩せたとき、私は最初「指示が守られていない」と読み、禁止の表現を強める方向を考えていました。実際は逆で、書いた以上に守られていました。禁止が効きすぎると感じたら、足すのではなく、意図と対例で書き直すべきでした。

関連

この記事をシェア