AnthropicClaudeメッセージ API - Amazon Bedrock

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

AnthropicClaudeメッセージ API

このセクションでは、Anthropic Claude Messages API を使用するための推論パラメータとコード例を紹介します。

AnthropicClaudeメッセージ API の概要

Messages API を使用して、チャットボットやバーチャルアシスタントアプリケーションを作成できます。API は、AnthropicClaudeユーザーとモデル (アシスタント) 間の会話のやりとりを管理します。

Anthropicユーザーとアシスタントの会話を交互に行うように Claude モデルをトレーニングします。新しいメッセージを作成するときは、messagesパラメーターで前の会話の順番を指定します。次に、モデルは会話内の次のメッセージを生成します。

各入力メッセージは、役割と内容を含むオブジェクトでなければなりません。1 つのユーザーロールメッセージを指定することも、複数のユーザーメッセージとアシスタントメッセージを含めることもできます。最初のメッセージには必ずユーザーロールを使用する必要があります。

返信元を事前入力する手法 Claude (最後のアシスタントロールの Message を使用して Claude の応答の先頭に入力する) を使用している場合は、Claude中断したところから再開して応答します。この手法では、Claude引き続きアシスタントロールの応答が返されます。

最後のメッセージがアシスタントロールを使用している場合、応答内容はそのメッセージの内容からすぐに続きます。これを利用して、モデルの応答の一部を制限できます。

ユーザーメッセージが 1 つの場合の例:

[{"role": "user", "content": "Hello, Claude"}]

会話の順番が複数ある例:

[ {"role": "user", "content": "Hello there."}, {"role": "assistant", "content": "Hi, I'm Claude. How can I help you?"}, {"role": "user", "content": "Can you explain LLMs in plain English?"}, ]

Claude からの回答の一部が入力された例:

[ {"role": "user", "content": "Please describe yourself using only JSON"}, {"role": "assistant", "content": "Here is my JSON description:\n{"}, ]

各入力メッセージの内容は、単一の文字列でも、各ブロックが特定のタイプを持つコンテンツブロックの配列でもかまいません。文字列を使用することは、「テキスト」タイプの 1 つのコンテンツブロックの配列の省略形です。以下の入力メッセージは同等です。

{"role": "user", "content": "Hello, Claude"}
{"role": "user", "content": [{"type": "text", "text": "Hello, Claude"}]}

AnthropicClaudeモデル用のプロンプトの作成について詳しくは、ドキュメンテーションの「プロンプト入門」を参照してください。Anthropic Claudemessages API に移行したい既存のテキスト補完プロンプトがある場合は、「テキスト補完からの移行」を参照してください。

システムプロンプト

システムプロンプトをリクエストに含めることもできます。システムプロンプトでは、特定の目標や役割を指定するなどAnthropicClaude、コンテキストや指示を提供できます。次の例のように、systemフィールドにシステムプロンプトを指定します。

"system": "You are Claude, an AI assistant created by Anthropic to be helpful, harmless, and honest. Your goal is to provide informative and substantive responses to queries while avoiding potential harms."

詳細については、Anthropicドキュメントの「システムプロンプト」を参照してください。

マルチモーダルプロンプト

マルチモーダルプロンプトは、複数のモダリティ (画像とテキスト) を 1 つのプロンプトにまとめます。モダリティは入力フィールドで指定します。content次の例は、AnthropicClaude提供された画像の内容を説明するように求める方法を示しています。サンプルコードについては、「マルチモーダルコードの例」を参照してください。

{ "anthropic_version": "bedrock-2023-05-31", "max_tokens": 1024, "messages": [ { "role": "user", "content": [ { "type": "image", "source": { "type": "base64", "media_type": "image/jpeg", "data": "iVBORw..." } }, { "type": "text", "text": "What's in these images?" } ] } ] }

モデルには最大 20 個の画像を指定できます。アシスタントロールには画像を追加できません。

リクエストに含める各画像は、トークンの使用量にカウントされます。詳しくは、Anthropicドキュメントの「画像コスト」を参照してください。

サポートされているモデル

Messages API Anthropic Claude は以下のモデルで使用できます。

  • AnthropicClaudeInstantv1.2

  • AnthropicClaude2 v2

  • AnthropicClaude2 v2.1

  • Anthropic Claude 3 Sonnet

  • Anthropic Claude 3 Haiku

