[アップデート] Guardrails for Amazon Bedrock が CloudFormation でもサポートされました
いわさです。
約 1 か月前に Knowledge bases for Amazon Bedrock や、Agents for Amazon Bedrock が CloudFormation に対応していました。
Bedrock 系の CloudFormation 対応はこれまでなかったので気になっていた方も多かったのではないかと思います。
そして先日、Guardrails for Amazon Bedrock が GA となり早速青柳さんがブログを執筆されています。
実は GA の数日後には、早速 Guardrails for Amazon Bedrock も CloudFormation に対応していました。早いですね。
本日は CloudFormaiton 経由でガードレールを構築し、プロパティの設定方法やバージョン管理方法を確認してみましたので紹介します。
新リソースタイプ:AWS::Bedrock::Guardrail
今回のアップデートで、次のリソースタイプが新しく追加されており、本日時点ですでに利用可能でした。
ドキュメント上は必須プロパティとしては以下のみなのですが、これに加えていずれかのポリシーをひとつ以上構成する必要があります。
AWSTemplateFormatVersion: 2010-09-09 Description: --- Resources: HogeGuardrail: Type: AWS::Bedrock::Guardrail Properties: Name: hoge0428guardrail2 BlockedInputMessaging: hoge prompt message blocked BlockedOutputsMessaging: hoge response message blocked
コンソールでいうと以下のステップ2からステップ5のオプションですね。
ポリシーを設定しなかった場合は次のエラーメッセージが出力されました。
Guardrail must have at least one policy.
ちなみにステップ6もコンソール上はオプションですが、コンソールで省略した場合は「Sorry, the model cannot answer this question」という文字列が設定されます。
4つのポリシーをそれぞれ設定してみたので紹介します。
コンテンツフィルター
ContentPolicyConfig
を構成することでコンソール上のコンテンツフィルターを設定することが出来ます。
ユースケースタイプと設定可能な強度は決まっているので以下を確認しましょう。
AWS::Bedrock::Guardrail ContentFilterConfig - AWS CloudFormation
適当に強度を設定してみました。
同じフィルターにプロンプトとレスポンスの強度を設定する感じなので、コンソールで設定する場合とはちょっとなんというか目線が違っており、一瞬混乱しました。
AWSTemplateFormatVersion: 2010-09-09 Description: --- Resources: HogeGuardrail: Type: AWS::Bedrock::Guardrail Properties: Name: hoge0428guardrail2 BlockedInputMessaging: hoge prompt message blocked BlockedOutputsMessaging: hoge response message blocked ContentPolicyConfig: FiltersConfig: - Type: SEXUAL InputStrength: LOW OutputStrength: MEDIUM - Type: HATE InputStrength: HIGH OutputStrength: NONE - Type: VIOLENCE InputStrength: NONE OutputStrength: HIGH - Type: INSULTS InputStrength: MEDIUM OutputStrength: LOW - Type: MISCONDUCT InputStrength: LOW OutputStrength: MEDIUM - Type: PROMPT_ATTACK InputStrength: MEDIUM OutputStrength: NONE
上記をデプロイすると次のようなガードレールが作成しました。
バージョンは作成されておらず、ドラフトバージョンのみが存在していますね。
デプロイバージョンについては後述します。
ドラフトバージョンの設定値を確認してみるとコンテンツフィルターやメッセージが次のように設定されていました。
拒否トピック
続いて、拒否トピックを設定してみます。
拒否トピックはTopicPolicyConfig
で設定することが出来ます。
AWSTemplateFormatVersion: 2010-09-09 Description: --- Resources: HogeGuardrail: Type: AWS::Bedrock::Guardrail Properties: Name: hoge0428guardrail3 BlockedInputMessaging: hoge prompt message blocked BlockedOutputsMessaging: hoge response message blocked TopicPolicyConfig: TopicsConfig: - Type: DENY Name: hoge0428topic1 Definition: hoge topic 1 Examples: - aaa - bbb - Type: DENY Name: hoge0428topic2 Definition: hoge topic 2 Examples: - ccc - ddd
上記をデプロイしたところ次のようにガードレールが設定されました。
まぁ期待どおりですね!
ワードフィルター
また、WordPolicyConfig
でワードフィルターを設定することが出来ます。
AWSTemplateFormatVersion: 2010-09-09 Description: --- Resources: HogeGuardrail: Type: AWS::Bedrock::Guardrail Properties: Name: hoge0428guardrail2 BlockedInputMessaging: hoge prompt message blocked BlockedOutputsMessaging: hoge response message blocked WordPolicyConfig: WordsConfig: - Text: hoge1 - Text: fuga1 - Text: puyo1 ManagedWordListsConfig: - Type: PROFANITY
機密情報フィルター
最後に、SensitiveInformationPolicyConfig
にてコンソール上で言う「Sensitive Information filters」を構成することが出来ます。
AWSTemplateFormatVersion: 2010-09-09 Description: --- Resources: HogeGuardrail: Type: AWS::Bedrock::Guardrail Properties: Name: hoge0428guardrail4 BlockedInputMessaging: hoge prompt message blocked BlockedOutputsMessaging: hoge response message blocked SensitiveInformationPolicyConfig: PiiEntitiesConfig: - Type: PHONE Action: BLOCK - Type: PASSWORD Action: ANONYMIZE RegexesConfig: - Name: String Pattern: aaa Action: BLOCK
ドラフトバージョンのみ管理できるようだ
AWS::Bedrock::Guardrail
リソースタイプは GetAtt を使ってバージョン情報を取得することが出来ます。
AWSTemplateFormatVersion: 2010-09-09 Description: --- Resources: HogeGuardrail: Type: AWS::Bedrock::Guardrail Properties: Name: hoge0428guardrail4 BlockedInputMessaging: hoge prompt message blocked BlockedOutputsMessaging: hoge response message blocked SensitiveInformationPolicyConfig: PiiEntitiesConfig: - Type: PHONE Action: BLOCK - Type: PASSWORD Action: BLOCK RegexesConfig: - Name: String Pattern: aaa Action: BLOCK Outputs: Version: Value: !GetAtt HogeGuardrail.Version
ただ、こちらどうやら本日時点ではDRAFT
のみ取得されるようです。
既存バージョンの存在有無に関わらずリソースの更新を試してみたところ常にDRAFT
のみが取得されました。
% rain deploy template.yaml hoge0428guardrail4 --region us-east-1 CloudFormation will make the following changes: Stack hoge0428guardrail4: Do you wish to continue? (Y/n) Deploying template 'template.yaml' as stack 'hoge0428guardrail4' in us-east-1. Stack hoge0428guardrail4: UPDATE_COMPLETE Outputs: Version: DRAFT Successfully updated hoge0428guardrail4
本日時点ではAWS::Bedrock::Guardrail
リソースタイプにバージョンや ARN を指定するプロパティが存在していません。
AWS CLI でいう create-guardrail-version 相当の機能がまだ使えないようですね。おそらく今後のアップデートで追加のリソースタイプが追加されるか、バージョンや ARN が指定できるようになるのではないかと思っています。
さいごに
本日は Guardrails for Amazon Bedrock が CloudFormation でもサポートされたので使ってみました。
今回は対応がかなり早かったですね。
サポートされたリソースタイプはどれも東京リージョン対応はまだですが、色々と CloudFormation でサポートされるリソースも増えてきたので、Bedrock + IaC 周りのナレッジも今後出てきそうですね。