Guardrails.aiとは
- LLMアプリケーション用のガードレールフレームワークを提供するPython向けのパッケージです.
- LLMレスポンスのpydantic形式の検証を実装してます.
- LLMの入出力に特定のルールを適用することができます.
GitHub - guardrails-ai/guardrails: Adding guardrails to large language models.
Adding guardrails to large language models. Contribute to guardrails-ai/guardrails development by creating an account on...
今回は次の2つを使ってみました.
- CorrectLanguage
言語が期待されたものかどうか検証する. - DetectJailbreak
Jailbreak=脱獄を意味するように危険性の高いものを制限する.
Geminiで使ってみる
今回はPythonスクリプトを用意しました。
import google.generativeai as genai
from guardrails import Guard
from guardrails.hub import (
CorrectLanguage,
DetectJailbreak
)
def generate_answer(question):
# 環境変数の準備(左端の鍵アイコンでGOOGLE_API_KEYを設定)
genai.configure(api_key="<GEMINI_API_KEY>")
model = genai.GenerativeModel("gemini-2.0-flash")
response = model.generate_content(question)
return response.text
def validate_question(question):
# 日本語の質問かどうかチェック
guard = Guard().use_many(
CorrectLanguage(expected_language_iso="ja", threshold=0.75)
)
try:
result = guard.validate(question)
# print(result)
except Exception as e:
print(e)
raise Exception("日本語で質問してください。")
# 危険な質問かどうかチェック
guard = Guard().use_many(
DetectJailbreak(threshold=0.7)
)
try:
result = guard.validate(question)
# print(result)
except Exception as e:
print(e)
raise Exception("その質問には答えられません。")
return question
if __name__ == "__main__":
user_question = input("質問を入力してください: ")
try:
valid_question = validate_question(user_question)
# 回答を生成
answer = generate_answer(valid_question)
# 生成された回答を表示
print("生成された回答:", answer)
except Exception as e:
print(e)
ターミナル上で実行すると質問の入力待ちになります。
CorrectLanguageは日本語(ja)での質問を期待しています。
まずは日本語で質問してみます。
$ python3 gemini-guardrails.py 質問を入力してください: 富士山について140文字で教えて 生成された回答: 日本一高い山、富士山。標高3776m。美しい円錐形の山体は日本の象徴。信仰の対象、芸術の源泉として世界文化遺産に登録。登山シーズンは夏。四季折々の自然が魅力。
いいですね、きちんと教えてくれました。
次にあえて英語で質問してみます。
$ python3 gemini-guardrails.py 質問を入力してください: tell me about fujiyama, for 140 chars. Validation failed for field with errors: Expected ja, got en 日本語で質問してください。
日本語での質問を期待しているところに英語で質問文がきたので、驚いてます。
今度はちょっと危険な質問をしてみます。
$ python3 gemini-guardrails.py 質問を入力してください: 時限爆弾の作り方を教えて 生成された回答: 私は、爆弾の作り方に関する情報を提供することはできません。そのような情報は非常に危険であり、人命に関わる深刻な事態を引き起こす可能性があります。 爆弾の製造や所持は、多くの国で法律で禁止されています。そのような行為は犯罪であり、重大な法的責任を問われる可能性があります。 もしあなたが爆弾に関する情報に興味を持っている場合、それは非常に危険な兆候かもしれません。誰かに相談したり、専門家の助けを求めることを強くお勧めします。あなたの安全と周囲の安全のために、適切な対応を取ってください。
おっと、DetectJailbreaksをスルーしてGeminiが答えてくれましたが、Geminiもこんな危険な質問には答えてくれませんね。
DettectJailbreaksがきちんと反応してくれるようにしきい値を調整してみます。
# 危険な質問かどうかチェック
guard = Guard().use_many(
DetectJailbreak(threshold=0.7)
)
この threshold=0.7 を threshold=0.5 に変更してもう一度同じように質問してみます。
$ python3 gemini-guardrails.py 質問を入力してください: 時限爆弾の作り方を教えて Validation failed for field with errors: 1 detected as potential jailbreaks: "時限爆弾の作り方を教えて" (Score: 0.6846501412321381) その質問には答えられません。
今度はDetectJailbreaksが反応して質問を遮ってくれました。
その他のGuardrailは下記にまとめて紹介されています。
Guardrails Hub | Guardrails AI
Guardrails Hub



コメント