Bedrock Converse API

Amazon Bedrock コンバース API は、関数 / ツールの呼び出し、マルチモーダル入力、ストリーミングレスポンスなどの強化された機能を備えた会話型 AI モデル用の統合インターフェースを提供します。

Bedrock Converse API には、次のような高レベルの機能があります。

  • ツール / 関数の呼び出し: 会話中の機能定義とツールの使用をサポート

  • マルチモーダル入力: 会話中のテキストとイメージ入力の両方を処理する機能

  • ストリーミングサポート: モデルレスポンスのリアルタイムストリーミング

  • システムメッセージ: システムレベルの命令とコンテキスト設定のサポート

Bedrock Converse API は、AWS 固有の認証とインフラストラクチャの問題を処理しながら、複数のモデルプロバイダー間で統一されたインターフェースを提供します。現在、Converse API 対応モデル [Amazon] には Amazon TitanAmazon NovaAI21 LabsAnthropic ClaudeCohere CommandMeta LlamaMistral AI が含まれます。

Bedrock の推奨事項に従い、Spring AI は、Spring AI のすべてのチャット会話実装に Amazon Bedrock の Converse API を使用するように移行しています。既存の InvokeModel API は会話アプリケーションをサポートしていますが、すべての Char 会話モデルに Converse API を採用することを強くお勧めします。

Converse API は埋め込み操作をサポートしていないため、これらは現在の API に残り、既存の InvokeModel API の埋め込みモデル機能は維持されます。

前提条件

API アクセスの設定については Amazon Bedrock 入門 を参照してください

自動構成

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

  • Maven

  • Gradle

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

チャットのプロパティ

プレフィックス 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.aws.session-token

一時的な認証情報用の AWS セッショントークン。

-

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

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

spring.ai.bedrock.converse.chat.enabled

Bedrock Converse チャットモデルを有効にします。

true

spring.ai.bedrock.converse.chat.options.model

使用するモデル ID。サポートされているモデルとモデル機能 [Amazon] を使用できます

なし。AWS Bedrock コンソールから modelId [Amazon] を選択します。

spring.ai.bedrock.converse.chat.options.temperature

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

0.8

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

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

AWS Bedrock のデフォルト

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

次のトークンを生成するためのトークン選択の数。

AWS Bedrock のデフォルト

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

生成されたレスポンス内のトークンの最大数。

500

ランタイムオプション

ポータブル ChatOptions または ToolCallingChatOptions ポータブルビルダーを使用して、温度、maxToken、topP などのモデル構成を作成します。

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

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

var options = ToolCallingChatOptions.builder()
        .model("anthropic.claude-3-5-sonnet-20240620-v1:0")
        .temperature(0.6)
        .maxTokens(300)
        .toolCallbacks(List.of(FunctionToolCallback.builder("getCurrentWeather", new WeatherService())
            .description("Get the weather in location. Return temperature in 36°F or 36°C format. Use multi-turn if needed.")
            .inputType(WeatherService.Request.class)
            .build()))
        .build();

String response = ChatClient.create(this.chatModel)
    .prompt("What is current weather in Amsterdam?")
    .options(options)
    .call()
    .content();

ツール呼び出し

Bedrock Converse API はツール呼び出し機能をサポートしており、モデルが会話中にツールを使用できるようにします。@Tool ベースのツールを定義して使用する方法の例を次に示します。

public class WeatherService {

    @Tool(description = "Get the weather in location")
    public String weatherByLocation(@ToolParam(description= "City or state name") String location) {
        ...
    }
}

String response = ChatClient.create(this.chatModel)
        .prompt("What's the weather like in Boston?")
        .tools(new WeatherService())
        .call()
        .content();

java.util.function Bean をツールとしても使用できます。

@Bean
@Description("Get the weather in location. Return temperature in 36°F or 36°C format.")
public Function<Request, Response> weatherFunction() {
    return new MockWeatherService();
}

String response = ChatClient.create(this.chatModel)
        .prompt("What's the weather like in Boston?")
        .tools("weatherFunction")
        .inputType(Request.class)
        .call()
        .content();

詳細については、ツールのドキュメントを参照してください。

マルチモーダル

マルチモーダル性とは、テキスト、イメージ、ビデオ、PDF、DOC、HTML、MD などのデータ形式を含むさまざまなソースからの情報を同時に理解して処理するモデルの機能を指します。

Bedrock Converse API は、テキスト入力やイメージ入力などのマルチモーダル入力をサポートし、組み合わせた入力に基づいてテキストレスポンスを生成できます。

Anthropic、Claude、Amazon Nova モデルなど、マルチモーダル入力をサポートするモデルが必要です。

イメージ

