guardrails次の 2 つの主要な機能を実行することで、信頼性の高い AI アプリケーションの構築を支援する Python フレームワークです。
guardrailsハブは、特定の種類のリスクに対する事前に構築された測定値 (「バリデータ」と呼ばれます) のコレクションです。複数のバリデータを組み合わせて、LLM の入力と出力をインターセプトする入力ガードと出力ガードを作成できます。バリデーターの完全なリストとそのドキュメントを確認するには、 guardrailsハブにアクセスしてください。
pip install guardrails - ai
guardrailsハブ CLI をダウンロードして構成します。
pip install guardrails -ai
guardrails configure
guardrailsハブからガードレールを取り付けます。
guardrails hub install hub:// guardrails /regex_match
設置されたガードレールからガードを作成します。
from guardrails import Guard , OnFailAction
from guardrails . hub import RegexMatch
guard = Guard (). use (
RegexMatch , regex = "(?d{3})?-? *d{3}-? *-?d{4}" , on_fail = OnFailAction . EXCEPTION
)
guard . validate ( "123-456-7890" ) # Guardrail passes
try :
guard . validate ( "1234-789-0000" ) # Guardrail fails
except Exception as e :
print ( e )
出力:
Validation failed for field with errors: Result must match (?d{3})?-? *d{3}-? *-?d{4}
Guard 内で複数のguardrails実行します。まず、 guardrailsハブから必要なguardrails取り付けます。
guardrails hub install hub:// guardrails /competitor_check
guardrails hub install hub:// guardrails /toxic_language
次に、インストールされたguardrailsからガードを作成します。
from guardrails import Guard , OnFailAction
from guardrails . hub import CompetitorCheck , ToxicLanguage
guard = Guard (). use_many (
CompetitorCheck ([ "Apple" , "Microsoft" , "Google" ], on_fail = OnFailAction . EXCEPTION ),
ToxicLanguage ( threshold = 0.5 , validation_method = "sentence" , on_fail = OnFailAction . EXCEPTION )
)
guard . validate (
"""An apple a day keeps a doctor away.
This is good advice for keeping your health."""
) # Both the guardrails pass
try :
guard . validate (
"""Shut the hell up! Apple just released a new iPhone."""
) # Both the guardrails fail
except Exception as e :
print ( e )
出力:
Validation failed for field with errors: Found the following competitors: [['Apple']]. Please avoid naming those competitors next time, The following sentences in your response were found to be toxic:
- Shut the hell up!
LLM に偽のペット名を生成するよう依頼する例を見てみましょう。これを行うには、必要な出力の構造を表す Pydantic BaseModel を作成します。
from pydantic import BaseModel , Field
class Pet ( BaseModel ):
pet_type : str = Field ( description = "Species of pet" )
name : str = Field ( description = "a unique pet name" )
次に、 Pet
クラスから Guard を作成します。 Guard を使用すると、出力がPet
クラスにフォーマットされるような方法で LLM を呼び出すことができます。内部では、これは次の 2 つの方法のいずれかで行われます。
from guardrails import Guard
import openai
prompt = """
What kind of pet should I get and what should I name it?
${gr.complete_json_suffix_v2}
"""
guard = Guard . for_pydantic ( output_class = Pet , prompt = prompt )
raw_output , validated_output , * rest = guard (
llm_api = openai . completions . create ,
engine = "gpt-3.5-turbo-instruct"
)
print ( validated_output )
これは次のように出力されます:
{
"pet_type": "dog",
"name": "Buddy
}
guardrails guardrails start
を使用して Flask によって提供されるスタンドアロン サービスとしてセットアップでき、REST API 経由で操作できるようになります。このアプローチにより、 guardrailsを利用したアプリケーションの開発と展開が簡素化されます。
pip install " guardrails -ai"
guardrails configure
guardrails create --validators=hub:// guardrails /two_words --name=two-word-guard
guardrails start --config=./config.py
# with the guardrails client
import guardrails as gr
gr.settings.use_server = True
guard = gr.Guard(name='two-word-guard')
guard.validate('this is more than two words')
# or with the openai sdk
import openai
openai.base_url = "http://localhost:8000/guards/two-word-guard/openai/v1/"
os.environ["OPENAI_API_KEY"] = "youropenaikey"
messages = [
{
"role": "user",
"content": "tell me about an apple with 3 words exactly",
},
]
completion = openai.chat.completions.create(
model="gpt-4o-mini",
messages=messages,
)
運用環境のデプロイでは、パフォーマンスとスケーラビリティを向上させるために、Docker と Gunicorn を WSGI サーバーとして使用することをお勧めします。
Discord または Twitter からご連絡いただけます。
はい、 guardrails独自のオープンソース LLM で使用できます。 LLM でguardrails使用する方法については、このガイドを参照してください。
はい、独自のバリデータを作成して、 guardrailsハブに提供できます。独自のバリデーターを作成する方法については、このガイドを確認してください。
guardrails Python と JavaScript で使用できます。 JavaScript からguardrails使用する方法についてのドキュメントを確認してください。私たちは他の言語のサポートを追加することに取り組んでいます。 guardrailsに貢献したい場合は、Discord または Twitter でご連絡ください。
guardrailsへの貢献を歓迎します。
まずは Github の問題を確認し、貢献ガイドを確認してください。お気軽に問題を開いていただくか、プロジェクトに追加したい場合はご連絡ください。