汎用LLM・AI開発⭐ リポ 38品質スコア 80/100
bedrock
AWS Bedrockの基盤モデルを利用した生成AI機能です。基盤モデルの呼び出し、AIアプリケーション開発、埋め込みベクトルの生成、モデルアクセスの設定、RAGパターンの実装が必要な場合に使用します。
description の原文を見る
AWS Bedrock foundation models for generative AI. Use when invoking foundation models, building AI applications, creating embeddings, configuring model access, or implementing RAG patterns.
SKILL.md 本文
AWS Bedrock
Amazon Bedrockは、AI企業の基盤モデル(FM)への統一されたAPIを通じたアクセスを提供します。テキスト生成、埋め込み、画像生成機能を備えた生成AIアプリケーションを構築できます。
目次
コアコンセプト
基盤モデル
Bedrockを通じて利用可能な事前訓練済みモデル:
- Claude (Anthropic): テキスト生成、分析、コーディング
- Titan (Amazon): テキスト、埋め込み、画像生成
- Llama (Meta): オープンウェイトテキスト生成
- Mistral: 効率的なテキスト生成
- Stable Diffusion (Stability AI): 画像生成
モデルアクセス
使用する前に、アカウントでモデルを有効化する必要があります:
- Bedrockコンソールでアクセスをリクエスト
- 一部のモデルではEULA(最終ユーザーライセンス契約)の受け入れが必要
- アクセスはリージョン固有です
インファレンスタイプ
| タイプ | ユースケース | 料金 |
|---|---|---|
| オンデマンド | 変動するワークロード | トークンあたり |
| プロビジョンド スループット | 一貫した大量処理 | 時間単位のコミットメント |
| バッチ インファレンス | 非同期大規模処理 | 割引済みトークンあたり |
一般的なパターン
モデルの呼び出し(テキスト生成)
AWS CLI:
# Claudeを呼び出し
aws bedrock-runtime invoke-model \
--model-id anthropic.claude-3-sonnet-20240229-v1:0 \
--content-type application/json \
--accept application/json \
--body '{
"anthropic_version": "bedrock-2023-05-31",
"max_tokens": 1024,
"messages": [
{"role": "user", "content": "Explain AWS Lambda in 3 sentences."}
]
}' \
response.json
cat response.json | jq -r '.content[0].text'
boto3:
import boto3
import json
bedrock = boto3.client('bedrock-runtime')
def invoke_claude(prompt, max_tokens=1024):
response = bedrock.invoke_model(
modelId='anthropic.claude-3-sonnet-20240229-v1:0',
contentType='application/json',
accept='application/json',
body=json.dumps({
'anthropic_version': 'bedrock-2023-05-31',
'max_tokens': max_tokens,
'messages': [
{'role': 'user', 'content': prompt}
]
})
)
result = json.loads(response['body'].read())
return result['content'][0]['text']
# 使用例
response = invoke_claude('What is Amazon S3?')
print(response)
ストリーミングレスポンス
import boto3
import json
bedrock = boto3.client('bedrock-runtime')
def stream_claude(prompt):
response = bedrock.invoke_model_with_response_stream(
modelId='anthropic.claude-3-sonnet-20240229-v1:0',
contentType='application/json',
accept='application/json',
body=json.dumps({
'anthropic_version': 'bedrock-2023-05-31',
'max_tokens': 1024,
'messages': [
{'role': 'user', 'content': prompt}
]
})
)
for event in response['body']:
chunk = json.loads(event['chunk']['bytes'])
if chunk['type'] == 'content_block_delta':
yield chunk['delta'].get('text', '')
# 使用例
for text in stream_claude('Write a haiku about cloud computing.'):
print(text, end='', flush=True)
埋め込みの生成
import boto3
import json
bedrock = boto3.client('bedrock-runtime')
def get_embedding(text):
response = bedrock.invoke_model(
modelId='amazon.titan-embed-text-v2:0',
contentType='application/json',
accept='application/json',
body=json.dumps({
'inputText': text,
'dimensions': 1024,
'normalize': True
})
)
result = json.loads(response['body'].read())
return result['embedding']
# 使用例
embedding = get_embedding('AWS Lambda is a serverless compute service.')
print(f'Embedding dimension: {len(embedding)}')
履歴を含む会話
import boto3
import json
bedrock = boto3.client('bedrock-runtime')
class Conversation:
def __init__(self, system_prompt=None):
self.messages = []
self.system = system_prompt
def chat(self, user_message):
self.messages.append({
'role': 'user',
'content': user_message
})
body = {
'anthropic_version': 'bedrock-2023-05-31',
'max_tokens': 1024,
'messages': self.messages
}
if self.system:
body['system'] = self.system
response = bedrock.invoke_model(
modelId='anthropic.claude-3-sonnet-20240229-v1:0',
contentType='application/json',
accept='application/json',
body=json.dumps(body)
)
result = json.loads(response['body'].read())
assistant_message = result['content'][0]['text']
self.messages.append({
'role': 'assistant',
'content': assistant_message
})
return assistant_message
# 使用例
conv = Conversation(system_prompt='You are an AWS solutions architect.')
print(conv.chat('What database should I use for a chat application?'))
print(conv.chat('What about for time-series data?'))
利用可能なモデルの一覧表示
# すべての基盤モデルをリスト
aws bedrock list-foundation-models \
--query 'modelSummaries[*].[modelId,modelName,providerName]' \
--output table
# プロバイダーでフィルタリング
aws bedrock list-foundation-models \
--by-provider anthropic \
--query 'modelSummaries[*].modelId'
# モデルの詳細を取得
aws bedrock get-foundation-model \
--model-identifier anthropic.claude-3-sonnet-20240229-v1:0
モデルアクセスのリクエスト
# モデルアクセスステータスをリスト
aws bedrock list-foundation-model-agreement-offers \
--model-id anthropic.claude-3-sonnet-20240229-v1:0
CLIリファレンス
Bedrock(コントロールプレーン)
| コマンド | 説明 |
|---|---|
aws bedrock list-foundation-models | 利用可能なモデルをリスト |
aws bedrock get-foundation-model | モデルの詳細を取得 |
aws bedrock list-custom-models | ファインチューニング済みモデルをリスト |
aws bedrock create-model-customization-job | ファインチューニングを開始 |
aws bedrock list-provisioned-model-throughputs | プロビジョンド容量をリスト |
Bedrock Runtime(データプレーン)
| コマンド | 説明 |
|---|---|
aws bedrock-runtime invoke-model | モデルを同期的に呼び出し |
aws bedrock-runtime invoke-model-with-response-stream | ストリーミングで呼び出し |
aws bedrock-runtime converse | マルチターン会話API |
aws bedrock-runtime converse-stream | ストリーミング会話 |
Bedrock Agent Runtime
| コマンド | 説明 |
|---|---|
aws bedrock-agent-runtime invoke-agent | Bedrockエージェントを呼び出し |
aws bedrock-agent-runtime retrieve | ナレッジベースをクエリ |
aws bedrock-agent-runtime retrieve-and-generate | RAGクエリ |
ベストプラクティス
コスト最適化
- 適切なモデルの使用: シンプルなタスクには小さいモデルを使用
- max_tokensの設定: 可能な限り出力長を制限
- レスポンスのキャッシング: 同じクエリの繰り返しに対応
- バッチ処理の活用: バルク処理にはバッチインファレンスを使用
- 使用量の監視: CloudWatchアラームでコストを管理
パフォーマンス
- ストリーミングの使用: 長い出力でのユーザー体験向上
- 接続プーリング: boto3クライアントを再利用
- リージョンデプロイメント: レイテンシを減らすため最も近いリージョンを使用
- プロビジョンド スループット: 一貫した大量ワークロードに対応
セキュリティ
- 最小権限IAM: 必要なモデルアクセスのみを付与
- VPCエンドポイント: トラフィックをプライベートに保つ
- ガードレール: コンテンツフィルタリングを実装
- CloudTrailで監査: モデル呼び出しを追跡
IAM権限
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"bedrock:InvokeModel",
"bedrock:InvokeModelWithResponseStream"
],
"Resource": [
"arn:aws:bedrock:us-east-1::foundation-model/anthropic.claude-3-sonnet-20240229-v1:0",
"arn:aws:bedrock:us-east-1::foundation-model/amazon.titan-embed-text-v2:0"
]
}
]
}
トラブルシューティング
AccessDeniedException
原因:
- コンソールでモデルアクセスが有効化されていない
- IAMポリシーに
bedrock:InvokeModelがない - 間違ったモデルIDまたはリージョン
デバッグ:
# モデルアクセスステータスを確認
aws bedrock list-foundation-models \
--query 'modelSummaries[?modelId==`anthropic.claude-3-sonnet-20240229-v1:0`]'
# IAM権限をテスト
aws iam simulate-principal-policy \
--policy-source-arn arn:aws:iam::123456789012:role/my-role \
--action-names bedrock:InvokeModel \
--resource-arns "arn:aws:bedrock:us-east-1::foundation-model/anthropic.claude-3-sonnet-20240229-v1:0"
ModelNotReadyException
原因: モデルがプロビジョニング中または一時的に利用不可。
解決策: 指数バックオフでリトライを実装:
import time
from botocore.exceptions import ClientError
def invoke_with_retry(bedrock, body, max_retries=3):
for attempt in range(max_retries):
try:
return bedrock.invoke_model(
modelId='anthropic.claude-3-sonnet-20240229-v1:0',
body=json.dumps(body)
)
except ClientError as e:
if e.response['Error']['Code'] == 'ModelNotReadyException':
time.sleep(2 ** attempt)
else:
raise
raise Exception('Max retries exceeded')
ThrottlingException
原因:
- オンデマンドクォータを超過
- 同時リクエストが多すぎる
解決策:
- クォータ増加をリクエスト
- 指数バックオフを実装
- プロビジョンド スループットを検討
ValidationException
一般的な問題:
- 無効なモデルID
- リクエストボディの形式が不正
- max_tokensがモデルの上限を超過
デバッグ:
# モデル固有の要件を確認
aws bedrock get-foundation-model \
--model-identifier anthropic.claude-3-sonnet-20240229-v1:0 \
--query 'modelDetails.inferenceTypesSupported'
参考資料
ライセンス: MIT(寛容ライセンスのため全文を引用しています) · 原本リポジトリ
詳細情報
- 作者
- ComeOnOliver
- ライセンス
- MIT
- 最終更新
- 2026/5/11
Source: https://github.com/ComeOnOliver/skillshub / ライセンス: MIT