Bedrock Anthropic 3

Anthropic Claude (英語) は、さまざまなアプリケーションで使用できる基礎的な AI モデルのファミリです。

Claude モデルには以下の高度な機能があります

  • 200k トークンのコンテキストウィンドウ: Claude は 200,000 に匹敵する豊富なトークン容量を誇り、技術ドキュメント、コードベース、文学作品などのアプリケーションで広範な情報を処理するのに最適です。

  • サポートされているタスク: Claude の多用途性は、要約、Q&A、傾向予測、ドキュメント比較などのタスクにおよび、対話からコンテンツ生成まで幅広いアプリケーションを可能にします。

  • AI 安全機能: Anthropic の安全性研究に基づいて構築された Claude は、インタラクションにおける有用性、誠実さ、無害性を優先し、ブランドリスクを軽減し、責任ある AI の動作を保証します。

AWS Bedrock Anthropic モデルページ [Amazon] および Amazon Bedrock ユーザーガイド には、AWS ホストモデルの使用方法に関する詳細情報が含まれています。

Anthropic の Claude 2 と 3 つのモデルは、Anthropic 独自のクラウドプラットフォームでも直接利用できます。Spring AI は、アクセスするための専用の Anthropic Claude クライアントを提供します。

前提条件

API アクセスの設定については、Spring Amazon Bedrock に関する AI ドキュメントを参照してください。

リポジトリと BOM の追加

Spring AI アーティファクトは、Spring マイルストーンおよびスナップショットリポジトリで公開されます。これらのリポジトリをビルドシステムに追加するには、リポジトリセクションを参照してください。

依存関係の管理を支援するために、Spring AI は BOM (部品表) を提供し、一貫したバージョンの Spring AI がプロジェクト全体で使用されるようにします。Spring AI BOM をビルドシステムに追加するには、"依存関係管理" セクションを参照してください。

自動構成

spring-ai-bedrock-ai-spring-boot-starter 依存関係をプロジェクトの Maven pom.xml ファイルに追加します。

<dependency>
  <groupId>org.springframework.ai</groupId>
  <artifactId>spring-ai-bedrock-ai-spring-boot-starter</artifactId>
</dependency>

または、Gradle build.gradle ビルドファイルに保存します。

dependencies {
    implementation 'org.springframework.ai:spring-ai-bedrock-ai-spring-boot-starter'
}
Spring AI BOM をビルドファイルに追加するには、"依存関係管理" セクションを参照してください。

Anthropic チャットを有効にする

デフォルトでは、Anthropic モデルは無効になっています。これを有効にするには、spring.ai.bedrock.anthropic3.chat.enabled プロパティを true に設定します。環境変数のエクスポートは、この構成プロパティを設定する 1 つの方法です。

export SPRING_AI_BEDROCK_ANTHROPIC3_CHAT_ENABLED=true

チャットのプロパティ

プレフィックス spring.ai.bedrock.aws は、AWS Bedrock への接続を設定するためのプロパティプレフィックスです。

プロパティ 説明 デフォルト

spring.ai.bedrock.aws.region

使用する AWS リージョン。

米国東部 -1

spring.ai.bedrock.aws.timeout

使用する AWS タイムアウト。

5 分

spring.ai.bedrock.aws.access-key

AWS アクセスキー。

-

spring.ai.bedrock.aws.secret-key

AWS の秘密鍵。

-

プレフィックス spring.ai.bedrock.anthropic3.chat は、Claude のチャットモデル実装を構成するプロパティプレフィックスです。

プロパティ 説明 デフォルト

spring.ai.bedrock.anthropic3.chat.enabled

Bedrock Anthropic チャットモデルを有効にします。デフォルトでは無効になっています

false

spring.ai.bedrock.anthropic3.chat.model

使用するモデル ID。同期レスポンスとストリーミングレスポンスの両方で、anthropic.claude-3-sonnet-20240229-v1:0anthropic.claude-3-haiku-20240307-v1:0、従来の anthropic.claude-v2anthropic.claude-v2:1anthropic.claude-instant-v1 モデルをサポートします。

anthropic.claude-3-sonnet-20240229-v1:0

spring.ai.bedrock.anthropic3.chat.options.temperature

出力のランダム性を制御します。値の範囲は [0.0,1.0] です

0.8

spring.ai.bedrock.anthropic3.chat.options.top-p

サンプリング時に考慮するトークンの最大累積確率。

AWS Bedrock のデフォルト

spring.ai.bedrock.anthropic3.chat.options.top-k

生成が次のトークンを生成するために使用するトークンの選択肢の数を指定します。

AWS Bedrock のデフォルト

spring.ai.bedrock.anthropic3.chat.options.stop-sequences

ジェネレーティブが認識するシーケンスを最大 4 つ設定します。停止シーケンスの後、生成はさらなるトークンの生成を停止します。返されるテキストには停止シーケンスは含まれません。

