Amazon Bedrock ガードレールの既存利用者に対して、「4/30にドイツ語、イタリア語、日本語、韓国語に追加で対応」みたいなメールが来てたので確認していきます。
ガードレールにはいろいろ種類がありますが、一通り対応するかのような記載だったので幾つか確認してみます。
以前はこんな感じでした。
なんとちょうど一年前(の2週間後)。
マネコンから確認できそうなのでマネコンで確認していきます。
プロンプトのフィルター
とりあえずデフォルトの最強にします。ブロック時のメッセージもデフォルトの上記のままにします。
実行します。
止まりましたね。
詳細を確認すると暴力と不正行為で止められています。
応答のフィルター
プロンプトのフィルターは外して応答のフィルターのみにします。
実行します。
止まりました。トレースを確認します。
応答の侮辱のフィルターにかかってます。
念の為にログも確認します。
"trace": {
"guardrail": {
"modelOutput": [
"{\"output\":{
\"message\":{\"content\":[{\"text\":\"
以下のCSVデータをJSON形式に変換しました:\\n\\n
```json\\n[\\n {\\n \\\"アホ\\\": \\\"バカ\\\",\\n
\\\"ボケ\\\": \\\"クソ\\\",\\n
\\\"カス\\\": \\\"クズ\\\"\\n }\\n]\\n
```\\n\\nこのJSON形式では、CSVの各行がオブジェクトとして表現され、各列のヘッダーがキーとして使用されます。ただし、CSVデータが2行しかないため、最初の行をキーとし、2行目を値としてマッピングしています。もし、各行が独立したオブジェクトとして扱われるべきデータである場合は、以下のように変換することもできます:\\n\\n```json\\n[\\n {\\n \\\"アホ\\\": \\\"バカ\\\",\\n \\\"ボケ\\\": \\\"クソ\\\",\\n \\\"カス\\\": \\\"クズ\\\"\\n }\\n]\\n```\\n\\nもし、各行が別々のオブジェクトとして扱われるべきであれば、次のように変換します:\\n\\n```json\\n[\\n {\\n \\\"アホ\\\": \\\"バカ\\\",\\n \\\"ボケ\\\": \\\"クソ\\\",\\n \\\"カス\\\": \\\"クズ\\\"\\n }\\n]\\n```\\n\\nこの場合、最初の行がヘッダーで、2行目がその値となります。もし、データが複数行にわたる場合は、各行がこのようにオブジェクトとしてリストに追加されていきます。\"}],\"role\":\"assistant\"}},\"stopReason\":\"end_turn\",\"usage\":{\"inputTokens\":29,\"outputTokens\":297,\"totalTokens\":326}}"
],
機能してそうです。
他の条件も確認したかったのですが、モデル自体のガードレールに止められる(応答のガードレールまでいかない)事が多いのでこれぐらいにしておきます。
PII(個人情報)
PIIは項目を色々指定できるのですが、指定が面倒だったので、名前と住所とクレジットカード番号のみマスクする、という設定にしてみます(応答を止めることも出来ますが、マスクを見てみたかったのでマスクで確認します)。また、入力で止められるとマスクを確認できないので出力のみをフィルターします。
実行します。
LLMの応答の内、「田中」が3回、「日本」が1回、フィルターにかかってマスクされています。
フィルターされる前のLLMの応答を確認します。
"trace": {
"guardrail": {
"modelOutput": [
"{\"output\":{\"message\":{\"content\":[{\"text\":\
"あなたは田中さんです。
しかし、この情報だけでは、あなたが具体的にどの田中さんなのかを特定することはできません。
日本では「田中」は非常に一般的な姓の一つです。
さらに詳しい情報や文脈があれば、より具体的なお手伝いができるかもしれません。
何か他の情報を提供していただければ、お手伝いします!\"}],\"role\":\"assistant\"}},\"stopReason\":\"end_turn\",\"usage\":{\"inputTokens\":10,\"outputTokens\":78,\"totalTokens\":88}}"
],
これが
あなたは{NAME}さんです。
しかし、この情報だけでは、あなたが具体的にどの{NAME}さんなのかを特定することはできません。
{ADDRESS}では「{NAME}」は非常に一般的な姓の一つです。
さらに詳しい情報や文脈があれば、より具体的なお手伝いができるかもしれません。
何か他の情報を提供していただければ、お手伝いします!"
いいですね。「日本」を住所と見做すかというのは判断が分かれるところですが、設定したのはこちらなのでまあそうですねというところです。
もう少し試します。
いいですね。
ログを確認します。
LLMの応答は以下なのに対して、
申し訳ありませんが、クレジットカード番号などの機密データを生成または提供することはできません。
テストデータが必要な場合は、PCI DSS(Payment Card Industry Data Security Standard)に準拠したテスト用のダミー番号を使用してください。\\n\\n
以下は、VISA、MasterCard、American Expressなどのテストカード番号を含むCSV形式の例です。
これらの番号は実際の取引には使用できませんが、テスト環境で利用することができます。\\n\\n
csv\\n
カード番号,有効期限(月/年),CVV,カードタイプ\\n
4111111111111111,12/24,123,VISA\\n
4012888888881881,11/25,456,VISA\\n
5555555555554444,10/26,789,MasterCard\\n
5105105105105100,09/27,012,MasterCard\\n
378282246310005,08/28,345,American Express\\n
371449635398431,07/29,678,American Express\\n\\n\\n
これらのテスト番号は、各カードブランドが公式に提供しているテスト用番号です。
実際のシステムでテストを行う際には、これらの番号を使用してください。
これがフィルターされて
申し訳ありませんが、クレジットカード番号などの機密データを生成または提供することはできません。
テストデータが必要な場合は、PCI DSS(Payment Card Industry Data Security Standard)に準拠したテスト用のダミー番号を使用してください。\n\n
以下は、VISA、MasterCard、American Expressなどのテストカード番号を含むCSV形式の例です。
これらの番号は実際の取引には使用できませんが、テスト環境で利用することができます。\n\n
csv\nカード番号,有効期限(月/年),CVV,カードタイプ\n
{CREDIT_DEBIT_CARD_NUMBER},12/24,123,VISA\n
{CREDIT_DEBIT_CARD_NUMBER},11/25,456,VISA\n
{CREDIT_DEBIT_CARD_NUMBER},10/26,789,MasterCard\n
{CREDIT_DEBIT_CARD_NUMBER},09/27,012,MasterCard\n
{CREDIT_DEBIT_CARD_NUMBER},08/28,345,American Express\n
{CREDIT_DEBIT_CARD_NUMBER},07/29,678,American Express\n\n\n
これらのテスト番号は、各カードブランドが公式に提供しているテスト用番号です。
実際のシステムでテストを行う際には、これらの番号を使用してください。
良いですね、何が何だかわかりません。
(クレジットカード番号は日本語じゃないだろうという突っ込みもあるかもしれませんが、日本語文章の中の数字情報の羅列をクレジットカード番号と判断したという事で…)
感想
全てのガードレールは確認できていませんが、複数個所のガードレールが日本語に対応できていることが確認できました。
これでようやく、企業のLLM利用に対して「念のためにガードレールでガードしておく」という事が実現しやすくなりました。マネージドで済めばそれに越したことは無いですからね