Amazon Nova、Anthropic Claude、Llama 3.2 などのビジョンマルチモダリティをサポートするモデル [Amazon] の場合、Bedrock Converse API Amazon を使用すると、ペイロードに複数のイメージを含めることができます。これらのモデルは、渡されたイメージを分析して質問に答えたり、イメージを分類したり、提供された指示に基づいてイメージを要約したりできます。

現在、Bedrock Converse は、image/jpegimage/pngimage/gifimage/webp MIME 型の base64 エンコードされたイメージをサポートしています。

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

以下は、ユーザーテキストとイメージの組み合わせを示す簡単なコード例です。

String response = ChatClient.create(chatModel)
    .prompt()
    .user(u -> u.text("Explain what do you see on this picture?")
        .media(Media.Format.IMAGE_PNG, new ClassPathResource("/test.png")))
    .call()
    .content();

logger.info(response);

入力イメージ test.png :

Multimodal Test Image

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

The image shows a close-up view of a wire fruit basket containing several pieces of fruit.
...

ビデオ

Amazon Nova モデル を使用すると、ペイロードに 1 つのビデオを含めることができます。このビデオは、base64 形式または Amazon S3 URI を通じて提供できます。

現在、Bedrock Nova は video/x-matrosvideo/quicktimevideo/mp4video/video/webmvideo/x-flvvideo/mpegvideo/x-ms-wmvimage/3gpp MIME 型のイメージをサポートしています。

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

以下は、ユーザーテキストとビデオの組み合わせを示す簡単なコード例です。

String response = ChatClient.create(chatModel)
    .prompt()
    .user(u -> u.text("Explain what do you see in this video?")
        .media(Media.Format.VIDEO_MP4, new ClassPathResource("/test.video.mp4")))
    .call()
    .content();

logger.info(response);

入力イメージ test.video.mp4 :

Multimodal Test Video

「このビデオで何が見えますか?」というテキストメッセージとともに、次のようなレスポンスが生成されます。

The video shows a group of baby chickens, also known as chicks, huddled together on a surface
...

文書

一部のモデルでは、Bedrock では、Converse API ドキュメントサポートを通じてペイロードにドキュメントを含めることができます。ドキュメントはバイト単位で提供できます。ドキュメントサポートには、以下で説明する 2 つの異なるバリエーションがあります。

  • テキストドキュメントの種類 (txt、csv、html、md など) では、テキストの理解に重点が置かれます。これらのユースケースには、ドキュメントのテキスト要素に基づいて回答することが含まれます。

  • メディアドキュメントの種類 (pdf、docx、xlsx) では、質問に答えるための視覚ベースの理解に重点が置かれています。これらのユースケースには、チャートやグラフなどに基づいて質問に答えることが含まれます。

現在、Anthropic PDF サポート (ベータ) (英語) および Amazon Bedrock Nova モデルはドキュメントのマルチモーダル性をサポートしています。

以下は、ユーザーテキストとメディアドキュメントの組み合わせを示す簡単なコード例です。

String response = ChatClient.create(chatModel)
    .prompt()
    .user(u -> u.text(
            "You are a very professional document summarization specialist. Please summarize the given document.")
        .media(Media.Format.DOC_PDF, new ClassPathResource("/spring-ai-reference-overview.pdf")))
    .call()
    .content();

logger.info(response);

入力として spring-ai-reference-overview.pdf ドキュメントを受け取ります:

Multimodal Test PNG

「非常にプロフェッショナルなドキュメント要約の専門家です。指定されたドキュメントを要約してください。」というテキストメッセージとともに、次のようなレスポンスが生成されます。

**Introduction:**
- Spring AI is designed to simplify the development of applications with artificial intelligence (AI) capabilities, aiming to avoid unnecessary complexity.
...

サンプルコントローラー

新しい Spring Boot プロジェクトを作成し、依存関係に spring-ai-bedrock-converse-spring-boot-starter を追加します。

src/main/resources に application.properties ファイルを追加します。

spring.ai.bedrock.aws.region=eu-central-1
spring.ai.bedrock.aws.timeout=10m
spring.ai.bedrock.aws.access-key=${AWS_ACCESS_KEY_ID}
spring.ai.bedrock.aws.secret-key=${AWS_SECRET_ACCESS_KEY}
# session token is only required for temporary credentials
spring.ai.bedrock.aws.session-token=${AWS_SESSION_TOKEN}

spring.ai.bedrock.converse.chat.options.temperature=0.8
spring.ai.bedrock.converse.chat.options.top-k=15

以下はチャットモデルを使用するコントローラーの例です。

@RestController
public class ChatController {

    private final ChatClient chatClient;

    @Autowired
    public ChatController(ChatClient.Builder builder) {
        this.chatClient = builder.build();
    }

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

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