10

spring.ai.bedrock.anthropic3.chat.options.anthropic-version

使用するジェネレーティブのバージョン。

bedrock-2023-05-31

spring.ai.bedrock.anthropic3.chat.options.max-tokens

生成されるレスポンスで使用するトークンの最大数を指定します。この最大値に達する前にモデルが停止する可能性があることに注意してください。このパラメーターは、生成するトークンの絶対最大数のみを指定します。最適なパフォーマンスを得るために、4,000 トークンの制限を推奨します。

500

他のモデル ID については、AnthropicChatModel [GitHub] (英語) を参照してください。サポートされている値は次のとおりです: anthropic.claude-instant-v1anthropic.claude-v2anthropic.claude-v2:1. モデル ID 値は基本モデル ID に関する AWS Bedrock ドキュメント [Amazon] にもあります。

spring.ai.bedrock.anthropic3.chat.options というプレフィックスが付いたすべてのプロパティは、リクエスト固有のランタイムオプションを Prompt 呼び出しに追加することで実行時にオーバーライドできます。

ランタイムオプション

Anthropic3ChatOptions.java [GitHub] (英語) は、温度、topK、topP などのモデル構成を提供します。

起動時に、BedrockAnthropicChatModel(api, options) コンストラクターまたは spring.ai.bedrock.anthropic3.chat.options.* プロパティを使用してデフォルトのオプションを構成できます。

実行時に、新しいリクエスト固有のオプションを Prompt 呼び出しに追加することで、デフォルトのオプションをオーバーライドできます。たとえば、特定のリクエストのデフォルトの温度をオーバーライドするには、次のようにします。

ChatResponse response = chatModel.call(
    new Prompt(
        "Generate the names of 5 famous pirates.",
        Anthropic3ChatOptions.builder()
            .withTemperature(0.4)
        .build()
    ));
モデル固有の AnthropicChatOptions [GitHub] (英語) に加えて、ChatOptionsBuilder#builder() [GitHub] (英語) で作成されたポータブル ChatOptions [GitHub] (英語) インスタンスを使用できます。

マルチモーダル

マルチモダリティとは、テキスト、イメージ、音声、その他のデータ形式を含むさまざまなソースからの情報を同時に理解して処理するモデルの機能を指します。このパラダイムは、AI モデルの大幅な進歩を表しています。

現在、Anthropic、Claude 3 は、images の base64 ソース型と、image/jpegimage/pngimage/gifimage/webp メディア型をサポートしています。詳細については、ビジョンガイド (英語) を参照してください。

Spring AI の Message インターフェースは、メディア型を導入することでマルチモーダル AI モデルをサポートします。この型には、生のメディアデータに Spring の org.springframework.util.MimeType および java.lang.Object を使用して、メッセージ内のメディア添付ファイルに関するデータと情報が含まれます。

以下は、Anthropic3ChatModelIT.java [GitHub] (英語) から抽出された簡単なコード例で、ユーザーテキストとイメージの組み合わせを示しています。

    byte[] imageData = new ClassPathResource("/test.png").getContentAsByteArray();

    var userMessage = new UserMessage("Explain what do you see o this picture?",
            List.of(new Media(MimeTypeUtils.IMAGE_PNG, imageData)));

    ChatResponse response = chatModel.call(new Prompt(List.of(userMessage)));

    assertThat(response.getResult().getOutput().getContent()).contains("bananas", "apple", "basket");

入力イメージ test.png :

Multimodal Test Image

「この写真に何が写っているか説明してください」というテキストメッセージとともに、次のようなレスポンスが生成されます。

The image shows a close-up view of a wire fruit basket containing several pieces of fruit.
The basket appears to be made of thin metal wires formed into a round shape with an elevated handle.

Inside the basket, there are a few yellow bananas and a couple of red apples or possibly tomatoes.
The vibrant colors of the fruit contrast nicely against the metallic tones of the wire basket.

The shallow depth of field in the photograph puts the focus squarely on the fruit in the foreground, while the basket handle extending upwards is slightly blurred, creating a pleasing bokeh effect in the background.

The composition and lighting give the image a clean, minimalist aesthetic that highlights the natural beauty and freshness of the fruit displayed in this elegant wire basket.

サンプルコントローラー

新しい Spring Boot プロジェクトを作成し、spring-ai-bedrock-ai-spring-boot-starter を pom (または gradle) の依存関係に追加します。

src/main/resources ディレクトリに application.properties ファイルを追加して、Anthropic チャットモデルを有効にして構成します。

spring.ai.bedrock.aws.region=eu-central-1
spring.ai.bedrock.aws.timeout=1000ms
spring.ai.bedrock.aws.access-key=${AWS_ACCESS_KEY_ID}
spring.ai.bedrock.aws.secret-key=${AWS_SECRET_ACCESS_KEY}

