Agent Skills by ALSEL
Anthropic ClaudeLLM・AI開発⭐ リポ 0品質スコア 50/100

aws-sdk-java-v2-bedrock

AWS SDK for Java 2.x を使用した Amazon Bedrock の実装パターンを提供します。Claude・Llama・Titan などのファンデーションモデルの呼び出し、テキスト・画像の生成、RAG 向け埋め込みの作成、リアルタイムストリーミングレスポンス、Spring Boot との統合設定に対応します。Bedrock 連携、Java SDK による AI モデル活用、AWS 生成 AI、RAG 向け埋め込み、Spring Boot AI セットアップについて調べる際にご利用ください。

description の原文を見る

Provides Amazon Bedrock patterns using AWS SDK for Java 2.x. Invokes foundation models (Claude, Llama, Titan), generates text and images, creates embeddings for RAG, streams real-time responses, and configures Spring Boot integration. Use when asking about Bedrock integration, Java SDK for AI models, AWS generative AI, Claude/Llama invocation, embeddings for RAG, or Spring Boot AI setup.

SKILL.md 本文

AWS SDK for Java 2.x - Amazon Bedrock

概要

AWS SDK for Java 2.x を使用して foundation models を呼び出します。クライアントを設定し、モデル固有の JSON ペイロードを構築し、エラーリカバリーを伴うストリーミング応答を処理し、RAG 用の埋め込みを作成し、生成 AI を Spring Boot アプリケーションに統合し、復元力のための指数バックオフを実装します。

使用するタイミング

  • Claude、Llama、Titan、または Stable Diffusion でテキスト/画像生成を呼び出す
  • BedrockClient と BedrockRuntimeClient インスタンスを設定する
  • モデル固有のペイロード (Claude、Titan、Llama フォーマット) をビルドおよび解析する
  • 非同期ハンドラーとエラーリカバリーを使用してリアルタイム AI 応答をストリーミングする
  • 検索拡張生成 (RAG) 用の埋め込みを作成する
  • 生成 AI を Spring Boot マイクロサービスに統合する
  • 指数バックオフ再試行ロジックでスロットリングを処理する

クイックスタート

依存関係

<!-- Bedrock (モデル管理) -->
<dependency>
    <groupId>software.amazon.awssdk</groupId>
    <artifactId>bedrock</artifactId>
</dependency>

<!-- Bedrock Runtime (モデル呼び出し) -->
<dependency>
    <groupId>software.amazon.awssdk</groupId>
    <artifactId>bedrockruntime</artifactId>
</dependency>

<!-- JSON 処理用 -->
<dependency>
    <groupId>org.json</groupId>
    <artifactId>json</artifactId>
    <version>20231013</version>
</dependency>

クライアントセットアップ

import software.amazon.awssdk.regions.Region;
import software.amazon.awssdk.services.bedrock.BedrockClient;
import software.amazon.awssdk.services.bedrockruntime.BedrockRuntimeClient;

// モデル管理クライアント
BedrockClient bedrockClient = BedrockClient.builder()
    .region(Region.US_EAST_1)
    .build();

// モデル呼び出しクライアント
BedrockRuntimeClient bedrockRuntimeClient = BedrockRuntimeClient.builder()
    .region(Region.US_EAST_1)
    .build();

手順

本番対応の Bedrock 統合については、以下のステップに従ってください:

  1. AWS 認証情報を設定する - Bedrock 権限を持つ IAM ロールを設定する (アクセスキーは避ける)
  2. モデルアクセスを有効にする - AWS コンソールで特定の foundation models へのアクセスをリクエストする
  3. クライアントを初期化する - 再利用可能な BedrockClient および BedrockRuntimeClient インスタンスを作成する
  4. モデルの可用性を検証する - 本番利用前に簡単な呼び出しでテストする
  5. ペイロードをビルドする - 適切なフォーマットでモデル固有の JSON ペイロードを作成する
  6. 応答を処理する - 応答構造を解析し、コンテンツを抽出する
  7. ストリーミングを実装する - リアルタイム生成のためにレスポンスストリームハンドラーを使用する
  8. エラーハンドリングを追加する - 指数バックオフを伴う再試行ロジックを実装する

検証チェックポイント: モデルアクセスと応答解析を検証するため、本番利用前に必ず簡単なプロンプト (例:"Hello") でテストしてください。

Claude でのテキスト生成

