SDK for Java 2.x を使用する Amazon Bedrock ランタイムの例 - AWS SDK コード例

Doc AWS SDK Examples リポジトリには、他にも SDK の例があります。 AWS GitHub

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

SDK for Java 2.x を使用する Amazon Bedrock ランタイムの例

次のコード例は、Amazon Bedrock ランタイム AWS SDK for Java 2.x で を使用してアクションを実行し、一般的なシナリオを実装する方法を示しています。

アクションはより大きなプログラムからのコードの抜粋であり、コンテキスト内で実行する必要があります。アクションは個々のサービス機能を呼び出す方法を示していますが、関連するシナリオやサービス間の例ではアクションのコンテキストが確認できます。

「シナリオ」は、同じサービス内で複数の関数を呼び出して、特定のタスクを実行する方法を示すコード例です。

各例には、 へのリンクが含まれています。このリンクには GitHub、コンテキスト内でコードをセットアップして実行する方法の手順が記載されています。

モデルを呼び出す例

次のコード例は、テキスト生成のために Amazon Bedrock で AI21 Labs Jurassic-2 モデルを呼び出す方法を示しています。

SDK for Java 2.x
注記

には他にもがあります GitHub。AWS コード例リポジトリ で全く同じ例を見つけて、設定と実行の方法を確認してください。

AI21 Labs Jurassic-2 基盤モデルを非同期で呼び出してテキストを生成します。

/** * Asynchronously invokes the AI21 Labs Jurassic-2 model to run an inference * based on the provided input. * * @param prompt The prompt that you want Jurassic to complete. * @return The inference response generated by the model. */ public static String invokeJurassic2(String prompt) { /* * The different model providers have individual request and response formats. * For the format, ranges, and default values for Anthropic Claude, refer to: * https://docs.aws.amazon.com/bedrock/latest/userguide/model-parameters-claude.html */ String jurassic2ModelId = "ai21.j2-mid-v1"; BedrockRuntimeAsyncClient client = BedrockRuntimeAsyncClient.builder() .region(Region.US_EAST_1) .credentialsProvider(ProfileCredentialsProvider.create()) .build(); String payload = new JSONObject() .put("prompt", prompt) .put("temperature", 0.5) .put("maxTokens", 200) .toString(); InvokeModelRequest request = InvokeModelRequest.builder() .body(SdkBytes.fromUtf8String(payload)) .modelId(jurassic2ModelId) .contentType("application/json") .accept("application/json") .build(); CompletableFuture<InvokeModelResponse> completableFuture = client.invokeModel(request) .whenComplete((response, exception) -> { if (exception != null) { System.out.println("Model invocation failed: " + exception); } }); String generatedText = ""; try { InvokeModelResponse response = completableFuture.get(); JSONObject responseBody = new JSONObject(response.body().asUtf8String()); generatedText = responseBody .getJSONArray("completions") .getJSONObject(0) .getJSONObject("data") .getString("text"); } catch (InterruptedException e) { Thread.currentThread().interrupt(); System.err.println(e.getMessage()); } catch (ExecutionException e) { System.err.println(e.getMessage()); } return generatedText; }

AI21 Labs Jurassic-2 基盤モデルを呼び出して、テキストを生成します。

/** * Invokes the AI21 Labs Jurassic-2 model to run an inference based on the * provided input. * * @param prompt The prompt for Jurassic to complete. * @return The generated response. */ public static String invokeJurassic2(String prompt) { /* * The different model providers have individual request and response formats. * For the format, ranges, and default values for AI21 Labs Jurassic-2, refer * to: * https://docs.aws.amazon.com/bedrock/latest/userguide/model-parameters-jurassic2.html */ String jurassic2ModelId = "ai21.j2-mid-v1"; BedrockRuntimeClient client = BedrockRuntimeClient.builder() .region(Region.US_EAST_1) .credentialsProvider(ProfileCredentialsProvider.create()) .build(); String payload = new JSONObject() .put("prompt", prompt) .put("temperature", 0.5) .put("maxTokens", 200) .toString(); InvokeModelRequest request = InvokeModelRequest.builder() .body(SdkBytes.fromUtf8String(payload)) .modelId(jurassic2ModelId) .contentType("application/json") .accept("application/json") .build(); InvokeModelResponse response = client.invokeModel(request); JSONObject responseBody = new JSONObject(response.body().asUtf8String()); String generatedText = responseBody .getJSONArray("completions") .getJSONObject(0) .getJSONObject("data") .getString("text"); return generatedText; }
  • API の詳細については、「 API リファレンスInvokeModel」の「」を参照してください。 AWS SDK for Java 2.x

次のコードサンプルは、以下の操作方法を示しています。

  • 最初の埋め込みの作成を開始します。

  • 埋め込みを作成し、すべてのレスポンスフィールドを処理します。

SDK for Java 2.x
注記

には他にもがあります GitHub。AWS コード例リポジトリ で全く同じ例を見つけて、設定と実行の方法を確認してください。

Amazon Titan Text Embeddings G1 を使用して最初の埋め込みを作成します。

// Generate and print an embedding with Amazon Titan Text Embeddings G1. public class G1InvokeModelQuickstart { public static void main(String[] args) { // Create a Bedrock Runtime client in the AWS Region of your choice. var client = BedrockRuntimeClient.builder() .region(Region.US_WEST_2) .build(); // Set the model ID, e.g., Titan Text Embeddings G1. var modelId = "amazon.titan-embed-text-v1"; // The text to convert into an embedding. var inputText = "Please recommend books with a theme similar to the movie 'Inception'."; // Create a JSON payload using the model's native structure. var request = new JSONObject().put("inputText", inputText); // Encode and send the request. var response = client.invokeModel(req -> req .body(SdkBytes.fromUtf8String(request.toString())) .modelId(modelId)); // Decode the model's native response body. var nativeResponse = new JSONObject(response.body().asUtf8String()); // Extract and print the generated embedding. var embedding = nativeResponse.getJSONArray("embedding"); System.out.println(embedding); } }

Amazon Titan Text Embeddings G1 を呼び出し、すべてのレスポンスフィールドを処理します。

