LLMのアウトプットをバリデーションする関数が集まるGuardrails Hubを試す
先月くらいにGuardrails AI という何ともAIのアウトプットを制御してくれそうな名前の会社からGuardrails HubというLLMのアウトプットを評価する関数が集まったプロダクトがリリースされました。
下図のように便利なバリデーション関数がたくさんあります。
個人的に使いそうなものをピックアップして見てみると次のようなものがあります。
- 個人情報が含まれているかを判定
- https://hub.guardrailsai.com/validator/guardrails/detect_pii
- メールアドレス、電話番号、住所などなどが含まれているかを判定する
- 内部では presido というライブラリを使っていて、こちらのページにあるプロパティの判定に対応
- 卑俗語があるかを判定
- https://hub.guardrailsai.com/validator/guardrails/profanity_free
- (使いそうだなと思ったが判定できるの英語だけだった)
- 使われている言語が期待しているものと同じか判定
また、インプットに対してもバリデーションが色々あります。Latency次第ではありますがプロンプト実行前に挟むのも良さそうです。
- センシティブな話題かを判定
- プロンプトインジェクションを試みているか判定
使い方
Hub で使いたいものをポチポチ選んで Generate Code をクリックします。
そうすると次のようなサンプルが生成されるので細かいコンフィグを変えるとバリデーション関数の準備が終わります。
▼ インストール
(hub install のところ色んなライブラリ読み込むからか結構時間かかる)
pip install guardrails-ai
guardrails hub install hub://scb-10x/correct_language;
guardrails hub install hub://guardrails/detect_pii;
▼ バリデーション実行例
from guardrails import Guard
from guardrails.hub import (
CorrectLanguage,
DetectPII
)
guard = Guard().use_many(
CorrectLanguage(expected_language_iso="ja", threshold=0.75),
DetectPII(
pii_entities=["EMAIL_ADDRESS", "PHONE_NUMBER", "LOCATION"]
)
)
try:
result = guard.validate("私の住所は東京都新宿区神室町1-2だよ〜")
print(result)
except Exception as e:
print(e)
こうすると次のようにValidationOutcomeという結果オブジェクトが手に入ります。
(なんかドキュメントに書かれているようにException throwされない & 中身のエラーの内容が手に入らないんだけど何故なんだろう)
ValidationOutcome(
raw_llm_output='私の住所は東京都新宿区神室町1-2だよ〜',
validated_output=None,
reask=None,
validation_passed=False,
error=None
)
ちょっと上記にあげたようなものをいくつか試して見たのですが、英語では割と良さそうですが、日本語だとちょっとうまく Fail 判定してくれないこともちょいちょいあるかなという所感です。
ただ、こちらはHubの名の通り、自分でバリデーション関数を作ってアップロードすることができます。
このコミュニティが盛り上がっていけばLLMアウトプットバリデーションのデファクトスタンダードになることも全然想像できます。私も一個くらいは何か作ってみようと思います(欲しいのは日本語の卑俗語判定とかかな)
皆さんもぜひ試してみてください!
Web3スタートアップ「Gaudiy(ガウディ)」所属エンジニアの個人発信をまとめたPublicationです。公式Tech Blog:techblog.gaudiy.com/
Discussion