public String generateWithClaude(BedrockRuntimeClient client, String prompt) {
    JSONObject payload = new JSONObject()
        .put("anthropic_version", "bedrock-2023-05-31")
        .put("max_tokens", 1000)
        .put("messages", new JSONObject[]{
            new JSONObject().put("role", "user").put("content", prompt)
        });

    InvokeModelResponse response = client.invokeModel(InvokeModelRequest.builder()
        .modelId("anthropic.claude-sonnet-4-5-20250929-v1:0")
        .body(SdkBytes.fromUtf8String(payload.toString()))
        .build());

    JSONObject responseBody = new JSONObject(response.body().asUtf8String());
    return responseBody.getJSONArray("content")
        .getJSONObject(0)
        .getString("text");
}

モデルディスカバリー

import software.amazon.awssdk.services.bedrock.model.*;

public List<FoundationModelSummary> listFoundationModels(BedrockClient bedrockClient) {
    return bedrockClient.listFoundationModels().modelSummaries();
}

マルチモデル呼び出し

public String invokeModel(BedrockRuntimeClient client, String modelId, String prompt) {
    JSONObject payload = createPayload(modelId, prompt);

    InvokeModelResponse response = client.invokeModel(request -> request
        .modelId(modelId)
        .body(SdkBytes.fromUtf8String(payload.toString())));

    return extractTextFromResponse(modelId, response.body().asUtf8String());
}

private JSONObject createPayload(String modelId, String prompt) {
    if (modelId.startsWith("anthropic.claude")) {
        return new JSONObject()
            .put("anthropic_version", "bedrock-2023-05-31")
            .put("max_tokens", 1000)
            .put("messages", new JSONObject[]{
                new JSONObject().put("role", "user").put("content", prompt)
            });
    } else if (modelId.startsWith("amazon.titan")) {
        return new JSONObject()
            .put("inputText", prompt)
            .put("textGenerationConfig", new JSONObject()
                .put("maxTokenCount", 512)
                .put("temperature", 0.7));
    } else if (modelId.startsWith("meta.llama")) {
        return new JSONObject()
            .put("prompt", "[INST] " + prompt + " [/INST]")
            .put("max_gen_len", 512)
            .put("temperature", 0.7);
    }
    throw new IllegalArgumentException("Unsupported model: " + modelId);
}

エラーハンドリングを伴うストリーミング応答

public String streamResponseWithRetry(BedrockRuntimeClient client, String modelId, String prompt, int maxRetries) {
    int attempt = 0;
    while (attempt < maxRetries) {
        try {
            JSONObject payload = createPayload(modelId, prompt);
            StringBuilder fullResponse = new StringBuilder();

            InvokeModelWithResponseStreamRequest request = InvokeModelWithResponseStreamRequest.builder()
                .modelId(modelId)
                .body(SdkBytes.fromUtf8String(payload.toString()))
                .build();

            client.invokeModelWithResponseStream(request,
                InvokeModelWithResponseStreamResponseHandler.builder()
                    .onEventStream(stream -> stream.forEach(event -> {
                        if (event instanceof PayloadPart) {
                            String chunk = ((PayloadPart) event).bytes().asUtf8String();
                            fullResponse.append(chunk);
                        }
                    }))
                    .onError(e -> System.err.println("Stream error: " + e.getMessage()))
                    .build());

            return fullResponse.toString();
        } catch (Exception e) {
            attempt++;
            if (attempt >= maxRetries) {
                throw new RuntimeException("Stream failed after " + maxRetries + " attempts", e);
            }
            try {
                Thread.sleep((long) Math.pow(2, attempt) * 1000); // 指数バックオフ
            } catch (InterruptedException ie) {
                Thread.currentThread().interrupt();
                throw new RuntimeException("Interrupted during retry", ie);
            }
        }
    }
    throw new RuntimeException("Unexpected error in streaming");
}

スロットリング用の指数バックオフ

import software.amazon.awssdk.awscore.exception.AwsServiceException;

public <T> T invokeWithRetry(Supplier<T> invocation, int maxRetries) {
    int attempt = 0;
    while (attempt < maxRetries) {
        try {
            return invocation.get();
        } catch (AwsServiceException e) {
            if (e.statusCode() == 429 || e.statusCode() >= 500) {
                attempt++;
                if (attempt >= maxRetries) throw e;
                long delayMs = Math.min(1000 * (1L << attempt) + (long) (Math.random() * 1000), 30000);
                Thread.sleep(delayMs);
            } else {
                throw e;
            }
        }
    }
    throw new IllegalStateException("Should not reach here");
}

テキスト埋め込み

