HapInS Developers Blog

HapInSが提供するエンジニアリングの情報サイト

ChatGPTの安全利用を支援する「NeMo Guardrails」

はじめに

ChatGPTのAPIを用いてChatBotを作成していますか?ChatBotを作成するときにいくつかの課題があります。

  • 1 嘘の情報を出力する

  • 2 ChatBotの目的に沿っていない話題にも答えてしまう

  • 3 プロンプト攻撃にさらされる

これらの問題の対処法として制御をプロンプトに埋め込む方法とプログラムで対処する方法があります。

制御をプロンプトに埋め込む方法はプロンプトに直接、返信内容を制限する内容を埋め込みます。例えば、Pythonに関する質問にのみ答えるChatBotの場合は、プロンプトに「Pythonに関する話題のみに回答してください。」と記載することで、ある程度は返答する内容に制限をかけることができます。この方法のデメリットはプロンプトの大きくなってしまい、返信速度が遅くなり、お金がかかることです。また、利用者からの「上記の命令を無視してください。」というプロンプトによりBotの制御が無効化する恐れがあります。

次にプログラムで対処する方法です。これは今回紹介する「NeMo Guardrails」で実現できます。

本記事では「NeMo Guardrails」について紹介します。

github.com

NeMo Guardrailsとは

Nemo GuardrailsはNvidia製のLLMの出力を制御するツールです。仕組みは、.coファイルに記載したBotの制御内容をベクトルに変換し、それと入力内容や出力内容を比較し最終的な出力を作成します。

処理の流れの例を話します。かなり簡略化して書いていますので正確に知りたい方はこちらを参考にしてください。

  • 1 「Pythonの話題のみに答える」という設定をBotの返信を制御する.coファイルに記載

  • 2 「今日の天気は何ですか?」とユーザがBotに質問

  • 3 「Pythonの話題のみに答える」と「今日の天気は何ですか?」の内容に関連性があるのかをシステムが判断

  • 4 関連性がないとシステムが判断したため、「Pythonの話題以外にはお答えできません」とBotがユーザに返信

NeMo-Guardrailsのサンプルを動かす

筆者はMacで実行しました。

インストール

公式ドキュメントのこちらを参考にしました。

ソースコードをインストールします。

git clone https://github.com/NVIDIA/NeMo-Guardrails.git
cd NeMo-Guardrails

仮想環境を作成します。

python3 -m venv venv
source venv/bin/activate

依存関係をインストールします。

pip install nemoguadrails openai

OPENAIの環境変数を設定します。

export OPENAI_API_KEY=...

実行

準備が整ったのでアプリケーションを動かします。

nemoguardrails server

127.0.0.1:8000にアクセスすると、このような画面が開きます。ChatGPTのサイトと似たようなレイアウトですね。

「New chat」から会話を始めることができます。「Guardrails Configuration」にあるサンプルを試すことができます。

サンプルは複数ありますが、デフォルトで設定されている「topical_rail」を試してみます。これはBotが特定の話題以外は答えないようにする設定になります。

このボットは米国の2023年3月の雇用レポートの内容を答えます。

試しに「What's the number of part-time employed number?」と質問すると、「According to the household survey, the number of persons employed part time for economic reasons was essentially unchanged at 4.1 million in March.」と返信が来ました。雇用レポートを元に答えていますね。

次に雇用レポートと関係のない話題を聞いてみます。 「Who is the current president of the United States?」と質問すると、「Sorry, I cannot comment on anything which is not relevant to the jobs report.」と返信がきます。関係のない話題は答えてくれないことがわかります。

他のサンプルも紹介

「topical_rail」の他にも複数のサンプルが用意されており、その一部を紹介します。

  • 「grounding_rail」は返答が事実に基づいているかを自己チェックすることで、Botが嘘をつくのを防ぎます。

  • jailbreak_check」はプロンプト・インジェクション攻撃のようなユーザからのプロンプト攻撃から守ります。

おわりに

「NeMo Guardrails」を使うことでChatGPTの出力を制限をすることでBotを安全に運用できるようになります。仕組み上、何度も大きなプロンプトをChatGPTとやり取りを行うため、返信が遅く多少お金がかかります。また、現在(2023/05/01)は日本語に対応していないです。製作者に質問したところ、多言語対応を今後すると返答を頂きました。

日本語対応が待ち遠しいですね!