「AIエージェントキャッチアップ #18 - Guardrails AI」を開催しました

ジェネラティブエージェンツの大嶋です。

「AIエージェントキャッチアップ #18 - Guardrails AI」という勉強会を開催しました。

generative-agents.connpass.com

アーカイブ動画はこちらです。

youtube.com

Guardrails AI

今回は、ガードレールのPythonフレームワーク「Guardrails AI」について、公式ドキュメントを読んだり動かしたりしてみました。

Guardrails AIのGitHubリポジトリはこちらです。

github.com

今回のポイント

Guardrails AIの概要

Guardrails AIは、LLMの入力・出力に対するガードレールを提供するPythonフレームワークです。

「Guardrails Hub」で公開されている様々なValidatorを使用して、ガードレールを実装することができます。

hub.guardrailsai.com

「Guardrails Hub」には、自身が実装したValidatorを登録することもできるようです。

基本的な使い方

Guardrails AIの基本的な使い方は、GitHubのREADMEに書かれています。

github.com

たとえば「RegexMatch」というValidatorを使いたい場合、まずguardrails hub installコマンドでインストールします。

guardrails hub install hub://guardrails/regex_match

このコマンドを実行すると、RegexMatchの実装がダウンロードされます。 RegexMatchの実装は以下のGitHubリポジトリで公開されています。

github.com

RegexMatchを使うコードの例は以下のようになります。

from guardrails import Guard, OnFailAction
from guardrails.hub import RegexMatch

guard = Guard().use(
    RegexMatch,
    regex=r"(?!\d{3}-\d{4}-\d{4}).*",
    on_fail=OnFailAction.EXCEPTION,
)

guard.validate("00-0000-0000")
print("Guardrail passes")

guard.validate("000-0000-0000")
# 例外が発生

guard.validateの箇所で、実際にはLLMの入力や出力をチェックさせる、ということです。

Validatorによっては内部で機械学習モデルを使用しており、その一部はGuardrails AIが公開しているサーバーにアクセスして実行してもらうこともできるようでした。

LiteLLMとのインテグレーション

Guardrails AIはLiteLLMと統合されているため、以下のように各種LLMを呼び出すこともできます。

result = guard(
    messages=[{"role":"user", "content":"How many moons does Jupiter have?"}],
    model="gpt-4o",
)

www.guardrailsai.com

LangChainとのインテグレーション

Guardrails AIはLangChainとの連携も提供しており、以下のように使用することができます。

chain = prompt | model | guard.to_runnable() | output_parser

www.guardrailsai.com

当然ですが、LangSmithを設定すればトレースも記録されます。

サーバーとしての実行

Guardrails AIの処理は、Flaskで実装されたサーバーとして実行することもできます。

www.guardrailsai.com

適用するGuardをconfig.pyというファイルに記述し、以下のコマンドでサーバーを起動します。

guardrails start --config config.py

クライアントからは以下のように、ガードレールのサーバーを経由して、OpenAI APIにリクエストを送ることができます。

client = OpenAI(
    base_url="http://127.0.0.1:8000/guards/gibberish_guard/openai/v1",
)

response = client.chat.completions.create(
    model="gpt-4o-mini",
    messages=[
        {
            "role": "user",
            "content": "Hi!",
        },
    ],
)

print(response.choices[0].message.content)
print(response.guardrails["validation_passed"])

前回扱った「LLM Guard」でも同じように、サーバーとして実行する手順が整備されていました。 ガードレールを独立したサーバーで実行するのはよくある構成だと言えそうです。

次回のご案内

以上、今回は「Guardrails AI」をキャッチアップしました。

次回は「AIエージェントキャッチアップ #19 - Agent Inbox (LangChain)」ということで、LangChainが公開した「Agent Inbox」がテーマです!

generative-agents.connpass.com

ご興味・お時間ある方はぜひご参加ください!

また、その次の回以降のテーマも募集しているので、気になるエージェントのOSSなどあれば教えてください!