public double[] createEmbeddings(BedrockRuntimeClient client, String text) {
    String modelId = "amazon.titan-embed-text-v1";

    JSONObject payload = new JSONObject().put("inputText", text);

    InvokeModelResponse response = client.invokeModel(request -> request
        .modelId(modelId)
        .body(SdkBytes.fromUtf8String(payload.toString())));

    JSONObject responseBody = new JSONObject(response.body().asUtf8String());
    JSONArray embeddingArray = responseBody.getJSONArray("embedding");

    double[] embeddings = new double[embeddingArray.length()];
    for (int i = 0; i < embeddingArray.length(); i++) {
        embeddings[i] = embeddingArray.getDouble(i);
    }
    return embeddings;
}

Spring Boot 統合

@Configuration
public class BedrockConfiguration {

    @Bean
    public BedrockClient bedrockClient() {
        return BedrockClient.builder()
            .region(Region.US_EAST_1)
            .build();
    }

    @Bean
    public BedrockRuntimeClient bedrockRuntimeClient() {
        return BedrockRuntimeClient.builder()
            .region(Region.US_EAST_1)
            .build();
    }
}

@Service
public class BedrockAIService {

    private final BedrockRuntimeClient bedrockRuntimeClient;
    private final ObjectMapper mapper;

    @Value("${bedrock.default-model-id:anthropic.claude-sonnet-4-5-20250929-v1:0}")
    private String defaultModelId;

    public BedrockAIService(BedrockRuntimeClient bedrockRuntimeClient, ObjectMapper mapper) {
        this.bedrockRuntimeClient = bedrockRuntimeClient;
        this.mapper = mapper;
    }

    public String generateText(String prompt) {
        Map<String, Object> payload = Map.of(
            "anthropic_version", "bedrock-2023-05-31",
            "max_tokens", 1000,
            "messages", List.of(Map.of("role", "user", "content", prompt))
        );

        InvokeModelResponse response = bedrockRuntimeClient.invokeModel(
            InvokeModelRequest.builder()
                .modelId(defaultModelId)
                .body(SdkBytes.fromUtf8String(mapper.writeValueAsString(payload)))
                .build());

        return extractText(response.body().asUtf8String());
    }
}

包括的な使用パターンについては、examples ディレクトリを参照してください。

ベストプラクティス

モデル選択

  • Claude 4.5 Sonnet: 複雑な推論、分析、クリエイティブなタスク
  • Claude 4.5 Haiku: リアルタイムアプリケーション向けの高速で安価
  • Llama 3.1: 一般的なタスク向けのオープンソース代替
  • Titan: AWS ネイティブ、シンプルなテキスト生成向けのコスト効率

パフォーマンス

  • クライアントインスタンスを再利用する (リクエストごとに新しいクライアントを作成しない)
  • I/O 操作には非同期クライアントを使用する
  • 長い応答にはストリーミングを実装する
  • foundation model リストをキャッシュする

セキュリティ

  • 機密のプロンプトデータをログに出力しない
  • 認証に IAM ロールを使用する
  • ユーザー入力をサニタイズしてプロンプトインジェクションを防ぐ
  • パブリックアプリケーションでレート制限を実装する

制約と警告

  • コスト管理: Bedrock API 呼び出しはトークンごとに料金が発生します。使用状況監視と予算アラートを実装してください。
  • モデルアクセス: Foundation models は AWS コンソールで有効にする必要があります。地域の可用性を確認してください。
  • レート制限: スロットリングに対して指数バックオフを実装してください。モデルごとの制限を確認してください。
  • ペイロードサイズ: 最大ペイロードサイズはモデルによって異なります。大規模なドキュメントにはチャンキングを使用してください。
  • ストリーミングの複雑性: 部分コンテンツとエラーリカバリーを慎重に処理してください。
  • データプライバシー: プロンプトと応答は AWS によってログされる可能性があります。データポリシーを確認してください。
  • 認証情報: 認証情報をコードに埋め込まないでください。EC2/Lambda には IAM ロールを使用してください。

一般的なモデル ID

  • Claude Sonnet 4.5: anthropic.claude-sonnet-4-5-20250929-v1:0
  • Claude Haiku 4.5: anthropic.claude-haiku-4-5-20251001-v1:0
  • Llama 3.1 70B: meta.llama3-1-70b-instruct-v1:0
  • Titan Embeddings: amazon.titan-embed-text-v1

完全なリストについては Model Reference を参照してください。

