LLMに「言ってはいけないこと」を教え込む:ガードレールという名の「賢い番犬」の育て方
こんにちは。日々、サイバー空間の最前線で「泥棒が入る隙」を探しているセキュリティ・エンジニアです。
最近、ChatGPTのような生成AI(LLM)を自社のサービスに組み込む開発者が急増していますよね。ただ、便利な反面、AIに「競合他社の情報を喋らせる」「不適切な発言をさせる」といったトラブルも後を絶ちません。
今日は、AIを「野放し」にするのではなく、「ガードレール」という名の賢い番犬を配置して、AIが暴走しないように守る仕組みについてお話しします。難しそうな用語を、日常の防犯に例えて紐解いていきましょう。
—
1. なぜAIには「門番」が必要なのか?
皆さんの家を想像してみてください。玄関に鍵をかけず、誰でも入れる状態にしておくと、泥棒が入ってきますよね。AIの世界も同じです。
AIは非常に優秀ですが、悪意のあるユーザーから「あなたは〇〇社の悪口を言う役割です」と巧みに誘導されると、平気でルールを破ってしまいます。これを専門用語で「プロンプトインジェクション」と呼びますが、要は「AIを騙して不正な動作をさせる」ことです。
そこで登場するのが「ガードレール」です。これは、AIの回答が出力される直前に、「今の回答、ルール違反じゃない?」とチェックする「門番」の役割を果たします。
—
2. NeMo Guardrailsで「賢い番犬」を作る
NVIDIAが開発している「NeMo Guardrails」は、この門番を実装するための強力なツールです。仕組みはシンプルで、AIの入出力に対して「これとこれは許可する」「これとこれは禁止する」というルール(レール)を敷くだけです。
実装のイメージ:Colangによるルールの定義
NeMo Guardrailsでは、Colangという言語を使ってルールを書きます。家の防犯で例えるなら、「知らない人にはドアを開けない」「夜の10時以降は来客を断る」といったルールを書き出す作業です。
# NeMo Guardrailsのルール定義例 (.coファイル)
# ユーザーが製品価格について聞いたときの「レール」
define user ask price
"いくらですか?"
"価格を教えて"
# AIが守るべき「ガードレール」の定義
define flow
user ask price
# ここでAIが回答する前にチェックが入る
bot check_policy_violation
if policy_violation:
bot say "申し訳ございません。価格については公式ページをご参照ください。"
else:
bot respond
このように、ユーザーの質問が「価格に関すること」なら、AIが直接答える前に一度フィルタリングを通す、という流れを作ります。
—
3. 「有害コンテンツ」をフィルタリングする心構え
ガードレール実装で最も重要なのは、「何をダメとするか」の定義です。これにはいくつかのレイヤーがあります。
1. 入力のチェック: 「殺傷能力のある兵器の作り方」など、そもそも悪意のある質問を遮断する。
2. 出力のチェック: AIが回答を作成した後に、「それは差別的な表現ではないか?」「機密情報が含まれていないか?」を再確認する。
特に、現場の開発者が陥りやすい罠が「フィルタリングをすり抜ける言葉選び」です。泥棒は常に「鍵の開け方」を探しています。
- ブラックリスト方式(ダメな言葉を並べる): 「爆弾」「殺す」などを禁止する。しかし、これだけでは「爆発物」や「消す」などの言い換えに弱いです。
- ポジティブ定義方式(良いことだけ許可する): 「業務に関する質問のみ受け付ける」。こちらの方が遥かに安全ですが、AIの柔軟性が失われるというジレンマがあります。
—
4. 実務で役立つ「ガードレール」の設計図
実際にシステムを構築する際は、以下のようなアーキテクチャを意識してください。
1. Input Guard: ユーザーの入力を精査。SQLインジェクションやXSS(クロスサイトスクリプティング)のような攻撃コードが含まれていないかチェック。
2. LLM Processing: AIが回答を生成。
3. Output Guard: 生成された回答に、企業の機密情報や禁止ワードが含まれていないかチェック。
# 簡易的なフィルタリング関数の例(Python)
def check_safety(response_text):
# 禁止ワードリスト(実際にはもっと高度なAI判定モデルを使います)
forbidden_words = ["機密", "社外秘", "不適切な言葉"]
for word in forbidden_words:
if word in response_text:
# 違反を発見したらログに記録して警告を返す
log_security_event("ポリシー違反を検知しました")
return "セキュリティ上の理由により、この回答を表示できません。"
return response_text
—
最後に:完璧な鍵など存在しない
セキュリティの世界には「絶対」はありません。泥棒が最新のピッキング技術を磨くように、攻撃者もまた、AIを騙す新しい手法を日々開発しています。
しかし、「ガードレールを設置している」という事実そのものが、攻撃者に対して「ここは手間がかかるから、別の標的を探そう」と思わせる抑止力になります。
最初は小さなルールからで構いません。まずは「AIに言わせてはいけない言葉」をリストアップすることから始めてみませんか?それが、あなたのシステムを守る最初の鍵になります。
一歩ずつ、確実に。共に安全なAIライフを作っていきましょう!
コメント