RareJob Tech Blog

レアジョブテクノロジーズのエンジニア・デザイナーによる技術ブログです

生成AI のガイドラインを Guardrails for Amazon Bedrock でサポートする

ChatGPT を皮切りにAIチャットボットを導入する企業が増えてきました。Amazon Bedrockは、大規模言語モデル(LLM)を使用したアプリケーション開発のためのプラットフォームであり、最近Guardrailsという機能が追加されました。申し遅れました、CTO室の塚田です。

生成AIを活用する際、適切なガイドラインの設定は欠かせません。Amazon Bedrockの新機能であるGuardrailsは、このガイドラインの設定と実施をサポートするツールです。

Guardrailsでは以下の3つの機能が利用可能です:

  1. トピックの拒否
  2. コンテンツフィルター
  3. 個人情報の再編集

これらの機能は、以下のような問題を回避するために設計されています:

  • ユーザー入力に有害な言葉・内容が含まれている
  • 生成AIの応答に意図せず有害な言葉・内容が含まれてしまう
  • 悪意のあるユーザーによる生成AIへの攻撃により、不適切な応答や情報漏洩が起こる
  • 機密情報や個人情報がユーザー入力や生成AI応答に含まれてしまう
  • 業務上都合の悪い言葉・内容がユーザーと生成AIの会話に含まれる

名前の通り、あらかじめガードレールを設置することで、これらのリスクを軽減できます。

具体的な使用方法は、Amazonの公式ブログ をご参照ください。 公式ブログでは、GuardrailsをBedrockに作成し、"CompetitorY"という単語をNGワードに指定する例が紹介されています。

Pythonを使ってBedrockを実行する際のGuardrailsの使用方法は、ブログには詳しく説明されていませんので Guardrailsを活用したサンプルコードは以下の通りです。

import boto3
import json
import os

client = boto3.client('bedrock', region_name='us-east-1')
bedrock_runtime = boto3.client('bedrock-runtime', region_name='us-east-1')

guardrail_identifier = os.environ['GUARDRAIL_IDENTIFIER']
guardrail = client.list_guardrails(guardrailIdentifier=guardrail_identifier)['guardrails'][-1]

def invoke_model(client, prompt, model,
    accept = 'application/json', content_type = 'application/json',
    max_tokens  = 512, temperature = 1.0, top_p = 1.0, top_k = 200, stop_sequences = [],
    guardrailIdentifier=guardrail['id'],
    guardrailVersion=guardrail['version'],
    trace="ENABLED"):

    input = {
        'max_tokens': max_tokens,
        'stop_sequences': stop_sequences,
        'temperature': temperature,
        'top_p': top_p,
        'top_k': top_k,
        "anthropic_version": "bedrock-2023-05-31",
        "messages": [{"role": "user", "content": prompt}]
    }
    body=json.dumps(input)
    response = client.invoke_model(body=body, modelId=model, accept=accept, contentType=content_type,
                             guardrailIdentifier=guardrailIdentifier,guardrailVersion=guardrailVersion,trace=trace)
    response_body = json.loads(response.get('body').read())
    output = response_body.get('content')[0]['text']
    return output, response_body

def get_output(prompt, model, max_tokens, temperature, top_p):
    output, response_body = invoke_model(
        client=bedrock_runtime,
        prompt=prompt,
        model=model,
        temperature=temperature,
        top_p=top_p,
        max_tokens=max_tokens,
    )
    print("Guardrail Trace:")
    print(json.dumps(response_body, indent=2))

    print("Response:")
    print(output)

prompt = os.environ['MSG']
model = "anthropic.claude-3-haiku-20240307-v1:0"

max_tokens = 1024
temperature = 0.1
top_p = 0.9

get_output(prompt, model, max_tokens=max_tokens, temperature=temperature, top_p=top_p)

この例では anthropic.claude-3-haiku を使うようにしていますが、ここは柔軟に変更が可能です。

GUARDRAIL_IDENTIFIER には Guardrails の ID をブラウザで確認した上で設定してください

guardrails

pip install boto3 --target .
export GUARDRAIL_IDENTIFIER='your-guardrail-identifier'
export MSG='CompetitorY という会社について教えてください'
python guardrails.py

ガードレールが有効な場合、フィルタリングに設定した"CompetitorY"がブロックされ、以下のような結果が返ってきます:

Guardrail Trace:
{
  "type": "message",
  "role": "assistant",
  "content": [
    {
      "type": "text",
      "text": "Sorry, the model cannot answer this question."
    }
  ],
  "amazon-bedrock-trace": {
    "guardrail": {
      "input": {
        "xxxxxxxx": {
          "wordPolicy": {
            "customWords": [
              {
                "match": "CompetitorY",
                "action": "BLOCKED"
              }
            ]
          }
        }
      }
    }
  },
  "amazon-bedrock-guardrailAction": "INTERVENED"
}
Response:
Sorry, the model cannot answer this question.

今回の例はわかりやすいように、NGワードを用いたブロックの例ですが、マスキングすることも可能です。

Guardrailsは、事前に設定したルールに基づいてユーザー入力や生成AIの応答をフィルタリングする機能です。 NGワードや禁止トピックを設定することで、不適切なコンテンツを排除、必要であれば名前、住所、電話番号、Eメールアドレスなどの情報を自動的にマスキングできます。

LLMを使用する際は、有害な言葉や内容、機密情報、個人情報などが含まれるリスクがあるため、Guardrailsのような機能を活用し、適切なガイドラインを設定することが重要です。

Guardrailsを使うことで、生成AIの活用における様々なリスクを軽減し、安全で適切な運用が可能となります。企業におけるAIチャットボットの導入が進む中、Guardrailsは生成AIガイドラインの設定と実施に大きく貢献してくれると考えております。