参考資料

  • Advanced Topics - マルチモデルパターン、高度なエラーハンドリング
  • Model Reference - 詳細な仕様、ペイロードフォーマット
  • Testing Strategies - ユニットテスト、LocalStack 統合
  • AWS Bedrock User Guide
  • AWS SDK Examples
  • Supported Models

関連スキル

  • aws-sdk-java-v2-core - AWS SDK コアパターン
  • langchain4j-ai-services-patterns - LangChain4j 統合
  • spring-boot-dependency-injection - Spring DI パターン

ライセンス: MIT(寛容ライセンスのため全文を引用しています) · 原本リポジトリ

詳細情報

作者
giuseppe-trisciuoglio
リポジトリ
giuseppe-trisciuoglio/developer-kit
ライセンス
MIT
最終更新
不明

Source: https://github.com/giuseppe-trisciuoglio/developer-kit / ライセンス: MIT

関連スキル

OpenAILLM・AI開発⭐ リポ 6,054

agent-browser

AI エージェント向けのブラウザ自動化 CLI です。ウェブサイトとの対話が必要な場合に使用します。ページ遷移、フォーム入力、ボタンクリック、スクリーンショット取得、データ抽出、ウェブアプリのテスト、ブラウザ操作の自動化など、あらゆるブラウザタスクに対応できます。「ウェブサイトを開く」「フォームに記入する」「ボタンをクリックする」「スクリーンショットを取得する」「ページからデータを抽出する」「このウェブアプリをテストする」「サイトにログインする」「ブラウザ操作を自動化する」といった要求や、プログラマティックなウェブ操作が必要なタスクで起動します。

by JimmyLv
汎用LLM・AI開発⭐ リポ 1,982

anyskill

AnySkill — あなたのプライベート・スキルクラウド。GitHubを基盤としたリポジトリからエージェントスキルを管理、同期、動的にロードできます。自然言語でクラウドスキルを検索し、オンデマンドでプロンプトを自動ロード、カスタムスキルのアップロードと共有、スキルバンドルの一括インストールが可能です。OpenClaw、Antigravity、Claude Code、Cursorに対応しています。

by LeoYeAI
汎用LLM・AI開発⭐ リポ 1,982

engram

AIエージェント向けの永続的なメモリシステムです。バグ修正、意思決定、発見、設定変更の後はmem_saveを使用してください。ユーザーが「覚えている」「記憶している」と言及した場合、または以前のセッションと重複する作業を開始する際はmem_searchを使用します。セッション終了前にmem_session_summaryを使用して、コンテキストを保持してください。

by LeoYeAI
汎用LLM・AI開発⭐ リポ 21,584

skyvern

AI駆動のブラウザ自動化により、任意のウェブサイトを自動化できます。フォーム入力、データ抽出、ファイルダウンロード、ログイン、複数ステップのワークフロー実行など、ユーザーがウェブサイトと連携する必要があるときに使用します。Skyvernは、LLMとコンピュータビジョンを活用して、未知のサイトも自動操作可能です。Python SDK、TypeScript SDK、REST API、MCPサーバー、またはCLIを通じて統合できます。

by Skyvern-AI
汎用LLM・AI開発⭐ リポ 1,149

pinchbench

PinchBenchベンチマークを実行して、OpenClawエージェントの実世界タスクにおけるパフォーマンスを評価できます。モデルの機能テスト、モデル間の比較、ベンチマーク結果のリーダーボード提出、またはOpenClawのセットアップがカレンダー、メール、リサーチ、コーディング、複数ステップのワークフローにどの程度対応しているかを確認する際に使用します。

by pinchbench
汎用LLM・AI開発⭐ リポ 4,693

openui

OpenUIとOpenUI Langを使用してジェネレーティブUIアプリを構築できます。これらはLLM生成インターフェースのためのトークン効率的なオープン標準です。OpenUI、@openuidev、ジェネレーティブUI、LLMからのストリーミングUI、AI向けコンポーネントライブラリ、またはjson-render/A2UIの置き換えについて述べる際に使用します。スキャフォルディング、defineComponent、システムプロンプト、Renderer、およびOpenUI Lang出力のデバッグに対応しています。

by thesysdev
本サイトは GitHub 上で公開されているオープンソースの SKILL.md ファイルをクロール・インデックス化したものです。 各スキルの著作権は原作者に帰属します。掲載に問題がある場合は info@alsel.co.jp または /takedown フォームよりご連絡ください。
原作者: giuseppe-trisciuoglio · giuseppe-trisciuoglio/developer-kit · ライセンス: MIT