リクエストとレスポンス

リクエスト本文は、bodyInvokeModelInvokeModelWithResponseStreamリクエストのフィールドでまたはに渡されます。1 回のリクエストで送信できるペイロードの最大サイズは 20 MB です。

詳細については、https://docs.anthropic.com/claude/reference/messages_post を参照してください。

Request

AnthropicClaudeには、メッセージ推論呼び出し用の以下の推論パラメータがあります。

{ "anthropic_version": "bedrock-2023-05-31", "max_tokens": int, "system": string, "messages": [ { "role": string, "content": [ { "type": "image", "source": { "type": "base64", "media_type": "image/jpeg", "data": "content image bytes" } }, { "type": "text", "text": "content text" } ] } ], "temperature": float, "top_p": float, "top_k": int, "stop_sequences": [string] }

必須パラメータを以下に示します。

  • anthropic_version — (必須) アンソロピックバージョン。値は bedrock-2023-05-31 にする必要があります。

  • max_tokens — (必須) 停止する前に生成するトークンの最大数。

    AnthropicClaudeモデルがの値に達する前にトークンの生成を停止する場合があることに注意してください。max_tokensAnthropicClaudeモデルによって、このパラメーターの最大値は異なります。詳細については、「モデル比較」を参照してください。

  • メッセージ — (必須) 入力メッセージ。

    • 役割 — 会話ターンの役割。有効な値は、user および assistant です。

    • 内容 — (必須) 会話ターンの内容。

      • タイプ — (必須) コンテンツのタイプ。有効な値は、image および text です。

        指定する場合はimage、次の形式で画像ソースも指定する必要があります。

        source — (必須) 会話の内容が変わります。

        • type — (必須) 画像のエンコードタイプ。指定できますbase64

        • media_type — (必須) 画像のタイプ。次の画像形式を指定できます。

          • image/jpeg

          • image/png

          • image/webp

          • image/gif

        • データ — (必須) 画像の base64 でエンコードされた画像バイト。イメージの最大サイズは 3.75 MB です。画像の高さと幅の最大値は 8000 ピクセルです。

        指定する場合はtexttextでのプロンプトも指定する必要があります。

オプションのパラメータを以下に示します。

  • system — (オプション) リクエストのシステムプロンプト。

    システムプロンプトは、特定の目標や役割を指定するなどAnthropicClaude、コンテキストや指示を提供する方法です。詳細については、Anthropicドキュメントの「システムプロンプトの使用方法」を参照してください。

    注記

    AnthropicClaudeシステムプロンプトはバージョン 2.1 以降で使用できます。

  • stop_sequences — (オプション) モデルの生成を停止させるカスタムテキストシーケンス。 AnthropicClaudeモデルは通常、自然に順番が終わると停止します。この場合、stop_reason応答フィールドの値はです。end_turnカスタムテキスト文字列が見つかったときにモデルの生成を停止させたい場合は、stop_sequencesパラメーターを使用できます。モデルがカスタムテキスト文字列のいずれかを検出した場合、stop_reasonstop_sequence応答フィールドの値はで、stop_sequenceの値には一致した停止シーケンスが含まれます。

    エントリの最大数は 8191 です。

  • 温度 — (オプション) 応答に注入されるランダム性の量。

    デフォルト値 最小値 最大値

    1

    0

    1

  • top_p — (オプション) 核サンプリングを使用します。

    nucleus サンプリングでは、AnthropicClaude後続の各トークンのすべてのオプションの累積分布を確率の降順で計算し、で指定された特定の確率に達したらその累積分布をカットします。top_ptemperatureどちらか一方を変更する必要がありますがtop_p、両方は変更しないでください。

    デフォルト値 最小値 最大値

    0.999

    0

    1

オプションのパラメータを以下に示します。

  • top_k — (オプション) 後続の各トークンの上位 K 個のオプションからのみサンプリングします。

    ロングテールの低確率応答を削除する場合に使用しますtop_k

    デフォルト値 最小値 最大値

    デフォルトでは無効になっています。

    0

    100,000,000

Response

AnthropicClaudeモデルはメッセージ推論呼び出しに対して以下のフィールドを返します。