spring.ai.bedrock.anthropic3.chat.enabled=true
spring.ai.bedrock.anthropic3.chat.options.temperature=0.8
spring.ai.bedrock.anthropic3.chat.options.top-k=15
regionsaccess-keysecret-key を AWS 認証情報に置き換えます。

これにより、クラスに挿入できる BedrockAnthropicChatModel 実装が作成されます。以下は、テキスト生成にチャットモデルを使用する単純な @Controller クラスの例です。

@RestController
public class ChatController {

    private final BedrockAnthropic3ChatModel chatModel;

    @Autowired
    public ChatController(BedrockAnthropic3ChatModel chatModel) {
        this.chatModel = chatModel;
    }

    @GetMapping("/ai/generate")
    public Map generate(@RequestParam(value = "message", defaultValue = "Tell me a joke") String message) {
        return Map.of("generation", chatModel.call(message));
    }

    @GetMapping("/ai/generateStream")
	public Flux<ChatResponse> generateStream(@RequestParam(value = "message", defaultValue = "Tell me a joke") String message) {
        Prompt prompt = new Prompt(new UserMessage(message));
        return chatModel.stream(prompt);
    }
}

手動構成

BedrockAnthropic3ChatModel [GitHub] (英語) は ChatModel および StreamingChatModel を実装し、低レベル Anthropic3ChatBedrockApi クライアントを使用して Bedrock Anthropic サービスに接続します。

spring-ai-bedrock 依存関係をプロジェクトの Maven pom.xml ファイルに追加します。

<dependency>
    <groupId>org.springframework.ai</groupId>
    <artifactId>spring-ai-bedrock</artifactId>
</dependency>

または、Gradle build.gradle ビルドファイルに保存します。

dependencies {
    implementation 'org.springframework.ai:spring-ai-bedrock'
}
Spring AI BOM をビルドファイルに追加するには、"依存関係管理" セクションを参照してください。

次に、BedrockAnthropic3ChatModel [GitHub] (英語) を作成し、テキスト生成に使用します。

Anthropic3ChatBedrockApi anthropicApi =  new Anthropic3ChatBedrockApi(
    AnthropicChatBedrockApi.AnthropicModel.CLAUDE_V3_SONNET.id(),
    EnvironmentVariableCredentialsProvider.create(),
    Region.US_EAST_1.id(),
    new ObjectMapper(),
    Duration.ofMillis(1000L));

BedrockAnthropic3ChatModel chatModel = new BedrockAnthropic3ChatModel(anthropicApi,
    AnthropicChatOptions.builder()
        .withTemperature(0.6f)
        .withTopK(10)
        .withTopP(0.8f)
        .withMaxTokensToSample(100)
        .withAnthropicVersion(AnthropicChatBedrockApi.DEFAULT_ANTHROPIC_VERSION)
        .build());

ChatResponse response = chatModel.call(
    new Prompt("Generate the names of 5 famous pirates."));

// Or with streaming responses
Flux<ChatResponse> response = chatModel.stream(
    new Prompt("Generate the names of 5 famous pirates."));

低レベル Anthropic3ChatBedrockApi クライアント

Anthropic3ChatBedrockApi [GitHub] (英語) は、AWS Bedrock Anthropic Claude 形 [Amazon] 上にある軽量の Java クライアントを提供します。

クライアントは、同期 (例: chatCompletion()) およびストリーミング (例: chatCompletionStream()) レスポンスの両方に対して、anthropic.claude-3-opus-20240229-v1:0anthropic.claude-3-sonnet-20240229-v1:0anthropic.claude-3-haiku-20240307-v1:0 およびレガシー anthropic.claude-v2anthropic.claude-v2:1anthropic.claude-instant-v1 モデルをサポートします。

API をプログラムで使用する方法の簡単なスニペットを次に示します。

Anthropic3ChatBedrockApi anthropicChatApi = new Anthropic3ChatBedrockApi(
   AnthropicModel.CLAUDE_V2.id(), Region.EU_CENTRAL_1.id(), Duration.ofMillis(1000L));

AnthropicChatRequest request = AnthropicChatRequest
  .builder(String.format(Anthropic3ChatBedrockApi.PROMPT_TEMPLATE, "Name 3 famous pirates"))
  .withTemperature(0.8f)
  .withMaxTokensToSample(300)
  .withTopK(10)
  .build();

// Sync request
AnthropicChatResponse response = anthropicChatApi.chatCompletion(request);

// Streaming request
Flux<AnthropicChatResponse> responseStream = anthropicChatApi.chatCompletionStream(request);
List<AnthropicChatResponse> responses = responseStream.collectList().block();

詳細については、Anthropic3ChatBedrockApi.java [GitHub] (英語) の JavaDoc を参照してください。