/** * Invoke Amazon Titan Text Embeddings G1 and print the response. * * @param inputText - The text to convert to an embedding. * @return The {@link JSONObject} representing the model's response. */ public static JSONObject invokeModel(String inputText) { // Create a Bedrock Runtime client in the AWS Region of your choice. var client = BedrockRuntimeClient.builder() .region(Region.US_WEST_2) .build(); // Set the model ID, e.g., Titan Text Embeddings G1. var modelId = "amazon.titan-embed-text-v1"; // Format the request payload using Anthropic's native structure. var nativeRequest = "{\"inputText\": \"" + inputText + "\"}"; // Encode and send the request. var response = client.invokeModel(request -> { request.body(SdkBytes.fromUtf8String(nativeRequest)); request.modelId(modelId); }); // Decode the model's response. var modelResponse = new JSONObject(response.body().asUtf8String()); // Extract and print the generated embedding and the input text token count. var embedding = modelResponse.getJSONArray("embedding"); var inputTokenCount = modelResponse.getBigInteger("inputTextTokenCount"); System.out.println("Embedding: " + embedding); System.out.println("\nInput token count: " + inputTokenCount); // Return the model's native response. return modelResponse; }
  • API の詳細については、「 API リファレンスInvokeModel」の「」を参照してください。 AWS SDK for Java 2.x

次のコードサンプルは、以下の操作方法を示しています。

  • 最初の埋め込みの作成を開始します。

  • ディメンションの数と正規化を設定する埋め込みを作成します。

SDK for Java 2.x
注記

には他にもがあります GitHub。AWS コード例リポジトリ で全く同じ例を見つけて、設定と実行の方法を確認してください。

Titan Text Embeddings V2 で最初の埋め込みを作成します。

// Generate and print an embedding with Amazon Titan Text Embeddings V2. public class V2InvokeModelQuickstart { public static void main(String[] args) { // Create a Bedrock Runtime client in the AWS Region of your choice. var client = BedrockRuntimeClient.builder() .region(Region.US_WEST_2) .build(); // Set the model ID, e.g., Titan Text Embeddings V2. var modelId = "amazon.titan-embed-text-v2:0"; // The text to convert into an embedding. var inputText = "Please recommend books with a theme similar to the movie 'Inception'."; // Create a JSON payload using the model's native structure. var request = new JSONObject().put("inputText", inputText); // Encode and send the request. var response = client.invokeModel(req -> req .body(SdkBytes.fromUtf8String(request.toString())) .modelId(modelId)); // Decode the model's native response body. var nativeResponse = new JSONObject(response.body().asUtf8String()); // Extract and print the generated embedding. var embedding = nativeResponse.getJSONArray("embedding"); System.out.println(embedding); } }

ディメンションの数と正規化を設定する Titan Text Embeddings V2 を呼び出します。

/** * Invoke Amazon Titan Text Embeddings v2 with additional inference parameters. * * @param inputText - The text to convert to an embedding. * @param dimensions - The number of dimensions the output embeddings should have. * Values accepted by the model: 256, 512, 1024. * @param normalize - A flag indicating whether or not to normalize the output embeddings. * @return The {@link JSONObject} representing the model's response. */ public static JSONObject invokeModel(String inputText, int dimensions, boolean normalize) { // Create a Bedrock Runtime client in the AWS Region of your choice. var client = BedrockRuntimeClient.builder() .region(Region.US_WEST_2) .build(); // Set the model ID, e.g., Titan Embed Text v2.0. var modelId = "amazon.titan-embed-text-v2:0"; // Create the request for the model. var nativeRequest = """ { "inputText": "%s", "dimensions": %d, "normalize": %b } """.formatted(inputText, dimensions, normalize); // Encode and send the request. var response = client.invokeModel(request -> { request.body(SdkBytes.fromUtf8String(nativeRequest)); request.modelId(modelId); }); // Decode the model's response. var modelResponse = new JSONObject(response.body().asUtf8String()); // Extract and print the generated embedding and the input text token count. var embedding = modelResponse.getJSONArray("embedding"); var inputTokenCount = modelResponse.getBigInteger("inputTextTokenCount"); System.out.println("Embedding: " + embedding); System.out.println("\nInput token count: " + inputTokenCount); // Return the model's native response. return modelResponse; }
  • API の詳細については、「 API リファレンスInvokeModel」の「」を参照してください。 AWS SDK for Java 2.x

次のコード例は、Amazon Bedrock で Amazon Titan Image G1 を呼び出してイメージを生成する方法を示しています。

SDK for Java 2.x
注記

には他にもがあります GitHub。AWS コード例リポジトリ で全く同じ例を見つけて、設定と実行の方法を確認してください。

Amazon Titan Image Generator G1 モデルを非同期で呼び出して画像を生成します。

/** * Invokes the Amazon Titan image generation model to create an image using the * input * provided in the request body. * * @param prompt The prompt that you want Amazon Titan to use for image * generation. * @param seed The random noise seed for image generation (Range: 0 to * 2147483647). * @return A Base64-encoded string representing the generated image. */ public static String invokeTitanImage(String prompt, long seed) { /* * The different model providers have individual request and response formats. * For the format, ranges, and default values for Titan Image models refer to: * https://docs.aws.amazon.com/bedrock/latest/userguide/model-parameters-titan- * image.html */ String titanImageModelId = "amazon.titan-image-generator-v1"; BedrockRuntimeAsyncClient client = BedrockRuntimeAsyncClient.builder() .region(Region.US_EAST_1) .credentialsProvider(ProfileCredentialsProvider.create()) .build(); var textToImageParams = new JSONObject().put("text", prompt); var imageGenerationConfig = new JSONObject() .put("numberOfImages", 1) .put("quality", "standard") .put("cfgScale", 8.0) .put("height", 512) .put("width", 512) .put("seed", seed); JSONObject payload = new JSONObject() .put("taskType", "TEXT_IMAGE") .put("textToImageParams", textToImageParams) .put("imageGenerationConfig", imageGenerationConfig); InvokeModelRequest request = InvokeModelRequest.builder() .body(SdkBytes.fromUtf8String(payload.toString())) .modelId(titanImageModelId) .contentType("application/json") .accept("application/json") .build(); CompletableFuture<InvokeModelResponse> completableFuture = client.invokeModel(request) .whenComplete((response, exception) -> { if (exception != null) { System.out.println("Model invocation failed: " + exception); } }); String base64ImageData = ""; try { InvokeModelResponse response = completableFuture.get(); JSONObject responseBody = new JSONObject(response.body().asUtf8String()); base64ImageData = responseBody .getJSONArray("images") .getString(0); } catch (InterruptedException e) { Thread.currentThread().interrupt(); System.err.println(e.getMessage()); } catch (ExecutionException e) { System.err.println(e.getMessage()); } return base64ImageData; }

Amazon Titan Image Generator G1 モデルを呼び出して画像を生成します。

/** * Invokes the Amazon Titan image generation model to create an image using the * input * provided in the request body. * * @param prompt The prompt that you want Amazon Titan to use for image * generation. * @param seed The random noise seed for image generation (Range: 0 to * 2147483647). * @return A Base64-encoded string representing the generated image. */ public static String invokeTitanImage(String prompt, long seed) { /* * The different model providers have individual request and response formats. * For the format, ranges, and default values for Titan Image models refer to: * https://docs.aws.amazon.com/bedrock/latest/userguide/model-parameters-titan- * image.html */ String titanImageModelId = "amazon.titan-image-generator-v1"; BedrockRuntimeClient client = BedrockRuntimeClient.builder() .region(Region.US_EAST_1) .credentialsProvider(ProfileCredentialsProvider.create()) .build(); var textToImageParams = new JSONObject().put("text", prompt); var imageGenerationConfig = new JSONObject() .put("numberOfImages", 1) .put("quality", "standard") .put("cfgScale", 8.0) .put("height", 512) .put("width", 512) .put("seed", seed); JSONObject payload = new JSONObject() .put("taskType", "TEXT_IMAGE") .put("textToImageParams", textToImageParams) .put("imageGenerationConfig", imageGenerationConfig); InvokeModelRequest request = InvokeModelRequest.builder() .body(SdkBytes.fromUtf8String(payload.toString())) .modelId(titanImageModelId) .contentType("application/json") .accept("application/json") .build(); InvokeModelResponse response = client.invokeModel(request); JSONObject responseBody = new JSONObject(response.body().asUtf8String()); String base64ImageData = responseBody .getJSONArray("images") .getString(0); return base64ImageData; }
  • API の詳細については、「 API リファレンスInvokeModel」の「」を参照してください。 AWS SDK for Java 2.x

次のコード例は、Amazon Bedrock で Anthropic Claude 2.x を呼び出し、レスポンスストリームをリアルタイムで処理する方法を示しています。

SDK for Java 2.x
注記

には他にもがあります GitHub。AWS コード例リポジトリ で全く同じ例を見つけて、設定と実行の方法を確認してください。

Claude の Messages API を使用してテキストを生成し、レスポンスストリームをリアルタイムで処理します。

/** * Invokes Anthropic Claude 2 via the Messages API and processes the response stream. * <p> * To learn more about the Anthropic Messages API, go to: * https://docs.aws.amazon.com/bedrock/latest/userguide/model-parameters-anthropic-claude-messages.html * * @param prompt The prompt for the model to complete. * @return A JSON object containing the complete response along with some metadata. */ public static JSONObject invokeMessagesApiWithResponseStream(String prompt) { BedrockRuntimeAsyncClient client = BedrockRuntimeAsyncClient.builder() .credentialsProvider(ProfileCredentialsProvider.create()) .region(Region.US_EAST_1) .build(); String modelId = "anthropic.claude-v2"; // Prepare the JSON payload for the Messages API request var payload = new JSONObject() .put("anthropic_version", "bedrock-2023-05-31") .put("max_tokens", 1000) .append("messages", new JSONObject() .put("role", "user") .append("content", new JSONObject() .put("type", "text") .put("text", prompt) )); // Create the request object using the payload and the model ID var request = InvokeModelWithResponseStreamRequest.builder() .contentType("application/json") .body(SdkBytes.fromUtf8String(payload.toString())) .modelId(modelId) .build(); // Create a handler to print the stream in real-time and add metadata to a response object JSONObject structuredResponse = new JSONObject(); var handler = createMessagesApiResponseStreamHandler(structuredResponse); // Invoke the model with the request payload and the response stream handler client.invokeModelWithResponseStream(request, handler).join(); return structuredResponse; } private static InvokeModelWithResponseStreamResponseHandler createMessagesApiResponseStreamHandler(JSONObject structuredResponse) { AtomicReference<String> completeMessage = new AtomicReference<>(""); Consumer<ResponseStream> responseStreamHandler = event -> event.accept(InvokeModelWithResponseStreamResponseHandler.Visitor.builder() .onChunk(c -> { // Decode the chunk var chunk = new JSONObject(c.bytes().asUtf8String()); // The Messages API returns different types: var chunkType = chunk.getString("type"); if ("message_start".equals(chunkType)) { // The first chunk contains information about the message role String role = chunk.optJSONObject("message").optString("role"); structuredResponse.put("role", role); } else if ("content_block_delta".equals(chunkType)) { // These chunks contain the text fragments var text = chunk.optJSONObject("delta").optString("text"); // Print the text fragment to the console ... System.out.print(text); // ... and append it to the complete message completeMessage.getAndUpdate(current -> current + text); } else if ("message_delta".equals(chunkType)) { // This chunk contains the stop reason var stopReason = chunk.optJSONObject("delta").optString("stop_reason"); structuredResponse.put("stop_reason", stopReason); } else if ("message_stop".equals(chunkType)) { // The last chunk contains the metrics JSONObject metrics = chunk.optJSONObject("amazon-bedrock-invocationMetrics"); structuredResponse.put("metrics", new JSONObject() .put("inputTokenCount", metrics.optString("inputTokenCount")) .put("outputTokenCount", metrics.optString("outputTokenCount")) .put("firstByteLatency", metrics.optString("firstByteLatency")) .put("invocationLatency", metrics.optString("invocationLatency"))); } }) .build()); return InvokeModelWithResponseStreamResponseHandler.builder() .onEventStream(stream -> stream.subscribe(responseStreamHandler)) .onComplete(() -> // Add the complete message to the response object structuredResponse.append("content", new JSONObject() .put("type", "text") .put("text", completeMessage.get()))) .build(); }

Claude のテキスト完了 API を使用してテキストを生成し、レスポンスストリームをリアルタイムで処理します。

/** * Invokes Anthropic Claude 2 via the Text Completions API and processes the response stream. * <p> * To learn more about the Anthropic Text Completions API, go to: * https://docs.aws.amazon.com/bedrock/latest/userguide/model-parameters-anthropic-claude-text-completion.html * * @param prompt The prompt for the model to complete. * @return The generated response. */ public static String invokeTextCompletionsApiWithResponseStream(String prompt) { BedrockRuntimeAsyncClient client = BedrockRuntimeAsyncClient.builder() .credentialsProvider(ProfileCredentialsProvider.create()) .region(Region.US_EAST_1) .build(); String modelId = "anthropic.claude-v2"; var payload = new JSONObject() .put("prompt", "Human: " + prompt + " Assistant:") .put("temperature", 0.5) .put("max_tokens_to_sample", 1000) .toString(); var request = InvokeModelWithResponseStreamRequest.builder() .body(SdkBytes.fromUtf8String(payload)) .contentType("application/json") .modelId(modelId) .build(); var finalCompletion = new AtomicReference<>(""); var visitor = InvokeModelWithResponseStreamResponseHandler.Visitor.builder() .onChunk(chunk -> { var json = new JSONObject(chunk.bytes().asUtf8String()); var completion = json.getString("completion"); finalCompletion.set(finalCompletion.get() + completion); System.out.print(completion); }) .build(); var handler = InvokeModelWithResponseStreamResponseHandler.builder() .onEventStream(stream -> stream.subscribe(event -> event.accept(visitor))) .onComplete(() -> { }) .onError(e -> System.out.println("\n\nError: " + e.getMessage())) .build(); client.invokeModelWithResponseStream(request, handler).join(); return finalCompletion.get(); }
  • API の詳細については、「 API リファレンスInvokeModelWithResponseStream」の「」を参照してください。 AWS SDK for Java 2.x

次のコード例は、Amazon Bedrock で Anthropic Claude 2.x を呼び出してテキストを生成する方法を示しています。

SDK for Java 2.x
注記

には他にもがあります GitHub。AWS コード例リポジトリ で全く同じ例を見つけて、設定と実行の方法を確認してください。

同期クライアントを使用して Claude 2.x を呼び出します (非同期の例についてはスクロールダウンします)。

/** * Invokes the Anthropic Claude 2 model to run an inference based on the * provided input. * * @param prompt The prompt for Claude to complete. * @return The generated response. */ public static String invokeClaude(String prompt) { /* * The different model providers have individual request and response formats. * For the format, ranges, and default values for Anthropic Claude, refer to: * https://docs.aws.amazon.com/bedrock/latest/userguide/model-parameters-claude.html */ String claudeModelId = "anthropic.claude-v2"; // Claude requires you to enclose the prompt as follows: String enclosedPrompt = "Human: " + prompt + "\n\nAssistant:"; BedrockRuntimeClient client = BedrockRuntimeClient.builder() .region(Region.US_EAST_1) .credentialsProvider(ProfileCredentialsProvider.create()) .build(); String payload = new JSONObject() .put("prompt", enclosedPrompt) .put("max_tokens_to_sample", 200) .put("temperature", 0.5) .put("stop_sequences", List.of("\n\nHuman:")) .toString(); InvokeModelRequest request = InvokeModelRequest.builder() .body(SdkBytes.fromUtf8String(payload)) .modelId(claudeModelId) .contentType("application/json") .accept("application/json") .build(); InvokeModelResponse response = client.invokeModel(request); JSONObject responseBody = new JSONObject(response.body().asUtf8String()); String generatedText = responseBody.getString("completion"); return generatedText; }

非同期クライアントを使用して Claude 2.x を呼び出します。

/** * Asynchronously invokes the Anthropic Claude 2 model to run an inference based * on the provided input. * * @param prompt The prompt that you want Claude to complete. * @return The inference response from the model. */ public static String invokeClaude(String prompt) { /* * The different model providers have individual request and response formats. * For the format, ranges, and default values for Anthropic Claude, refer to: * https://docs.aws.amazon.com/bedrock/latest/userguide/model-parameters-claude.html */ String claudeModelId = "anthropic.claude-v2"; // Claude requires you to enclose the prompt as follows: String enclosedPrompt = "Human: " + prompt + "\n\nAssistant:"; BedrockRuntimeAsyncClient client = BedrockRuntimeAsyncClient.builder() .region(Region.US_EAST_1) .credentialsProvider(ProfileCredentialsProvider.create()) .build(); String payload = new JSONObject() .put("prompt", enclosedPrompt) .put("max_tokens_to_sample", 200) .put("temperature", 0.5) .put("stop_sequences", List.of("\n\nHuman:")) .toString(); InvokeModelRequest request = InvokeModelRequest.builder() .body(SdkBytes.fromUtf8String(payload)) .modelId(claudeModelId) .contentType("application/json") .accept("application/json") .build(); CompletableFuture<InvokeModelResponse> completableFuture = client.invokeModel(request) .whenComplete((response, exception) -> { if (exception != null) { System.out.println("Model invocation failed: " + exception); } }); String generatedText = ""; try { InvokeModelResponse response = completableFuture.get(); JSONObject responseBody = new JSONObject(response.body().asUtf8String()); generatedText = responseBody.getString("completion"); } catch (InterruptedException e) { Thread.currentThread().interrupt(); System.err.println(e.getMessage()); } catch (ExecutionException e) { System.err.println(e.getMessage()); } return generatedText; }
  • API の詳細については、「 API リファレンスInvokeModel」の「」を参照してください。 AWS SDK for Java 2.x

次のコード例は、Amazon Bedrock で Anthropic Claude 3 を呼び出し、レスポンスストリームをリアルタイムで処理する方法を示しています。

SDK for Java 2.x
注記

には他にもがあります GitHub。AWS コード例リポジトリ で全く同じ例を見つけて、設定と実行の方法を確認してください。

Claude 3 を呼び出してテキストを生成し、レスポンスストリームをリアルタイムで処理します。

/** * Invokes Anthropic Claude 3 Haiku and processes the response stream. * * @param prompt The prompt for the model to complete. * @return A JSON object containing the complete response along with some metadata. */ public static JSONObject invokeModelWithResponseStream(String prompt) { BedrockRuntimeAsyncClient client = BedrockRuntimeAsyncClient.builder() .credentialsProvider(ProfileCredentialsProvider.create()) .region(Region.US_EAST_1) .build(); String modelId = "anthropic.claude-3-haiku-20240307-v1:0"; // Prepare the JSON payload for the Messages API request var payload = new JSONObject() .put("anthropic_version", "bedrock-2023-05-31") .put("max_tokens", 1000) .append("messages", new JSONObject() .put("role", "user") .append("content", new JSONObject() .put("type", "text") .put("text", prompt) )); // Create the request object using the payload and the model ID var request = InvokeModelWithResponseStreamRequest.builder() .contentType("application/json") .body(SdkBytes.fromUtf8String(payload.toString())) .modelId(modelId) .build(); // Create a handler to print the stream in real-time and add metadata to a response object JSONObject structuredResponse = new JSONObject(); var handler = createMessagesApiResponseStreamHandler(structuredResponse); // Invoke the model with the request payload and the response stream handler client.invokeModelWithResponseStream(request, handler).join(); return structuredResponse; } private static InvokeModelWithResponseStreamResponseHandler createMessagesApiResponseStreamHandler(JSONObject structuredResponse) { AtomicReference<String> completeMessage = new AtomicReference<>(""); Consumer<ResponseStream> responseStreamHandler = event -> event.accept(InvokeModelWithResponseStreamResponseHandler.Visitor.builder() .onChunk(c -> { // Decode the chunk var chunk = new JSONObject(c.bytes().asUtf8String()); // The Messages API returns different types: var chunkType = chunk.getString("type"); if ("message_start".equals(chunkType)) { // The first chunk contains information about the message role String role = chunk.optJSONObject("message").optString("role"); structuredResponse.put("role", role); } else if ("content_block_delta".equals(chunkType)) { // These chunks contain the text fragments var text = chunk.optJSONObject("delta").optString("text"); // Print the text fragment to the console ... System.out.print(text); // ... and append it to the complete message completeMessage.getAndUpdate(current -> current + text); } else if ("message_delta".equals(chunkType)) { // This chunk contains the stop reason var stopReason = chunk.optJSONObject("delta").optString("stop_reason"); structuredResponse.put("stop_reason", stopReason); } else if ("message_stop".equals(chunkType)) { // The last chunk contains the metrics JSONObject metrics = chunk.optJSONObject("amazon-bedrock-invocationMetrics"); structuredResponse.put("metrics", new JSONObject() .put("inputTokenCount", metrics.optString("inputTokenCount")) .put("outputTokenCount", metrics.optString("outputTokenCount")) .put("firstByteLatency", metrics.optString("firstByteLatency")) .put("invocationLatency", metrics.optString("invocationLatency"))); } }) .build()); return InvokeModelWithResponseStreamResponseHandler.builder() .onEventStream(stream -> stream.subscribe(responseStreamHandler)) .onComplete(() -> // Add the complete message to the response object structuredResponse.append("content", new JSONObject() .put("type", "text") .put("text", completeMessage.get()))) .build(); }
  • API の詳細については、「 API リファレンスInvokeModelWithResponseStream」の「」を参照してください。 AWS SDK for Java 2.x

次のコード例は、Meta Llama 2 へのプロンプトの送信とレスポンスの出力を開始する方法を示しています。

SDK for Java 2.x
注記

には他にもがあります GitHub。AWS コード例リポジトリ で全く同じ例を見つけて、設定と実行の方法を確認してください。

最初のプロンプトを Meta Llama 2 に送信します。

// Send a prompt to Meta Llama 2 and print the response. public class InvokeModelQuickstart { public static void main(String[] args) { // Create a Bedrock Runtime client in the AWS Region of your choice. var client = BedrockRuntimeClient.builder() .region(Region.US_WEST_2) .build(); // Set the model ID, e.g., Llama 2 Chat 13B. var modelId = "meta.llama2-13b-chat-v1"; // Define the user message to send. var userMessage = "Describe the purpose of a 'hello world' program in one line."; // Embed the message in Llama 2's prompt format. var prompt = "<s>[INST] " + userMessage + " [/INST]"; // Create a JSON payload using the model's native structure. var request = new JSONObject() .put("prompt", prompt) // Optional inference parameters: .put("max_gen_len", 512) .put("temperature", 0.5F) .put("top_p", 0.9F); // Encode and send the request. var response = client.invokeModel(req -> req .body(SdkBytes.fromUtf8String(request.toString())) .modelId(modelId)); // Decode the native response body. var nativeResponse = new JSONObject(response.body().asUtf8String()); // Extract and print the response text. var responseText = nativeResponse.getString("generation"); System.out.println(responseText); } } // Learn more about the Llama 2 prompt format at: // https://llama.meta.com/docs/model-cards-and-prompt-formats/meta-llama-2
  • API の詳細については、「 API リファレンスInvokeModel」の「」を参照してください。 AWS SDK for Java 2.x

次のコード例は、Meta Llama 2 にプロンプトを送信し、レスポンスストリームをリアルタイムで出力する方法を示しています。

SDK for Java 2.x
注記

には他にもがあります GitHub。AWS コード例リポジトリ で全く同じ例を見つけて、設定と実行の方法を確認してください。

最初のプロンプトを Meta Llama 3 に送信します。

// Send a prompt to Meta Llama 2 and print the response stream in real-time. public class InvokeModelWithResponseStreamQuickstart { public static void main(String[] args) { // Create a Bedrock Runtime client in the AWS Region of your choice. var client = BedrockRuntimeAsyncClient.builder() .region(Region.US_WEST_2) .build(); // Set the model ID, e.g., Llama 2 Chat 13B. var modelId = "meta.llama2-13b-chat-v1"; // Define the user message to send. var userMessage = "Describe the purpose of a 'hello world' program in one line."; // Embed the message in Llama 2's prompt format. var prompt = "<s>[INST] " + userMessage + " [/INST]"; // Create a JSON payload using the model's native structure. var request = new JSONObject() .put("prompt", prompt) // Optional inference parameters: .put("max_gen_len", 512) .put("temperature", 0.5F) .put("top_p", 0.9F); // Create a handler to extract and print the response text in real-time. var streamHandler = InvokeModelWithResponseStreamResponseHandler.builder() .subscriber(event -> event.accept( InvokeModelWithResponseStreamResponseHandler.Visitor.builder() .onChunk(c -> { var chunk = new JSONObject(c.bytes().asUtf8String()); if (chunk.has("generation")) { System.out.print(chunk.getString("generation")); } }).build()) ).build(); // Encode and send the request. Let the stream handler process the response. client.invokeModelWithResponseStream(req -> req .body(SdkBytes.fromUtf8String(request.toString())) .modelId(modelId), streamHandler ).join(); } } // Learn more about the Llama 2 prompt format at: // https://llama.meta.com/docs/model-cards-and-prompt-formats/meta-llama-2
  • API の詳細については、「 API リファレンスInvokeModelWithResponseStream」の「」を参照してください。 AWS SDK for Java 2.x

次のコード例は、Meta Llama 3 へのプロンプトの送信とレスポンスの出力を開始する方法を示しています。

SDK for Java 2.x
注記

には他にもがあります GitHub。AWS コード例リポジトリ で全く同じ例を見つけて、設定と実行の方法を確認してください。

最初のプロンプトを Meta Llama 3 に送信します。

// Send a prompt to Meta Llama 3 and print the response. public class InvokeModelQuickstart { public static void main(String[] args) { // Create a Bedrock Runtime client in the AWS Region of your choice. var client = BedrockRuntimeClient.builder() .region(Region.US_WEST_2) .build(); // Set the model ID, e.g., Llama 3 8B Instruct. var modelId = "meta.llama3-8b-instruct-v1:0"; // Define the user message to send. var userMessage = "Describe the purpose of a 'hello world' program in one line."; // Embed the message in Llama 3's prompt format. var prompt = MessageFormat.format(""" <|begin_of_text|> <|start_header_id|>user<|end_header_id|> {0} <|eot_id|> <|start_header_id|>assistant<|end_header_id|> """, userMessage); // Create a JSON payload using the model's native structure. var request = new JSONObject() .put("prompt", prompt) // Optional inference parameters: .put("max_gen_len", 512) .put("temperature", 0.5F) .put("top_p", 0.9F); // Encode and send the request. var response = client.invokeModel(req -> req .body(SdkBytes.fromUtf8String(request.toString())) .modelId(modelId)); // Decode the native response body. var nativeResponse = new JSONObject(response.body().asUtf8String()); // Extract and print the response text. var responseText = nativeResponse.getString("generation"); System.out.println(responseText); } } // Learn more about the Llama 3 prompt format at: // https://llama.meta.com/docs/model-cards-and-prompt-formats/meta-llama-3/#special-tokens-used-with-meta-llama-3
  • API の詳細については、「 API リファレンスInvokeModel」の「」を参照してください。 AWS SDK for Java 2.x

次のコード例は、Meta Llama 3 にプロンプトを送信し、レスポンスストリームをリアルタイムで出力する方法を示しています。

SDK for Java 2.x
注記

には他にもがあります GitHub。AWS コード例リポジトリ で全く同じ例を見つけて、設定と実行の方法を確認してください。

最初のプロンプトを Meta Llama 3 に送信します。

// Send a prompt to Meta Llama 3 and print the response stream in real-time. public class InvokeModelWithResponseStreamQuickstart { public static void main(String[] args) { // Create a Bedrock Runtime client in the AWS Region of your choice. var client = BedrockRuntimeAsyncClient.builder() .region(Region.US_WEST_2) .build(); // Set the model ID, e.g., Llama 3 8B Instruct. var modelId = "meta.llama3-8b-instruct-v1:0"; // Define the user message to send. var userMessage = "Describe the purpose of a 'hello world' program in one line."; // Embed the message in Llama 3's prompt format. var prompt = MessageFormat.format(""" <|begin_of_text|> <|start_header_id|>user<|end_header_id|> {0} <|eot_id|> <|start_header_id|>assistant<|end_header_id|> """, userMessage); // Create a JSON payload using the model's native structure. var request = new JSONObject() .put("prompt", prompt) // Optional inference parameters: .put("max_gen_len", 512) .put("temperature", 0.5F) .put("top_p", 0.9F); // Create a handler to extract and print the response text in real-time. var streamHandler = InvokeModelWithResponseStreamResponseHandler.builder() .subscriber(event -> event.accept( InvokeModelWithResponseStreamResponseHandler.Visitor.builder() .onChunk(c -> { var chunk = new JSONObject(c.bytes().asUtf8String()); if (chunk.has("generation")) { System.out.print(chunk.getString("generation")); } }).build()) ).build(); // Encode and send the request. Let the stream handler process the response. client.invokeModelWithResponseStream(req -> req .body(SdkBytes.fromUtf8String(request.toString())) .modelId(modelId), streamHandler ).join(); } } // Learn more about the Llama 3 prompt format at: // https://llama.meta.com/docs/model-cards-and-prompt-formats/meta-llama-3/#special-tokens-used-with-meta-llama-3
  • API の詳細については、「 API リファレンスInvokeModelWithResponseStream」の「」を参照してください。 AWS SDK for Java 2.x

次のコード例は、テキスト生成のために Amazon Bedrock で Mistral 7B モデルを呼び出す方法を示しています。

SDK for Java 2.x
注記

には他にもがあります GitHub。AWS コード例リポジトリ で全く同じ例を見つけて、設定と実行の方法を確認してください。

Mistral 7B 基盤モデルを非同期的に呼び出してテキストを生成します。

/** * Asynchronously invokes the Mistral 7B model to run an inference based on the provided input. * * @param prompt The prompt for Mistral to complete. * @return The generated response. */ public static List<String> invokeMistral7B(String prompt) { BedrockRuntimeAsyncClient client = BedrockRuntimeAsyncClient.builder() .region(Region.US_WEST_2) .credentialsProvider(ProfileCredentialsProvider.create()) .build(); // Mistral instruct models provide optimal results when // embedding the prompt into the following template: String instruction = "<s>[INST] " + prompt + " [/INST]"; String modelId = "mistral.mistral-7b-instruct-v0:2"; String payload = new JSONObject() .put("prompt", instruction) .put("max_tokens", 200) .put("temperature", 0.5) .toString(); CompletableFuture<InvokeModelResponse> completableFuture = client.invokeModel(request -> request .accept("application/json") .contentType("application/json") .body(SdkBytes.fromUtf8String(payload)) .modelId(modelId)) .whenComplete((response, exception) -> { if (exception != null) { System.out.println("Model invocation failed: " + exception); } }); try { InvokeModelResponse response = completableFuture.get(); JSONObject responseBody = new JSONObject(response.body().asUtf8String()); JSONArray outputs = responseBody.getJSONArray("outputs"); return IntStream.range(0, outputs.length()) .mapToObj(i -> outputs.getJSONObject(i).getString("text")) .toList(); } catch (InterruptedException e) { Thread.currentThread().interrupt(); System.err.println(e.getMessage()); } catch (ExecutionException e) { System.err.println(e.getMessage()); } return List.of(); }

Mistral 7B 基盤モデルを呼び出してテキストを生成します。

/** * Invokes the Mistral 7B model to run an inference based on the provided input. * * @param prompt The prompt for Mistral to complete. * @return The generated responses. */ public static List<String> invokeMistral7B(String prompt) { BedrockRuntimeClient client = BedrockRuntimeClient.builder() .region(Region.US_WEST_2) .credentialsProvider(ProfileCredentialsProvider.create()) .build(); // Mistral instruct models provide optimal results when // embedding the prompt into the following template: String instruction = "<s>[INST] " + prompt + " [/INST]"; String modelId = "mistral.mistral-7b-instruct-v0:2"; String payload = new JSONObject() .put("prompt", instruction) .put("max_tokens", 200) .put("temperature", 0.5) .toString(); InvokeModelResponse response = client.invokeModel(request -> request .accept("application/json") .contentType("application/json") .body(SdkBytes.fromUtf8String(payload)) .modelId(modelId)); JSONObject responseBody = new JSONObject(response.body().asUtf8String()); JSONArray outputs = responseBody.getJSONArray("outputs"); return IntStream.range(0, outputs.length()) .mapToObj(i -> outputs.getJSONObject(i).getString("text")) .toList(); }
  • API の詳細については、「 API リファレンスInvokeModel」の「」を参照してください。 AWS SDK for Java 2.x

次のコード例は、テキスト生成のために Amazon Bedrock で Mixtral 8x7B モデルを呼び出す方法を示しています。

SDK for Java 2.x
注記

には他にもがあります GitHub。AWS コード例リポジトリ で全く同じ例を見つけて、設定と実行の方法を確認してください。

Mistral 8x7B 基盤モデルを非同期的に呼び出してテキストを生成します。

/** * Asynchronously invokes the Mixtral 8x7B model to run an inference based on the provided input. * * @param prompt The prompt for Mixtral to complete. * @return The generated response. */ public static List<String> invokeMixtral8x7B(String prompt) { BedrockRuntimeAsyncClient client = BedrockRuntimeAsyncClient.builder() .region(Region.US_WEST_2) .credentialsProvider(ProfileCredentialsProvider.create()) .build(); // Mistral instruct models provide optimal results when // embedding the prompt into the following template: String instruction = "<s>[INST] " + prompt + " [/INST]"; String modelId = "mistral.mixtral-8x7b-instruct-v0:1"; String payload = new JSONObject() .put("prompt", instruction) .put("max_tokens", 200) .put("temperature", 0.5) .toString(); CompletableFuture<InvokeModelResponse> completableFuture = client.invokeModel(request -> request .accept("application/json") .contentType("application/json") .body(SdkBytes.fromUtf8String(payload)) .modelId(modelId)) .whenComplete((response, exception) -> { if (exception != null) { System.out.println("Model invocation failed: " + exception); } }); try { InvokeModelResponse response = completableFuture.get(); JSONObject responseBody = new JSONObject(response.body().asUtf8String()); JSONArray outputs = responseBody.getJSONArray("outputs"); return IntStream.range(0, outputs.length()) .mapToObj(i -> outputs.getJSONObject(i).getString("text")) .toList(); } catch (InterruptedException e) { Thread.currentThread().interrupt(); System.err.println(e.getMessage()); } catch (ExecutionException e) { System.err.println(e.getMessage()); } return List.of(); }

Mixtral 8x7B 基盤モデルを呼び出してテキストを生成します。

public static List<String> invokeMixtral8x7B(String prompt) { BedrockRuntimeClient client = BedrockRuntimeClient.builder() .region(Region.US_WEST_2) .credentialsProvider(ProfileCredentialsProvider.create()) .build(); // Mistral instruct models provide optimal results when // embedding the prompt into the following template: String instruction = "<s>[INST] " + prompt + " [/INST]"; String modelId = "mistral.mixtral-8x7b-instruct-v0:1"; String payload = new JSONObject() .put("prompt", instruction) .put("max_tokens", 200) .put("temperature", 0.5) .toString(); InvokeModelResponse response = client.invokeModel(request -> request .accept("application/json") .contentType("application/json") .body(SdkBytes.fromUtf8String(payload)) .modelId(modelId)); JSONObject responseBody = new JSONObject(response.body().asUtf8String()); JSONArray outputs = responseBody.getJSONArray("outputs"); return IntStream.range(0, outputs.length()) .mapToObj(i -> outputs.getJSONObject(i).getString("text")) .toList(); }
  • API の詳細については、「 API リファレンスInvokeModel」の「」を参照してください。 AWS SDK for Java 2.x

次のコード例は、Amazon Bedrock で Stability.ai Stable Diffusion XL を呼び出してイメージを生成する方法を示しています。

SDK for Java 2.x
注記

には他にもがあります GitHub。AWS コード例リポジトリ で全く同じ例を見つけて、設定と実行の方法を確認してください。

Stability.ai Stable Diffusion XL 基盤モデルを非同期で呼び出して画像を生成します。

/** * Asynchronously invokes the Stability.ai Stable Diffusion XL model to create * an image based on the provided input. * * @param prompt The prompt that guides the Stable Diffusion model. * @param seed The random noise seed for image generation (use 0 or omit * for a random seed). * @param stylePreset The style preset to guide the image model towards a * specific style. * @return A Base64-encoded string representing the generated image. */ public static String invokeStableDiffusion(String prompt, long seed, String stylePreset) { /* * The different model providers have individual request and response formats. * For the format, ranges, and available style_presets of Stable Diffusion * models refer to: * https://docs.aws.amazon.com/bedrock/latest/userguide/model-parameters-stability-diffusion.html */ String stableDiffusionModelId = "stability.stable-diffusion-xl-v1"; BedrockRuntimeAsyncClient client = BedrockRuntimeAsyncClient.builder() .region(Region.US_EAST_1) .credentialsProvider(ProfileCredentialsProvider.create()) .build(); JSONArray wrappedPrompt = new JSONArray().put(new JSONObject().put("text", prompt)); JSONObject payload = new JSONObject() .put("text_prompts", wrappedPrompt) .put("seed", seed); if (stylePreset != null && !stylePreset.isEmpty()) { payload.put("style_preset", stylePreset); } InvokeModelRequest request = InvokeModelRequest.builder() .body(SdkBytes.fromUtf8String(payload.toString())) .modelId(stableDiffusionModelId) .contentType("application/json") .accept("application/json") .build(); CompletableFuture<InvokeModelResponse> completableFuture = client.invokeModel(request) .whenComplete((response, exception) -> { if (exception != null) { System.out.println("Model invocation failed: " + exception); } }); String base64ImageData = ""; try { InvokeModelResponse response = completableFuture.get(); JSONObject responseBody = new JSONObject(response.body().asUtf8String()); base64ImageData = responseBody .getJSONArray("artifacts") .getJSONObject(0) .getString("base64"); } catch (InterruptedException e) { Thread.currentThread().interrupt(); System.err.println(e.getMessage()); } catch (ExecutionException e) { System.err.println(e.getMessage()); } return base64ImageData; }

Stability.ai Stable Diffusion XL 基盤モデルを呼び出して画像を生成します。

/** * Invokes the Stability.ai Stable Diffusion XL model to create an image based * on the provided input. * * @param prompt The prompt that guides the Stable Diffusion model. * @param seed The random noise seed for image generation (use 0 or omit * for a random seed). * @param stylePreset The style preset to guide the image model towards a * specific style. * @return A Base64-encoded string representing the generated image. */ public static String invokeStableDiffusion(String prompt, long seed, String stylePreset) { /* * The different model providers have individual request and response formats. * For the format, ranges, and available style_presets of Stable Diffusion * models refer to: * https://docs.aws.amazon.com/bedrock/latest/userguide/model-parameters-stability-diffusion.html */ String stableDiffusionModelId = "stability.stable-diffusion-xl"; BedrockRuntimeClient client = BedrockRuntimeClient.builder() .region(Region.US_EAST_1) .credentialsProvider(ProfileCredentialsProvider.create()) .build(); JSONArray wrappedPrompt = new JSONArray().put(new JSONObject().put("text", prompt)); JSONObject payload = new JSONObject() .put("text_prompts", wrappedPrompt) .put("seed", seed); if (!(stylePreset == null || stylePreset.isEmpty())) { payload.put("style_preset", stylePreset); } InvokeModelRequest request = InvokeModelRequest.builder() .body(SdkBytes.fromUtf8String(payload.toString())) .modelId(stableDiffusionModelId) .contentType("application/json") .accept("application/json") .build(); InvokeModelResponse response = client.invokeModel(request); JSONObject responseBody = new JSONObject(response.body().asUtf8String()); String base64ImageData = responseBody .getJSONArray("artifacts") .getJSONObject(0) .getString("base64"); return base64ImageData; }
  • API の詳細については、「 API リファレンスInvokeModel」の「」を参照してください。 AWS SDK for Java 2.x

シナリオ

次のコード例は、さまざまな方法で Amazon Bedrock 基盤モデルと相互作用するプレイグラウンドを作成する方法を示しています。

SDK for Java 2.x

Java 基盤モデル (FM) プレイグラウンドは Spring Boot のサンプルアプリケーションで、Java で Amazon Bedrock を使用する方法を紹介しています。この例は、Java 開発者が Amazon Bedrock を使用して生成系 AI 対応アプリケーションを構築する方法を示しています。次の 3 つのプレイグラウンドを使用して Amazon Bedrock 基盤モデルをテストしたり操作したりできます。

  • テキストプレイグラウンド。

  • チャットプレイグラウンド。

  • イメージプレイグラウンド。

この例には、アクセスできる基盤モデルとその特性が一覧表示されています。ソースコードとデプロイ手順については、「」のプロジェクトを参照してくださいGitHub

この例で使用されているサービス
  • Amazon Bedrock ランタイム

次のコード例は、Amazon Bedrock でさまざまな大規模言語モデル (LLMsを準備してプロンプトを送信する方法を示しています。

SDK for Java 2.x
注記

には他にもがあります GitHub。AWS コード例リポジトリ で全く同じ例を見つけて、設定と実行の方法を確認してください。

Amazon Bedrock で複数の基盤モデルを呼び出します。

package com.example.bedrockruntime; import software.amazon.awssdk.services.bedrockruntime.model.BedrockRuntimeException; import java.io.FileOutputStream; import java.net.URI; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; import java.util.Base64; import java.util.Random; import static com.example.bedrockruntime.InvokeModel.*; /** * Demonstrates the invocation of the following models: * Anthropic Claude 2, AI21 Labs Jurassic-2, Meta Llama 2 Chat, and Stability.ai * Stable Diffusion XL. */ public class BedrockRuntimeUsageDemo { private static final Random random = new Random(); private static final String CLAUDE = "anthropic.claude-v2"; private static final String JURASSIC2 = "ai21.j2-mid-v1"; private static final String MISTRAL7B = "mistral.mistral-7b-instruct-v0:2"; private static final String MIXTRAL8X7B = "mistral.mixtral-8x7b-instruct-v0:1"; private static final String STABLE_DIFFUSION = "stability.stable-diffusion-xl"; private static final String TITAN_IMAGE = "amazon.titan-image-generator-v1"; public static void main(String[] args) { BedrockRuntimeUsageDemo.textToText(); BedrockRuntimeUsageDemo.textToTextWithResponseStream(); BedrockRuntimeUsageDemo.textToImage(); } private static void textToText() { String prompt = "In one sentence, what is a large-language model?"; BedrockRuntimeUsageDemo.invoke(CLAUDE, prompt); BedrockRuntimeUsageDemo.invoke(JURASSIC2, prompt); BedrockRuntimeUsageDemo.invoke(MISTRAL7B, prompt); BedrockRuntimeUsageDemo.invoke(MIXTRAL8X7B, prompt); } private static void invoke(String modelId, String prompt) { invoke(modelId, prompt, null); } private static void invoke(String modelId, String prompt, String stylePreset) { System.out.println("\n" + new String(new char[88]).replace("\0", "-")); System.out.println("Invoking: " + modelId); System.out.println("Prompt: " + prompt); try { switch (modelId) { case CLAUDE: printResponse(invokeClaude(prompt)); break; case JURASSIC2: printResponse(invokeJurassic2(prompt)); break; case MISTRAL7B: for (String response : invokeMistral7B(prompt)) { printResponse(response); } break; case MIXTRAL8X7B: for (String response : invokeMixtral8x7B(prompt)) { printResponse(response); } break; case STABLE_DIFFUSION: createImage(STABLE_DIFFUSION, prompt, random.nextLong() & 0xFFFFFFFFL, stylePreset); break; case TITAN_IMAGE: createImage(TITAN_IMAGE, prompt, random.nextLong() & 0xFFFFFFFL); break; default: throw new IllegalStateException("Unexpected value: " + modelId); } } catch (BedrockRuntimeException e) { System.out.println("Couldn't invoke model " + modelId + ": " + e.getMessage()); throw e; } } private static void createImage(String modelId, String prompt, long seed) { createImage(modelId, prompt, seed, null); } private static void createImage(String modelId, String prompt, long seed, String stylePreset) { String base64ImageData = (modelId.equals(STABLE_DIFFUSION)) ? invokeStableDiffusion(prompt, seed, stylePreset) : invokeTitanImage(prompt, seed); String imagePath = saveImage(modelId, base64ImageData); System.out.printf("Success: The generated image has been saved to %s%n", imagePath); } private static void textToTextWithResponseStream() { String prompt = "What is a large-language model?"; BedrockRuntimeUsageDemo.invokeWithResponseStream(CLAUDE, prompt); } private static void invokeWithResponseStream(String modelId, String prompt) { System.out.println(new String(new char[88]).replace("\0", "-")); System.out.printf("Invoking %s with response stream%n", modelId); System.out.println("Prompt: " + prompt); try { Claude2.invokeMessagesApiWithResponseStream(prompt); } catch (BedrockRuntimeException e) { System.out.println("Couldn't invoke model " + modelId + ": " + e.getMessage()); throw e; } } private static void textToImage() { String imagePrompt = "stylized picture of a cute old steampunk robot"; String stylePreset = "photographic"; BedrockRuntimeUsageDemo.invoke(STABLE_DIFFUSION, imagePrompt, stylePreset); BedrockRuntimeUsageDemo.invoke(TITAN_IMAGE, imagePrompt); } private static void printResponse(String response) { System.out.printf("Generated text: %s%n", response); } private static String saveImage(String modelId, String base64ImageData) { try { String directory = "output"; URI uri = InvokeModel.class.getProtectionDomain().getCodeSource().getLocation().toURI(); Path outputPath = Paths.get(uri).getParent().getParent().resolve(directory); if (!Files.exists(outputPath)) { Files.createDirectories(outputPath); } int i = 1; String fileName; do { fileName = String.format("%s_%d.png", modelId, i); i++; } while (Files.exists(outputPath.resolve(fileName))); byte[] imageBytes = Base64.getDecoder().decode(base64ImageData); Path filePath = outputPath.resolve(fileName); try (FileOutputStream fileOutputStream = new FileOutputStream(filePath.toFile())) { fileOutputStream.write(imageBytes); } return filePath.toString(); } catch (Exception e) { System.out.println(e.getMessage()); System.exit(1); } return null; } }