{ "id": string, "model": string, "type" : "message", "role" : "assistant", "content": [ { "type": "text", "text": string } ], "stop_reason": string, "stop_sequence": string, "usage": { "input_tokens": integer, "output_tokens": integer } }
  • id — 応答の一意の識別子。ID の形式と長さは時間の経過とともに変化する可能性があります。

  • モデル — Anthropic Claude リクエストを行ったモデルの ID。

  • stop_reason — Anthropic Claude レスポンスの生成を停止した理由。

    • end_turn — モデルが自然停止点に達した

    • max_tokensmax_tokens 生成されたテキストが入力フィールドの値を超えているか、モデルがサポートするトークンの最大数を超えています。'

    • stop_sequence — 入力フィールドで指定したストップシーケンスのいずれかをモデルが生成しました。stop_sequences

  • タイプ — 応答のタイプ。値は常に message です。

  • role — 生成されたメッセージの会話型役割。値は常に assistant です。

  • コンテンツ — モデルによって生成されたコンテンツ。配列として返されます。

    • タイプ — コンテンツのタイプ。現在、サポートされている値は text のみです。

    • テキスト — コンテンツのテキスト。

  • usage — リクエストで指定したトークンの数と、レスポンスでモデルが生成したトークンの数を格納するコンテナ。

    • input_tokens — リクエストに含まれる入力トークンの数。

    • output_tokens — レスポンスでモデルが生成したトークンの数。

    • stop_sequence — 入力フィールドで指定したストップシーケンスのいずれかをモデルが生成しました。stop_sequences

コードサンプル

以下のコード例は、メッセージ API の使用方法を示しています。

メッセージコード例

この例は、シングルターンのユーザーメッセージと、AnthropicClaude 3 Sonnetあらかじめ入力されたアシスタントメッセージを含むユーザーターンをモデルに送信する方法を示しています。

# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. # SPDX-License-Identifier: Apache-2.0 """ Shows how to generate a message with Anthropic Claude (on demand). """ import boto3 import json import logging from botocore.exceptions import ClientError logger = logging.getLogger(__name__) logging.basicConfig(level=logging.INFO) def generate_message(bedrock_runtime, model_id, system_prompt, messages, max_tokens): body=json.dumps( { "anthropic_version": "bedrock-2023-05-31", "max_tokens": max_tokens, "system": system_prompt, "messages": messages } ) response = bedrock_runtime.invoke_model(body=body, modelId=model_id) response_body = json.loads(response.get('body').read()) return response_body def main(): """ Entrypoint for Anthropic Claude message example. """ try: bedrock_runtime = boto3.client(service_name='bedrock-runtime') model_id = 'anthropic.claude-3-sonnet-20240229-v1:0' system_prompt = "Please respond only with emoji." max_tokens = 1000 # Prompt with user turn only. user_message = {"role": "user", "content": "Hello World"} messages = [user_message] response = generate_message (bedrock_runtime, model_id, system_prompt, messages, max_tokens) print("User turn only.") print(json.dumps(response, indent=4)) # Prompt with both user turn and prefilled assistant response. #Anthropic Claude continues by using the prefilled assistant text. assistant_message = {"role": "assistant", "content": "<emoji>"} messages = [user_message, assistant_message] response = generate_message(bedrock_runtime, model_id,system_prompt, messages, max_tokens) print("User turn and prefilled assistant response.") print(json.dumps(response, indent=4)) except ClientError as err: message=err.response["Error"]["Message"] logger.error("A client error occurred: %s", message) print("A client error occured: " + format(message)) if __name__ == "__main__": main()

マルチモーダルコードの例

以下の例は、マルチモーダルメッセージ内の画像とプロンプトテキストをモデルに渡す方法を示しています。Anthropic Claude 3 Sonnet

マルチモーダルプロンプトと InvokeModel

次の例は、with にマルチモーダルプロンプトを送信する方法を示しています。Anthropic Claude 3 Sonnet InvokeModel

# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. # SPDX-License-Identifier: Apache-2.0 """ Shows how to run a multimodal prompt with Anthropic Claude (on demand) and InvokeModel. """ import json import logging import base64 import boto3 from botocore.exceptions import ClientError logger = logging.getLogger(__name__) logging.basicConfig(level=logging.INFO) def run_multi_modal_prompt(bedrock_runtime, model_id, messages, max_tokens): """ Invokes a model with a multimodal prompt. Args: bedrock_runtime: The Amazon Bedrock boto3 client. model_id (str): The model ID to use. messages (JSON) : The messages to send to the model. max_tokens (int) : The maximum number of tokens to generate. Returns: None. """ body = json.dumps( { "anthropic_version": "bedrock-2023-05-31", "max_tokens": max_tokens, "messages": messages } ) response = bedrock_runtime.invoke_model( body=body, modelId=model_id) response_body = json.loads(response.get('body').read()) return response_body def main(): """ Entrypoint for Anthropic Claude multimodal prompt example. """ try: bedrock_runtime = boto3.client(service_name='bedrock-runtime') model_id = 'anthropic.claude-3-sonnet-20240229-v1:0' max_tokens = 1000 input_image = "/path/to/image" input_text = "What's in this image?" # Read reference image from file and encode as base64 strings. with open(input_image, "rb") as image_file: content_image = base64.b64encode(image_file.read()).decode('utf8') message = {"role": "user", "content": [ {"type": "image", "source": {"type": "base64", "media_type": "image/jpeg", "data": content_image}}, {"type": "text", "text": input_text} ]} messages = [message] response = run_multi_modal_prompt( bedrock_runtime, model_id, messages, max_tokens) print(json.dumps(response, indent=4)) except ClientError as err: message = err.response["Error"]["Message"] logger.error("A client error occurred: %s", message) print("A client error occured: " + format(message)) if __name__ == "__main__": main()

を使用してマルチモーダルプロンプトをストリーミングします。 InvokeModelWithResponseStream

次の例は、with に送信されたマルチモーダルプロンプトからの応答をストリーミングする方法を示しています。Anthropic Claude 3 Sonnet InvokeModelWithResponseStream

# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. # SPDX-License-Identifier: Apache-2.0 """ Shows how to stream the response from Anthropic Claude Sonnet (on demand) for a multimodal request. """ import json import base64 import logging import boto3 from botocore.exceptions import ClientError logger = logging.getLogger(__name__) logging.basicConfig(level=logging.INFO) def stream_multi_modal_prompt(bedrock_runtime, model_id, input_text, image, max_tokens): """ Streams the response from a multimodal prompt. Args: bedrock_runtime: The Amazon Bedrock boto3 client. model_id (str): The model ID to use. input_text (str) : The prompt text image (str) : The path to an image that you want in the prompt. max_tokens (int) : The maximum number of tokens to generate. Returns: None. """ with open(image, "rb") as image_file: encoded_string = base64.b64encode(image_file.read()) body = json.dumps({ "anthropic_version": "bedrock-2023-05-31", "max_tokens": max_tokens, "messages": [ { "role": "user", "content": [ {"type": "text", "text": input_text}, {"type": "image", "source": {"type": "base64", "media_type": "image/jpeg", "data": encoded_string.decode('utf-8')}} ] } ] }) response = bedrock_runtime.invoke_model_with_response_stream( body=body, modelId=model_id) for event in response.get("body"): chunk = json.loads(event["chunk"]["bytes"]) if chunk['type'] == 'message_delta': print(f"\nStop reason: {chunk['delta']['stop_reason']}") print(f"Stop sequence: {chunk['delta']['stop_sequence']}") print(f"Output tokens: {chunk['usage']['output_tokens']}") if chunk['type'] == 'content_block_delta': if chunk['delta']['type'] == 'text_delta': print(chunk['delta']['text'], end="") def main(): """ Entrypoint for Anthropic Claude Sonnet multimodal prompt example. """ model_id = "anthropic.claude-3-sonnet-20240229-v1:0" input_text = "What can you tell me about this image?" image = "/path/to/image" max_tokens = 100 try: bedrock_runtime = boto3.client('bedrock-runtime') stream_multi_modal_prompt( bedrock_runtime, model_id, input_text, image, max_tokens) except ClientError as err: message = err.response["Error"]["Message"] logger.error("A client error occurred: %s", message) print("A client error occured: " + format(message)) if __name__ == "__main__": main()