いわさです。
約 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 周りのナレッジも今後出てきそうですね。