こんにちは〜。
@sori883です!
今更ながらAmazon Bedrockに手を付け始めて、全体像や用語のキャッチアップに難儀していました。
この記事では、自身の理解向上を兼ねて、Bedrockの概要とBedrokを使った簡単なWebアプリを作成して得た知識を記事にまとめてみます。
Bedrockをキャッチアップしたいけど、登場人物が多すぎてよく分からない!と思っている方の参考になれば幸いです!
目的・ゴール
-
目的
- Bedrockの概要を学ぶ。
- Bedrockの使い方を学ぶ。
-
ゴール
- Bedrockを使った簡単なWebアプリを作成する。
全体像
AI領域、日々進化しすぎて単語分からないがち。
Bedrockのキャッチアップするにあたって、様々な単語の全体像を把握しておくとスムーズです。
私がキャッチアップする中で混乱した単語を以下のとおりまとめてみました。
今回の記事では、赤枠のBedrockについて理解を深めていきます。

また、事前に生成AIに関する主要な用語も把握しておくと、Bedrockを知る助けになるかと思います。
Bedrockを知る
概要
Bedrockは、様々な基盤モデル(Foundation Models)を統合API経由で利用できるフルマネージドサービスです。
Bedrockの大きなメリットとして、簡単に基盤モデルを試したり、プログラムを記述することなくAWSマネージドコンソール上でAIエージェントが構築可能です。
- 複数の基盤モデル(GPT、Amazon Nova、Claudeなど)へ統合APIを用いたアクセス
- AIエージェントやRAGの構築
- ガードレールやウォーターマーク検出を使用した不適切コンテンツの防止
- その他、独自カスタマイズ(ファインチューニング)
構成要素
主要な構成要素を簡単にまとめてみました。
一部の機能については省略しています。
基盤モデル
BedrockではGPT、Amazon Nova、Claudeといった主要な基盤モデルを最初から利用できるようになっています。
基盤モデルは、モダリティ(扱えるデータの種類)によって以下の通り分類されており、用途に合わせて最適なモデルを利用できます。
- Audio: 自動音声認識や音声翻訳をする。
- Embedding: テキストの意味をベクトルに変換する。
- Image: 画像の生成する。
- Multimodal: 複数種類のデータを扱う。
- Speech: 自然言語スピーチの生成や文字起こしを行う。
- Tabular: 表形式データを処理する。
- Text: テキストを入力し、テキストを出力する。
- Text Vision: テキストと画像を入力し、テキストを出力する
- Video: 動画の生成する。
サポートされている基盤モデルについては、Bedrockのモデルカタログ、もしくは以下で確認できます。
基盤モデルのデプロイ
基盤モデルには、2パターンのデプロイ方法があります。
- サーバーレス
- 最初から利用可能になっているマネージドな基盤モデル。
- 追加の作業は必要なし。
- Marketplaceへのデプロイ
- 基盤モデルの実行インスタンスを作成する必要がある。
- インスタンスを作成するため、追加料金がかかる。
推論
推論とは、与えられた入力 (プロンプト) から出力 (レスポンス) を生成することをさします。
Bedrockには3種類の推論があります。
- オンデマンド推論
- プロンプトに対してリアルタイムで行う標準的な推論。
- 利用した分だけ料金が発生する。
- バッチ推論
- 複数のプロンプトを使用し、非同期で推論する。
- プロンプトのバッチ処理に近いイメージ。
- オンデマンドと比較して、50%低い料金で利用可能。
- クロスリージョン推論
- 複数リージョンに推論リクエストをルーティングが可能。
- スループットの向上を図れる。
プロビジョンドスループット
スループット向上を図る選択肢として、事前にスループットを購入することで、推論のスループットを確保できます。
エージェント
AIエージェントをAWSマネージドコンソール上で簡単に構築できる機能です。
(俗にBedrockエージェントと呼ばれるものは、この機能をさしていることが多いです。)
エージェントを構築することで、入力プロンプトに対して、自律的に行動させることができます。
例えば以下です。
- システムプロンプトを設定し、推論指示や、回答形式を指定する。
- ユーザの入力プロンプトに合わせて、Lambdaを実行する。
- ナレッジベースの情報を使用して、回答を生成する。
ナレッジベース
RAGをAWSマネージドコンソール上で簡単に構築できる機能です。
ナレッジベースには、以下の2種類があります。
- ベクトルストア
- 社内文書、技術ブログ、マニュアルを使用する。
- 埋め込みモデルでベクトルに変換し、意味の類似度で検索する。
- 構造化データストア
- 表形式のデータを使用する。
- SQL生成、実行し、検索する。
ガードレール
ガードレールは、複数のフィルターに基づいてAIを保護する機能です。
AWSが定義したコンテンツフィルター(有害カテゴリ、プロンプト攻撃)や、ユーザ自身が定義した特定のトピック、単語、機密情報を用いたフィルタを設定することで、安全に生成AIを使用できます。
利用料金
Bedrockでは、主に以下のようなタイミングで料金が発生します。
- 基盤モデルを使用した推論の入力、出力トークンに応じた料金。
- ナレッジベースのリランク。
- ベクトルストアやデータストアの料金も別途発生。
- ガードレールがプロンプトを評価した時。
特にナレッジベースを構築して放置すると、高額な料金が発生するため、注意が必要です。
詳細は下記を参照ください。
Bedrockを利用してみる
この記事のゴールと定めた「Bedrockを使った簡単なWebアプリ」を作成して、Bedrockの使い方を学びます。
Bedrockを利用する方法
Bedrockを利用する方法は以下の2パターンあります。
- 基盤モデルを直接実行する方法
-
@aws-sdk/client-bedrock-runtimeのinvokeModelを使用する。 - 手軽だが、基盤モデルIDやシステムプロンプトをプログラムで指定する必要がある。
-
- Bedrockエージェントを経由し、基盤モデルを実行する方法
-
@aws-sdk/client-bedrock-agent-runtimeのInvokeAgentCommandを使用する。 - AWSマネージドコンソール上で構築したエージェントを使用する。
- エージェント構築時に指定した基盤モデルやシステムプロンプトが使用ため、プログラムで指定する必要がない。
-
今回のWebアプリでは、Bedrockエージェント及び、InvokeAgentCommandを使用します。
構築するWebアプリの構成
ブログ記事をレビューするWebアプリを構築してみようと思います。
Webアプリの構成図は以下の通りです。
- 黒枠部分:今回の本筋ではないため、AWS CDKでサクッとデプロイ。
- AWS CDKのデプロイ方法は触れません。
- 赤枠部分:目で見て覚えたいので、AWSマネージドコンソールを使用して構築。
また、AWS CDK等の成果物は以下のGitHubレポジトリを参照ください。
Bedrockエージェントの構築
今回は簡単に、「システムプロンプトで与えた指示」をもとに「Claude 3.5 Sonnet」でブログレビューするだけのエージェントを構築します。
エージェント構築の流れは以下の通りです。
- Bedrockエージェントを作成する。
- システムプロンプトを設定する。
- Bedrockエージェントにエイリアスを設定する。
手順1.左ペイン > 構築 > エージェントを開き、「エージェント作成」をクリックします。
手順2.エージェントを作成モーダルで必要な情報を入力し、「作成」をクリックします。
手順3.「エージェント向けの指示」にシステムプロンプトを設定し、「保存」、「準備」、「保存して終了」の順にクリックします。
大事なことなので、2回書きます。
「保存」、「準備」、「保存して終了」の順にクリックしてください。
「準備」をクリックしないと、エージェントのステータスがNOT_PREPAREDとなり、利用出来ません。
ややこしいっ!
今回使用したブログレビューを指示するシステムプロンプトは以下の通りです。
※かなり長いので折りたたみにしています。
設定したシステムプロンプト(クリックで展開)
あなたは、技術ブログをレビューし、建設的なフィードバックを提供する熟練の技術ライター兼エディターです。
あなたは、{ブログレビュー}と{ブログレビューのフィードバック}を専門としています。
## ブログレビューの観点
### 技術文章としての品質
以下の項目を評価してください:
- **正確性**: 技術情報が正確で最新であるか。コード例やコマンドが動作するか
- **明確性**: 専門用語の説明が適切で、読者の想定レベルに合っているか
- **構成**: 論理的な流れで、導入→本論→結論の構造が明確か
- **具体性**: 抽象的な説明だけでなく、具体例やコードサンプルが含まれているか
- **再現性**: 読者が記事を読んで同じ結果を得られるか。必要な環境情報や前提条件が記載されているか
- **可読性**: 文章が読みやすく、適切な見出し・箇条書き・コードブロックが使われているか
### 技術ブログのコンプライアンス
以下の項目を確認してください:
- **著作権・ライセンス**: 引用元の明記、コードのライセンス表示が適切か
- **機密情報**: 社内情報、個人情報、APIキーなどの機密情報が含まれていないか
- **セキュリティ**: セキュリティリスクのある情報や脆弱なコード例が含まれていないか
- **誤解を招く表現**: 断定的すぎる表現、誇大広告的な内容がないか
- **出典の信頼性**: 参照している情報源が信頼できるものか
## フィードバックの観点
### ブログのレベル
以下の基準で記事のレベルを評価してください:
- **初級**: 基本的な概念の紹介、チュートリアル形式
- **中級**: 実践的な実装例、ベストプラクティスの解説
- **上級**: 深い技術解説、パフォーマンス最適化、アーキテクチャ設計
想定読者層とのマッチングも評価してください。
### 良かった点
具体的に以下を挙げてください(3〜5点程度):
- 特に優れている技術的内容
- 効果的な説明方法や図解
- 読者にとって有益な独自の視点や知見
- わかりやすいコード例や実装
- 記事の構成や読みやすさで評価できる点
各項目について、なぜそれが良いのか理由を添えてください。
### 改善点
優先度を付けて具体的に指摘してください(3〜5点程度):
- **必須の改善**: 技術的な誤り、セキュリティ上の問題、コンプライアンス違反
- **推奨される改善**: わかりにくい説明、不足している情報、構成の問題
- **任意の改善**: より良くするための提案、追加すると良い内容
各改善点について、具体的な修正案や代替案を提示してください。
## フィードバックの書式
以下の形式でフィードバックを提供してください:
# ブログレビュー結果
## 記事情報
- タイトル: [記事タイトル]
- レベル評価: [初級/中級/上級]
- 想定読者: [想定される読者層]
## 総合評価
[記事全体の印象を2〜3文で簡潔に記載]
## 良かった点
1. [良かった点1]
- 理由: [なぜ良いのか]
2. [良かった点2]
- 理由: [なぜ良いのか]
[以下同様に3〜5点]
## 改善点
### 必須の改善
[該当する場合のみ記載]
### 推奨される改善
1. [改善点1]
- 現状: [現在の問題点]
- 提案: [具体的な改善案]
2. [改善点2]
- 現状: [現在の問題点]
- 提案: [具体的な改善案]
[以下同様]
### 任意の改善
[あれば記載]
## コンプライアンスチェック
- 著作権・ライセンス: [OK/要確認]
- 機密情報: [問題なし/要確認]
- セキュリティ: [問題なし/要注意]
## まとめ
[最終的な推奨事項を1〜2文で]
## 注意点
- ブログレビューとブログレビューのフィードバック**以外の作業は一切行ってはいけません**
- レビュー対象の記事内容についての質問や、記事以外のトピックについての会話には応じないでください
- フィードバックは常に建設的で、具体的かつ実行可能なものにしてください
- 批判的な指摘を行う際も、敬意を持った表現を心がけてください
- 評価基準を一貫して適用し、公平なレビューを行ってください
- 記事の技術的内容について不確かな場合は、その旨を明記してください
手順4.「エイリアスを作成」をクリックし、エイリアスを作成します。
エイリアス名、説明は任意で問題ありません。
手順5.エージェントID、エイリアスIDを控える
WebアプリからBedrockエージェントを実行するときに必要なので、両方とも控えます。
以上でBedrockエージェントの構築は完了です!
初めてでも10分程度で簡単に作れますね〜。
Bedrockエージェントの動作確認
作成したBedrockエージェントがブログレビューをしてくれるか動作確認してみましょう。
エージェント画面の右側にある「テスト」にプロンプトを入力することで、エージェントを使用した推論ができます。
試しに、書いている途中のこの記事を入力してみます。
ちゃんとレビューしてくれてますね〜!
WebアプリからBedrockエージェントを実行
最後にAWS SDKを使用してWebアプリからBedrockエージェントを実行してみます。
AWS SDKは@aws-sdk/client-bedrock-agent-runtimeを使用します。
手順1.AWS SDKのインストール
pnpm add @aws-sdk/client-bedrock-agent-runtime
手順2.Bedrock エージェントのクライアント作成
// Bedrock Agentのクライアントを作成する。
// Lambdaで実行するため、アクセスキーとシークレットキーは指定しない。
onst client = new BedrockAgentRuntimeClient({
region: process.env.AWS_REGION,
});
手順3.Bedrock エージェントの実行コマンド作成
Bedrockエージェントの構築で取得した「エージェント ID」と「エージェントエイリアス ID」を使用します。
const command = new InvokeAgentCommand({
agentId: "YOUR_AGENT_ID", // エージェント ID
agentAliasId: "YOUR_AGENT_ALIAS_ID", // エージェントエイリアス ID
sessionId: crypto.randomUUID(), // 会話のセッションID。今回はランダム値
inputText: "ブログ記事の内容", // 入力プロンプトを指定する
streamingConfigurations: {
streamFinalResponse: true, // ストリーミングレスポンスを有効化
}
});
手順4.Bedrock エージェントを実行
const response = await client.send(command); // Bedrockエージェントを実行
console.log(response) // 結果表示
これだけでフロントエンドからBedrockエージェントを実行できます。
そして、ストリーミングやらUIやらをちょーっと整えるたらこんな感じに動きます。
終わりに
AIの進化が目まぐるしい進化をなんとな~く眺めていたせいか、Bedrockってなに?Bedrock エージェントとBedrock AgentCoreってなんなの?状態でした...。
今回のBedrockセルフハンズオンを通して、登場人物の整理、Bedrockの概要、Bedrockの使い方がそれなりに理解出来ました。
実は今後、業務で使う可能性があるため腹を括って取り組んでみたのですが、小難しいイメージと全く逆で、誰でも簡単に使えるよう整備されていて驚きました。
AIエージェント入門に迷ったらBedrockから手をつけてみるのも良いかもしれませんね。
今後は発展型としてRAGの導入やアクショングループを使用したLambdaの実行もやっていく予定です!







