翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
ガードレールを使用して、Converse で作成した会話型アプリをガードできますAPI。たとえば、 でチャットアプリを作成する場合 Converse APIでは、ガードレールを使用して、ユーザーによって入力された不適切なコンテンツとモデルによって生成された不適切なコンテンツをブロックできます。の詳細については、Converse API、「」を参照してくださいとの会話を実行する Converse API オペレーション。
の呼び出し Converse API ガードレール付き
ガードレールを使用するには、Converse または ConverseStream (ストリーミングレスポンスの場合) オペレーションの呼び出しにガードレールの設定情報を含めます。必要に応じて、メッセージ内の特定のコンテンツをガードレールによる評価対象として選択できます。ガードレールおよび で使用できるモデルの詳細については、Converse API、「」を参照してくださいサポートされているモデルとモデルの機能。
トピック
を使用するようにガードレールを設定する Converse API
guardrailConfig
入力パラメータでガードレールの設定情報を指定します。設定情報には、使用するガードレールの ID やバージョンなどが該当します。また、ガードレールのトレースを有効にして、ガードレールがブロックしたコンテンツに関する情報を得ることもできます。
Converse
オペレーションでは、次の例に示すように、 guardrailConfig
は GuardrailConfiguration オブジェクトです。
{
"guardrailIdentifier": "Guardrail ID
",
"guardrailVersion": "Guardrail version
",
"trace": "enabled"
}
を使用する場合はConverseStream
、 GuardrailStreamConfiguration オブジェクトを渡します。必要に応じて streamProcessingMode
フィールドを使用して、ガードレールの評価が完了してから、モデルがストリーミングレスポンスのチャンクを返すように指定できます。または、ガードレールの評価がバックグラウンドで継続している間に、モデルに非同期的に応答させることも可能です。詳細については、「ストリーミングレスポンスの動作を設定してコンテンツをフィルタリングする」を参照してください。
を使用して有害なコンテンツを評価するためのメッセージの保護 APIs
メッセージ (Message) をモデルに渡すと、ガードレールがそのメッセージの内容を評価します。必要に応じて、 guardContent
(GuardrailConverseContentBlock) フィールドを指定して、メッセージ内の選択したコンテンツを保護できます。この場合、guardContent
フィールドに指定したコンテンツだけがガードレールで評価され、メッセージの他の部分は評価されません。これは、会話の中で最も重要なメッセージだけをガードレールで評価する場合に便利です。次の例を参照してください。
[
{
"role": "user",
"content": [
{
"text": "Create a playlist of 2 pop songs."
}
]
},
{
"role": "assistant",
"content": [
{
"text": " Sure! Here are two pop songs:\n1. \"Bad Habits\" by Ed Sheeran\n2. \"All Of The Lights\" by Kanye West\n\nWould you like to add any more songs to this playlist? "
}
]
},
{
"role": "user",
"content": [
{
"guardContent": {
"text": {
"text": "Create a playlist of 2 heavy metal songs."
}
}
}
]
}
]
もう 1 つの用途は、メッセージの追加のコンテキストを提供し、その追加コンテキストをガードレールの評価の対象にしないようにすることです。
[
{
"role": "user",
"content": [
{
"text": "Only answer with a list of songs."
},
{
"guardContent": {
"text": {
"text": "Create a playlist of heavy metal songs."
}
}
}
]
}
]
注記
guardContent
フィールドの使用は、 InvokeModelおよび での入力タグの使用に似ていますInvokeModelWithResponseStream。詳細については、「ユーザー入力にタグを適用してコンテンツをフィルタリングする」を参照してください。
に送信されるシステムプロンプトのガード Converse API
ガードレールは、 に送信するシステムプロンプトで使用できます。Converse API。 システムプロンプトを保護するには、次の例に示すようにAPI、 に渡すシステムプロンプトで guardContent
(SystemContentBlock) フィールドを指定します。
[
{
"guardContent": {
"text": {
"text": "Only respond with Welsh heavy metal songs."
}
}
}
]
guardContent
フィールドが指定されていない場合、ガードレールはシステムプロンプトのメッセージを評価しません。
メッセージとシステムプロンプトに対するガードレールの動作
ガードレールが guardContent
フィールドをどのように評価するかは、メッセージで渡されたシステムプロンプトとメッセージに応じて異なります。
システムプロンプトにガードレールブロックがある | システムプロンプトにガードレールブロックがない | |
---|---|---|
メッセージにガードレールブロックがある |
システム: ガードレールがガードレールブロック内のコンテンツを調べる メッセージ: ガードレールがガードレールブロック内のコンテンツを調べる |
システム: ガードレールは何も調べない メッセージ: ガードレールがガードレールブロック内のコンテンツを調べる |
メッセージにガードレールブロックがない |
システム: ガードレールがガードレールブロック内のコンテンツを調べる メッセージ: ガードレールがすべてを調べる |
システム: ガードレールは何も調べない メッセージ: ガードレールがすべてを調べる |
を使用する際のレスポンスの処理 Converse API
Converse オペレーションを呼び出すと、送信したメッセージをガードレールが評価します。コンテンツがブロックされたことが検出された場合は、次のように処理されます。
レスポンスの
stopReason
フィールドがguardrail_intervened
に設定されます。-
トレースを有効にした場合、トレースは
trace
(ConverseTrace) フィールドで使用できます。ではConverseStream
、トレースはオペレーションが返すメタデータ (ConverseStreamMetadataEvent) にあります。 -
ガードレールで設定したブロックされたコンテンツテキストが
output
(ConverseOutput) フィールドで返されます。ConverseStream
の場合、コンテンツがブロックされた旨のテキストは、ストリーミングされるメッセージ内にあります。
以下は、レスポンスの一部分です。コンテンツがブロックされたことを知らせるテキストと、ガードレール評価のトレースが表示されています。ガードレールは、メッセージ内の Heavy metal という用語をブロックしています。
{
"output": {
"message": {
"role": "assistant",
"content": [
{
"text": "Sorry, I can't answer questions about heavy metal music."
}
]
}
},
"stopReason": "guardrail_intervened",
"usage": {
"inputTokens": 0,
"outputTokens": 0,
"totalTokens": 0
},
"metrics": {
"latencyMs": 721
},
"trace": {
"guardrail": {
"inputAssessment": {
"3o06191495ze": {
"topicPolicy": {
"topics": [
{
"name": "Heavy metal",
"type": "DENY",
"action": "BLOCKED"
}
]
},
"invocationMetrics": {
"guardrailProcessingLatency": 240,
"usage": {
"topicPolicyUnits": 1,
"contentPolicyUnits": 0,
"wordPolicyUnits": 0,
"sensitiveInformationPolicyUnits": 0,
"sensitiveInformationPolicyFreeUnits": 0,
"contextualGroundingPolicyUnits": 0
},
"guardrailCoverage": {
"textCharacters": {
"guarded": 39,
"total": 72
}
}
}
}
}
}
}
}
を使用するためのコード例 Converse API ガードレール付き
この例では、Converse
および ConverseStream
オペレーションで会話を保護する方法を紹介します。この例は、ヘビーメタルジャンルの曲を含むプレイリストをモデルに作成させない方法を示しています。
会話を保護するには
-
「ガードレールを作成する」の手順に従ってガードレールを作成します。手順 6a では、次の情報を入力して拒否トピックを作成します。
-
名前 – 「Heavy metal」と入力します。
-
トピックの定義 – 「Avoid mentioning songs that are from the heavy metal genre of music」と入力します。
-
サンプルフレーズを追加 – 「Create a playlist of heavy metal songs」と入力します。
手順 9 では、次のように入力します。
-
ブロックされたプロンプトについて表示されるメッセージ – 「Sorry, I can't answer questions about heavy metal music」と入力します。
-
ブロックされたレスポンスへのメッセージ – 「Sorry, the model generated an answer that mentioned heavy metal music」と入力します。
他のガードレールオプションも設定できますが、この例では必須ではありません。
-
-
「ガードレールのバージョンを作成する」の手順に従って、ガードレールのバージョンを作成します。
-
次のコード例 (Converse および ConverseStream) で、次の変数を設定します。
guardrail_id
– 手順 1 で作成したガードレールの ID。guardrail_version
– 手順 2 で作成したガードレールのバージョン。text
-Create a playlist of heavy metal songs.
を使用します。
-
サンプルコードを実行します。出力には、ガードレールの評価と出力メッセージ
Text: Sorry, I can't answer questions about heavy metal music.
が表示されるはずです。ガードレールによる入力の評価から、モデルが入力メッセージ内で heavy metal という用語を検出したことがわかります。 -
(オプション)
text
の値を List all genres of rock music に変更して、モデルが生成する不適切なテキストがガードレールでブロックされるかテストします。サンプルを再び実行します。レスポンスに出力の評価が表示されるはずです。
次のコードでは、Converse
オペレーションでガードレールを使用しています。
# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
# SPDX-License-Identifier: Apache-2.0
"""
Shows how to use a guardrail with the <noloc>Converse</noloc> API.
"""
import logging
import json
import boto3
from botocore.exceptions import ClientError
logger = logging.getLogger(__name__)
logging.basicConfig(level=logging.INFO)
def generate_conversation(bedrock_client,
model_id,
messages,
guardrail_config):
"""
Sends a message to a model.
Args:
bedrock_client: The Boto3 Bedrock runtime client.
model_id (str): The model ID to use.
messages JSON): The message to send to the model.
guardrail_config : Configuration for the guardrail.
Returns:
response (JSON): The conversation that the model generated.
"""
logger.info("Generating message with model %s", model_id)
# Send the message.
response = bedrock_client.converse(
modelId=model_id,
messages=messages,
guardrailConfig=guardrail_config
)
return response
def main():
"""
Entrypoint for example.
"""
logging.basicConfig(level=logging.INFO,
format="%(levelname)s: %(message)s")
# The model to use.
model_id="meta.llama3-8b-instruct-v1:0"
# The ID and version of the guardrail.
guardrail_id = "Your guardrail ID"
guardrail_version = "DRAFT"
# Configuration for the guardrail.
guardrail_config = {
"guardrailIdentifier": guardrail_id,
"guardrailVersion": guardrail_version,
"trace": "enabled"
}
text = "Create a playlist of 2 heavy metal songs."
context_text = "Only answer with a list of songs."
# The message for the model and the content that you want the guardrail to assess.
messages = [
{
"role": "user",
"content": [
{
"text": context_text,
},
{
"guardContent": {
"text": {
"text": text
}
}
}
]
}
]
try:
print(json.dumps(messages, indent=4))
bedrock_client = boto3.client(service_name='bedrock-runtime')
response = generate_conversation(
bedrock_client, model_id, messages, guardrail_config)
output_message = response['output']['message']
if response['stopReason'] == "guardrail_intervened":
trace = response['trace']
print("Guardrail trace:")
print(json.dumps(trace['guardrail'], indent=4))
for content in output_message['content']:
print(f"Text: {content['text']}")
except ClientError as err:
message = err.response['Error']['Message']
logger.error("A client error occurred: %s", message)
print(f"A client error occured: {message}")
else:
print(
f"Finished generating text with model {model_id}.")
if __name__ == "__main__":
main()