bedrock-prompts
Amazon BedrockのPrompt Managementを活用し、変数を含むプロンプトテンプレートの作成・管理、A/Bテストによる改善、Bedrock Flowsとの連携を行い、プロンプトエンジニアリングを最適化して再利用可能なプロンプトカタログを構築するSkill。
📜 元の英語説明(参考)
Amazon Bedrock Prompt Management for creating, versioning, and managing prompt templates with variables, multi-variant A/B testing, and flow integration. Use when creating reusable prompt templates, managing prompt versions, implementing A/B testing for prompts, integrating prompts with Bedrock Flows, optimizing prompt engineering, or building production prompt catalogs.
🇯🇵 日本人クリエイター向け解説
Amazon BedrockのPrompt Managementを活用し、変数を含むプロンプトテンプレートの作成・管理、A/Bテストによる改善、Bedrock Flowsとの連携を行い、プロンプトエンジニアリングを最適化して再利用可能なプロンプトカタログを構築するSkill。
※ jpskill.com 編集部が日本のビジネス現場向けに補足した解説です。Skill本体の挙動とは独立した参考情報です。
下記のコマンドをコピーしてターミナル(Mac/Linux)または PowerShell(Windows)に貼り付けてください。 ダウンロード → 解凍 → 配置まで全自動。
mkdir -p ~/.claude/skills && cd ~/.claude/skills && curl -L -o bedrock-prompts.zip https://jpskill.com/download/9384.zip && unzip -o bedrock-prompts.zip && rm bedrock-prompts.zip
$d = "$env:USERPROFILE\.claude\skills"; ni -Force -ItemType Directory $d | Out-Null; iwr https://jpskill.com/download/9384.zip -OutFile "$d\bedrock-prompts.zip"; Expand-Archive "$d\bedrock-prompts.zip" -DestinationPath $d -Force; ri "$d\bedrock-prompts.zip"
完了後、Claude Code を再起動 → 普通に「動画プロンプト作って」のように話しかけるだけで自動発動します。
💾 手動でダウンロードしたい(コマンドが難しい人向け)
- 1. 下の青いボタンを押して
bedrock-prompts.zipをダウンロード - 2. ZIPファイルをダブルクリックで解凍 →
bedrock-promptsフォルダができる - 3. そのフォルダを
C:\Users\あなたの名前\.claude\skills\(Win)または~/.claude/skills/(Mac)へ移動 - 4. Claude Code を再起動
⚠️ ダウンロード・利用は自己責任でお願いします。当サイトは内容・動作・安全性について責任を負いません。
🎯 このSkillでできること
下記の説明文を読むと、このSkillがあなたに何をしてくれるかが分かります。Claudeにこの分野の依頼をすると、自動で発動します。
📦 インストール方法 (3ステップ)
- 1. 上の「ダウンロード」ボタンを押して .skill ファイルを取得
- 2. ファイル名の拡張子を .skill から .zip に変えて展開(macは自動展開可)
- 3. 展開してできたフォルダを、ホームフォルダの
.claude/skills/に置く- · macOS / Linux:
~/.claude/skills/ - · Windows:
%USERPROFILE%\.claude\skills\
- · macOS / Linux:
Claude Code を再起動すれば完了。「このSkillを使って…」と話しかけなくても、関連する依頼で自動的に呼び出されます。
詳しい使い方ガイドを見る →- 最終更新
- 2026-05-18
- 取得日時
- 2026-05-18
- 同梱ファイル
- 1
📖 Skill本文(日本語訳)
※ 原文(英語/中国語)を Gemini で日本語化したものです。Claude 自身は原文を読みます。誤訳がある場合は原文をご確認ください。
Amazon Bedrock プロンプト管理
概要
Amazon Bedrock プロンプト管理は、プロンプトテンプレートの作成、バージョニング、テスト、およびデプロイのためのエンタープライズグレードの機能を提供します。これにより、チームはプロンプトエンジニアリングを一元化し、A/Bテストを実装し、Bedrock Flows、Agents、およびアプリケーション全体でプロンプトを統合できます。
目的: バージョン管理、変数置換、およびマルチバリアントテストによる一元化されたプロンプトテンプレート管理
パターン: タスクベース(異なるプロンプト管理タスクのための独立した操作)
主な機能:
- プロンプトテンプレート - 変数置換が可能な再利用可能なテンプレート
- バージョン管理 - 変更の追跡、ロールバック、および段階的なデプロイ
- マルチバリアントテスト - さまざまなプロンプトバリエーションのA/Bテスト
- Flow Integration - Bedrock Flows および Agents でのプロンプトの使用
- 変数型 - 文字列、数値、配列、および JSON オブジェクト変数
- プロンプトカタログ - チームコラボレーションのための一元化されたライブラリ
- クロスモデルサポート - すべての Bedrock 基盤モデルで動作
品質目標:
- 再利用性: アプリケーション全体で 80% 以上のプロンプトテンプレートの再利用
- バージョン管理: 100% のプロンプト変更の追跡
- テスト: 本番プロンプトごとに 3 つ以上のバリアントの A/B テスト
- コラボレーション: チーム全体のアクセス用の一元化されたカタログ
使用するタイミング
次の場合に bedrock-prompts を使用します。
- アプリケーション全体で再利用可能なプロンプトテンプレートを作成する場合
- ロールバックと段階的なデプロイのためにプロンプトバージョンを管理する場合
- プロンプトの最適化のために A/B テストを実装する場合
- チーム向けの一元化されたプロンプトカタログを構築する場合
- プロンプトを Bedrock Flows または Agents と統合する場合
- プロンプトエンジニアリングの実践を標準化する場合
- 本番デプロイ前にプロンプトバリエーションをテストする場合
- 複数のプロジェクト間でプロンプトを共有する場合
- プロンプトに変数の置換を実装する場合
- データ駆動型テストでプロンプトを最適化する場合
使用しない場合:
- 再利用のない単回使用のプロンプト(インラインプロンプトを使用)
- バージョン管理のニーズがないシンプルなアプリケーション
- アドホックな実験(最初にローカルでテストし、次に管理されたプロンプトに昇格)
前提条件
必須
- Bedrock アクセス権を持つ AWS アカウント
- Bedrock Agent サービスに対する IAM 権限
- 有効になっている基盤モデルアクセス
- boto3 >= 1.34.0
推奨
- プロンプトエンジニアリングのベストプラクティスの理解
- Bedrock Flows または Agents の知識
- プロンプトの使用状況を監視するための CloudWatch
- プロンプトテストの結果を保存するための S3
インストール
pip install boto3 botocore
IAM 権限
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"bedrock:CreatePrompt",
"bedrock:GetPrompt",
"bedrock:UpdatePrompt",
"bedrock:DeletePrompt",
"bedrock:ListPrompts",
"bedrock:CreatePromptVersion",
"bedrock:ListPromptVersions",
"bedrock:InvokeModel"
],
"Resource": "*"
}
]
}
クイックスタート
1. プロンプトテンプレートの作成
import boto3
import json
bedrock_agent = boto3.client('bedrock-agent', region_name='us-east-1')
response = bedrock_agent.create_prompt(
name='customer-support-prompt',
description='Customer support response template',
variants=[
{
'name': 'default',
'templateType': 'TEXT',
'modelId': 'anthropic.claude-3-sonnet-20240229-v1:0',
'templateConfiguration': {
'text': {
'text': '''あなたは {{company_name}} の役に立つカスタマーサポートエージェントです。
顧客からの問い合わせ: {{customer_query}}
指示:
- プロフェッショナルで共感的に対応してください
- 明確で実行可能な解決策を提供してください
- わからない場合は、エスカレーションを提案してください
- 回答を {{max_words}} ワード未満にしてください
回答:''',
'inputVariables': [
{
'name': 'company_name'
},
{
'name': 'customer_query'
},
{
'name': 'max_words'
}
]
}
},
'inferenceConfiguration': {
'text': {
'maxTokens': 500,
'temperature': 0.7,
'topP': 0.9
}
}
}
]
)
prompt_id = response['id']
prompt_arn = response['arn']
print(f"Created prompt: {prompt_id}")
print(f"ARN: {prompt_arn}")
2. プロンプトバージョンの作成
# 本番環境用のイミュータブルなバージョンを作成
version_response = bedrock_agent.create_prompt_version(
promptIdentifier=prompt_id,
description='Production v1.0 - Initial release'
)
version = version_response['version']
print(f"Created version: {version}")
3. プロンプトの取得と使用
# プロンプトの詳細を取得
prompt = bedrock_agent.get_prompt(
promptIdentifier=prompt_id,
promptVersion=version
)
# テンプレートと変数を抽出
template = prompt['variants'][0]['templateConfiguration']['text']['text']
variables = {var['name']: None for var in prompt['variants'][0]['templateConfiguration']['text']['inputVariables']}
print(f"Template: {template}")
print(f"Variables: {list(variables.keys())}")
操作
操作 1: create-prompt
変数と推論構成を持つ新しいプロンプトテンプレートを作成します。
使用する場合: 再利用可能なプロンプトテンプレートの構築、アプリケーション全体でのプロンプトの標準化、プロンプトカタログの作成
コード例:
import boto3
bedrock_agent = boto3.client('bedrock-agent', region_name='us-east-1')
# 複数の変数型を持つ高度なプロンプトを作成
response = bedrock_agent.create_prompt(
name='product-recommendation-prompt',
description='E-commerce product recommendation engine',
defaultVariant='optimized',
variants=[
{
'name': 'optimized',
'templateType': 'TEXT',
'modelId': 'anthropic.claude-3-sonne
(原文がここで切り詰められています) 📜 原文 SKILL.md(Claudeが読む英語/中国語)を展開
Amazon Bedrock Prompt Management
Overview
Amazon Bedrock Prompt Management provides enterprise-grade capabilities for creating, versioning, testing, and deploying prompt templates. It enables teams to centralize prompt engineering, implement A/B testing, and integrate prompts across Bedrock Flows, Agents, and applications.
Purpose: Centralized prompt template management with version control, variable substitution, and multi-variant testing
Pattern: Task-based (independent operations for different prompt management tasks)
Key Capabilities:
- Prompt Templates - Reusable templates with variable substitution
- Version Management - Track changes, rollback, and staged deployment
- Multi-Variant Testing - A/B test different prompt variations
- Flow Integration - Use prompts in Bedrock Flows and Agents
- Variable Types - String, number, array, and JSON object variables
- Prompt Catalog - Centralized library for team collaboration
- Cross-Model Support - Works with all Bedrock foundation models
Quality Targets:
- Reusability: 80%+ prompt template reuse across applications
- Version Control: 100% prompt changes tracked
- Testing: A/B test 3+ variants per production prompt
- Collaboration: Centralized catalog for team-wide access
When to Use
Use bedrock-prompts when:
- Creating reusable prompt templates across applications
- Managing prompt versions for rollback and staged deployment
- Implementing A/B testing for prompt optimization
- Building centralized prompt catalogs for teams
- Integrating prompts with Bedrock Flows or Agents
- Standardizing prompt engineering practices
- Testing prompt variations before production deployment
- Sharing prompts across multiple projects
- Implementing variable substitution in prompts
- Optimizing prompts with data-driven testing
When NOT to Use:
- Single-use prompts without reuse (use inline prompts)
- Simple applications without version control needs
- Ad-hoc experimentation (test locally first, then promote to managed prompts)
Prerequisites
Required
- AWS account with Bedrock access
- IAM permissions for Bedrock Agent service
- Foundation model access enabled
- boto3 >= 1.34.0
Recommended
- Understanding of prompt engineering best practices
- Familiarity with Bedrock Flows or Agents
- CloudWatch for monitoring prompt usage
- S3 for storing prompt test results
Installation
pip install boto3 botocore
IAM Permissions
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"bedrock:CreatePrompt",
"bedrock:GetPrompt",
"bedrock:UpdatePrompt",
"bedrock:DeletePrompt",
"bedrock:ListPrompts",
"bedrock:CreatePromptVersion",
"bedrock:ListPromptVersions",
"bedrock:InvokeModel"
],
"Resource": "*"
}
]
}
Quick Start
1. Create Prompt Template
import boto3
import json
bedrock_agent = boto3.client('bedrock-agent', region_name='us-east-1')
response = bedrock_agent.create_prompt(
name='customer-support-prompt',
description='Customer support response template',
variants=[
{
'name': 'default',
'templateType': 'TEXT',
'modelId': 'anthropic.claude-3-sonnet-20240229-v1:0',
'templateConfiguration': {
'text': {
'text': '''You are a helpful customer support agent for {{company_name}}.
Customer Query: {{customer_query}}
Instructions:
- Be professional and empathetic
- Provide clear, actionable solutions
- If you don't know, offer to escalate
- Keep responses under {{max_words}} words
Response:''',
'inputVariables': [
{
'name': 'company_name'
},
{
'name': 'customer_query'
},
{
'name': 'max_words'
}
]
}
},
'inferenceConfiguration': {
'text': {
'maxTokens': 500,
'temperature': 0.7,
'topP': 0.9
}
}
}
]
)
prompt_id = response['id']
prompt_arn = response['arn']
print(f"Created prompt: {prompt_id}")
print(f"ARN: {prompt_arn}")
2. Create Prompt Version
# Create immutable version for production
version_response = bedrock_agent.create_prompt_version(
promptIdentifier=prompt_id,
description='Production v1.0 - Initial release'
)
version = version_response['version']
print(f"Created version: {version}")
3. Get and Use Prompt
# Get prompt details
prompt = bedrock_agent.get_prompt(
promptIdentifier=prompt_id,
promptVersion=version
)
# Extract template and variables
template = prompt['variants'][0]['templateConfiguration']['text']['text']
variables = {var['name']: None for var in prompt['variants'][0]['templateConfiguration']['text']['inputVariables']}
print(f"Template: {template}")
print(f"Variables: {list(variables.keys())}")
Operations
Operation 1: create-prompt
Create a new prompt template with variables and inference configuration.
Use when: Building reusable prompt templates, standardizing prompts across applications, creating prompt catalogs
Code Example:
import boto3
bedrock_agent = boto3.client('bedrock-agent', region_name='us-east-1')
# Create advanced prompt with multiple variable types
response = bedrock_agent.create_prompt(
name='product-recommendation-prompt',
description='E-commerce product recommendation engine',
defaultVariant='optimized',
variants=[
{
'name': 'optimized',
'templateType': 'TEXT',
'modelId': 'anthropic.claude-3-sonnet-20240229-v1:0',
'templateConfiguration': {
'text': {
'text': '''You are a product recommendation expert for an e-commerce platform.
User Profile:
- Name: {{user_name}}
- Purchase History: {{purchase_history}}
- Preferences: {{preferences}}
- Budget: ${{budget}}
Available Categories: {{categories}}
Task: Recommend {{num_recommendations}} products that match the user's profile.
Format your response as a JSON array with product_id, name, price, and reason.''',
'inputVariables': [
{'name': 'user_name'},
{'name': 'purchase_history'},
{'name': 'preferences'},
{'name': 'budget'},
{'name': 'categories'},
{'name': 'num_recommendations'}
]
}
},
'inferenceConfiguration': {
'text': {
'maxTokens': 1000,
'temperature': 0.5,
'topP': 0.95,
'stopSequences': ['\n\n---']
}
}
}
],
tags={
'Environment': 'production',
'Team': 'recommendations',
'CostCenter': 'engineering'
}
)
print(f"Prompt ID: {response['id']}")
print(f"Prompt ARN: {response['arn']}")
print(f"Created At: {response['createdAt']}")
Best Practices:
- Use descriptive names with hyphens (e.g.,
customer-support-prompt) - Document variable types and expected formats
- Set appropriate
maxTokensto control costs - Use
defaultVariantto specify preferred version - Add tags for cost tracking and organization
Operation 2: create-prompt-version
Create immutable versions of prompts for production deployment and rollback.
Use when: Deploying prompts to production, implementing staged rollout, enabling rollback capability
Code Example:
import boto3
from datetime import datetime
bedrock_agent = boto3.client('bedrock-agent', region_name='us-east-1')
# Create version with detailed description
version_response = bedrock_agent.create_prompt_version(
promptIdentifier='prompt-12345',
description=f'Production v2.0 - {datetime.now().isoformat()} - Added sentiment analysis',
tags={
'Version': '2.0',
'ReleaseDate': datetime.now().strftime('%Y-%m-%d'),
'Changelog': 'Added sentiment context to improve response quality'
}
)
version_number = version_response['version']
version_arn = version_response['arn']
print(f"Version: {version_number}")
print(f"ARN: {version_arn}")
# List all versions
list_response = bedrock_agent.list_prompts(
promptIdentifier='prompt-12345'
)
print("\nAll versions:")
for version in list_response.get('promptSummaries', []):
print(f"- Version {version['version']}: {version.get('description', 'No description')}")
Version Management Best Practices:
- Create versions before production deployment
- Use semantic versioning in descriptions (v1.0, v1.1, v2.0)
- Document changes in version descriptions
- Keep DRAFT version for active development
- Test versions thoroughly before promoting
Operation 3: get-prompt
Retrieve prompt details including template, variables, and inference configuration.
Use when: Inspecting prompt templates, debugging issues, preparing for invocation
Code Example:
import boto3
bedrock_agent = boto3.client('bedrock-agent', region_name='us-east-1')
# Get specific version
prompt = bedrock_agent.get_prompt(
promptIdentifier='prompt-12345',
promptVersion='2' # Omit for DRAFT version
)
# Extract configuration
variant = prompt['variants'][0]
template = variant['templateConfiguration']['text']['text']
variables = variant['templateConfiguration']['text']['inputVariables']
inference_config = variant['inferenceConfiguration']['text']
print(f"Prompt Name: {prompt['name']}")
print(f"Version: {prompt['version']}")
print(f"Model: {variant['modelId']}")
print(f"\nTemplate:\n{template}")
print(f"\nVariables:")
for var in variables:
print(f" - {var['name']}")
print(f"\nInference Config:")
print(f" Max Tokens: {inference_config['maxTokens']}")
print(f" Temperature: {inference_config['temperature']}")
print(f" Top P: {inference_config['topP']}")
Operation 4: list-prompts
List all prompts or filter by criteria.
Use when: Building prompt catalogs, auditing prompt usage, discovering available prompts
Code Example:
import boto3
bedrock_agent = boto3.client('bedrock-agent', region_name='us-east-1')
# List all prompts with pagination
paginator = bedrock_agent.get_paginator('list_prompts')
page_iterator = paginator.paginate()
prompts = []
for page in page_iterator:
prompts.extend(page.get('promptSummaries', []))
print(f"Total prompts: {len(prompts)}")
print("\nPrompt Catalog:")
for prompt in prompts:
print(f"\n- {prompt['name']} (ID: {prompt['id']})")
print(f" Description: {prompt.get('description', 'N/A')}")
print(f" Created: {prompt['createdAt']}")
print(f" Updated: {prompt['updatedAt']}")
print(f" Version: {prompt['version']}")
Operation 5: update-prompt
Update prompt templates, add variants, or modify inference configuration.
Use when: Improving prompts, adding A/B test variants, adjusting inference parameters
Code Example:
import boto3
bedrock_agent = boto3.client('bedrock-agent', region_name='us-east-1')
# Update prompt with new variant
response = bedrock_agent.update_prompt(
promptIdentifier='prompt-12345',
name='customer-support-prompt',
description='Customer support with multiple response styles',
defaultVariant='professional',
variants=[
{
'name': 'professional',
'templateType': 'TEXT',
'modelId': 'anthropic.claude-3-sonnet-20240229-v1:0',
'templateConfiguration': {
'text': {
'text': 'Professional tone template...',
'inputVariables': [{'name': 'query'}]
}
},
'inferenceConfiguration': {
'text': {'maxTokens': 500, 'temperature': 0.3}
}
},
{
'name': 'friendly',
'templateType': 'TEXT',
'modelId': 'anthropic.claude-3-sonnet-20240229-v1:0',
'templateConfiguration': {
'text': {
'text': 'Friendly tone template...',
'inputVariables': [{'name': 'query'}]
}
},
'inferenceConfiguration': {
'text': {'maxTokens': 500, 'temperature': 0.7}
}
}
]
)
print(f"Updated prompt: {response['id']}")
Operation 6: delete-prompt
Delete prompt templates (cannot be undone).
Use when: Cleaning up unused prompts, removing deprecated templates
Code Example:
import boto3
bedrock_agent = boto3.client('bedrock-agent', region_name='us-east-1')
# Delete prompt (all versions)
response = bedrock_agent.delete_prompt(
promptIdentifier='prompt-12345'
)
print(f"Deleted prompt: {response['id']}")
print(f"Status: {response['status']}")
Warning: Deletion is permanent and affects all versions. Ensure prompt is not used in Flows or Agents before deleting.
Variable Types and Substitution
Supported Variable Types
Bedrock Prompt Management supports multiple variable types:
- String: Text values (default)
- Number: Numeric values
- Array: Lists of items
- JSON Object: Complex structured data
Variable Substitution Example
import boto3
import json
bedrock_agent = boto3.client('bedrock-agent', region_name='us-east-1')
bedrock_runtime = boto3.client('bedrock-runtime', region_name='us-east-1')
# Create prompt with complex variables
prompt_response = bedrock_agent.create_prompt(
name='data-analysis-prompt',
variants=[{
'name': 'default',
'templateType': 'TEXT',
'modelId': 'anthropic.claude-3-sonnet-20240229-v1:0',
'templateConfiguration': {
'text': {
'text': '''Analyze the following data:
Dataset: {{dataset_name}}
Columns: {{columns}}
Row Count: {{row_count}}
Sample Data: {{sample_data}}
Analysis Type: {{analysis_type}}
Provide insights and recommendations.''',
'inputVariables': [
{'name': 'dataset_name'},
{'name': 'columns'},
{'name': 'row_count'},
{'name': 'sample_data'},
{'name': 'analysis_type'}
]
}
}
}]
)
# Use prompt with variable substitution
prompt = bedrock_agent.get_prompt(
promptIdentifier=prompt_response['id']
)
template = prompt['variants'][0]['templateConfiguration']['text']['text']
# Substitute variables
variables = {
'dataset_name': 'Sales Q4 2024',
'columns': json.dumps(['date', 'product', 'revenue', 'quantity']),
'row_count': '10,000',
'sample_data': json.dumps([
{'date': '2024-10-01', 'product': 'Widget A', 'revenue': 1500, 'quantity': 50},
{'date': '2024-10-02', 'product': 'Widget B', 'revenue': 2000, 'quantity': 75}
]),
'analysis_type': 'Revenue trends and product performance'
}
# Replace variables in template
prompt_text = template
for var_name, var_value in variables.items():
prompt_text = prompt_text.replace(f'{{{{{var_name}}}}}', str(var_value))
print(f"Final Prompt:\n{prompt_text}")
Multi-Variant Testing (A/B Testing)
Creating Multi-Variant Prompts
import boto3
bedrock_agent = boto3.client('bedrock-agent', region_name='us-east-1')
# Create prompt with 3 variants for A/B/C testing
response = bedrock_agent.create_prompt(
name='email-subject-generator',
description='A/B/C test for email subject lines',
defaultVariant='variant-a',
variants=[
{
'name': 'variant-a',
'templateType': 'TEXT',
'modelId': 'anthropic.claude-3-sonnet-20240229-v1:0',
'templateConfiguration': {
'text': {
'text': 'Generate a professional email subject line for: {{email_content}}',
'inputVariables': [{'name': 'email_content'}]
}
},
'inferenceConfiguration': {
'text': {'maxTokens': 50, 'temperature': 0.3}
}
},
{
'name': 'variant-b',
'templateType': 'TEXT',
'modelId': 'anthropic.claude-3-sonnet-20240229-v1:0',
'templateConfiguration': {
'text': {
'text': 'Create an engaging, click-worthy subject line for: {{email_content}}',
'inputVariables': [{'name': 'email_content'}]
}
},
'inferenceConfiguration': {
'text': {'maxTokens': 50, 'temperature': 0.7}
}
},
{
'name': 'variant-c',
'templateType': 'TEXT',
'modelId': 'anthropic.claude-3-haiku-20240307-v1:0',
'templateConfiguration': {
'text': {
'text': 'Write a concise, action-oriented subject line for: {{email_content}}',
'inputVariables': [{'name': 'email_content'}]
}
},
'inferenceConfiguration': {
'text': {'maxTokens': 50, 'temperature': 0.5}
}
}
]
)
print(f"Created multi-variant prompt: {response['id']}")
Testing Framework
import boto3
import random
import json
from datetime import datetime
class PromptABTester:
def __init__(self, prompt_id, region='us-east-1'):
self.bedrock_agent = boto3.client('bedrock-agent', region_name=region)
self.bedrock_runtime = boto3.client('bedrock-runtime', region_name=region)
self.prompt_id = prompt_id
self.results = []
def get_variants(self):
prompt = self.bedrock_agent.get_prompt(promptIdentifier=self.prompt_id)
return [v['name'] for v in prompt['variants']]
def test_variant(self, variant_name, variables, user_id=None):
# Get prompt
prompt = self.bedrock_agent.get_prompt(promptIdentifier=self.prompt_id)
# Find variant
variant = next(v for v in prompt['variants'] if v['name'] == variant_name)
# Substitute variables
template = variant['templateConfiguration']['text']['text']
for var_name, var_value in variables.items():
template = template.replace(f'{{{{{var_name}}}}}', str(var_value))
# Invoke model
model_id = variant['modelId']
inference_config = variant['inferenceConfiguration']['text']
response = self.bedrock_runtime.invoke_model(
modelId=model_id,
body=json.dumps({
'anthropic_version': 'bedrock-2023-05-31',
'messages': [{'role': 'user', 'content': template}],
'max_tokens': inference_config['maxTokens'],
'temperature': inference_config['temperature']
})
)
result = json.loads(response['body'].read())
output = result['content'][0]['text']
# Record test result
self.results.append({
'timestamp': datetime.now().isoformat(),
'variant': variant_name,
'user_id': user_id,
'input_variables': variables,
'output': output,
'model': model_id
})
return output
def random_test(self, variables, user_id=None):
"""Randomly select variant for testing"""
variants = self.get_variants()
selected_variant = random.choice(variants)
return self.test_variant(selected_variant, variables, user_id)
def analyze_results(self):
"""Analyze test results by variant"""
analysis = {}
for result in self.results:
variant = result['variant']
if variant not in analysis:
analysis[variant] = {
'count': 0,
'avg_output_length': 0,
'samples': []
}
analysis[variant]['count'] += 1
analysis[variant]['samples'].append(result['output'])
analysis[variant]['avg_output_length'] += len(result['output'])
# Calculate averages
for variant in analysis:
count = analysis[variant]['count']
analysis[variant]['avg_output_length'] /= count
return analysis
# Usage
tester = PromptABTester('prompt-12345')
# Run A/B test
for i in range(100):
result = tester.random_test(
variables={'email_content': f'Test email content {i}'},
user_id=f'user-{i}'
)
# Analyze
analysis = tester.analyze_results()
print(json.dumps(analysis, indent=2))
Prompt Engineering Best Practices
1. Clear Instructions
# Good: Specific, clear instructions
prompt = '''You are a financial analyst.
Task: Analyze the following quarterly earnings data and provide:
1. Revenue trends (% change YoY)
2. Key growth drivers
3. Risk factors
Data: {{financial_data}}
Format: Use bullet points. Keep analysis under 200 words.'''
# Bad: Vague, unclear
prompt = '''Analyze this: {{financial_data}}'''
2. Variable Naming Conventions
# Good: Descriptive variable names
inputVariables=[
{'name': 'customer_query'},
{'name': 'customer_purchase_history'},
{'name': 'max_response_words'}
]
# Bad: Ambiguous names
inputVariables=[
{'name': 'input'},
{'name': 'data'},
{'name': 'limit'}
]
3. Inference Configuration
# Creative tasks: Higher temperature
'inferenceConfiguration': {
'text': {
'maxTokens': 1000,
'temperature': 0.8, # More creative
'topP': 0.95
}
}
# Factual tasks: Lower temperature
'inferenceConfiguration': {
'text': {
'maxTokens': 500,
'temperature': 0.1, # More deterministic
'topP': 0.9
}
}
4. Stop Sequences
# Use stop sequences to control output length
'inferenceConfiguration': {
'text': {
'maxTokens': 1000,
'stopSequences': ['\n\n---', 'END_RESPONSE', '###']
}
}
Integration with Bedrock Flows
Using Prompts in Flows
import boto3
bedrock_agent = boto3.client('bedrock-agent', region_name='us-east-1')
# Create flow that uses managed prompt
flow_response = bedrock_agent.create_flow(
name='customer-support-flow',
executionRoleArn='arn:aws:iam::123456789012:role/BedrockFlowRole',
definition={
'nodes': [
{
'name': 'FlowInput',
'type': 'Input',
'outputs': [{'name': 'query', 'type': 'String'}]
},
{
'name': 'SupportPrompt',
'type': 'Prompt',
'configuration': {
'prompt': {
'sourceConfiguration': {
'resource': {
'promptArn': 'arn:aws:bedrock:us-east-1:123456789012:prompt/prompt-12345:2'
}
}
}
},
'inputs': [
{
'name': 'customer_query',
'expression': 'FlowInput.query'
},
{
'name': 'company_name',
'expression': '"Acme Corp"'
},
{
'name': 'max_words',
'expression': '150'
}
],
'outputs': [{'name': 'response', 'type': 'String'}]
},
{
'name': 'FlowOutput',
'type': 'Output',
'inputs': [
{
'name': 'response',
'expression': 'SupportPrompt.response'
}
]
}
],
'connections': [
{'source': 'FlowInput', 'target': 'SupportPrompt'},
{'source': 'SupportPrompt', 'target': 'FlowOutput'}
]
}
)
print(f"Created flow: {flow_response['id']}")
Related Skills
- bedrock-inference: Invoke foundation models directly
- bedrock-flows: Build visual AI workflows with prompts
- bedrock-agentcore: Create AI agents with managed prompts
- bedrock-knowledge-bases: RAG applications with prompt templates
- bedrock-guardrails: Apply safety policies to prompt outputs
- claude-advanced-tool-use: Advanced prompt patterns for tool use
- context-engineering: Optimize prompt context and token usage
- prompt-builder: Build effective prompts (meta-skill)
Complete Example: Production Prompt Catalog
import boto3
import json
from typing import Dict, List, Optional
class PromptCatalog:
"""Enterprise prompt catalog with versioning and testing"""
def __init__(self, region='us-east-1'):
self.bedrock_agent = boto3.client('bedrock-agent', region_name=region)
self.bedrock_runtime = boto3.client('bedrock-runtime', region_name=region)
self.catalog = {}
def create_prompt_template(
self,
name: str,
description: str,
template: str,
variables: List[str],
model_id: str = 'anthropic.claude-3-sonnet-20240229-v1:0',
max_tokens: int = 1000,
temperature: float = 0.7,
tags: Optional[Dict] = None
) -> str:
"""Create a new prompt template"""
response = self.bedrock_agent.create_prompt(
name=name,
description=description,
variants=[{
'name': 'default',
'templateType': 'TEXT',
'modelId': model_id,
'templateConfiguration': {
'text': {
'text': template,
'inputVariables': [{'name': var} for var in variables]
}
},
'inferenceConfiguration': {
'text': {
'maxTokens': max_tokens,
'temperature': temperature,
'topP': 0.9
}
}
}],
tags=tags or {}
)
prompt_id = response['id']
self.catalog[name] = prompt_id
return prompt_id
def version_prompt(self, name: str, description: str) -> str:
"""Create immutable version"""
prompt_id = self.catalog[name]
response = self.bedrock_agent.create_prompt_version(
promptIdentifier=prompt_id,
description=description
)
return response['version']
def get_prompt(self, name: str, version: Optional[str] = None) -> Dict:
"""Get prompt by name"""
prompt_id = self.catalog[name]
return self.bedrock_agent.get_prompt(
promptIdentifier=prompt_id,
promptVersion=version
) if version else self.bedrock_agent.get_prompt(promptIdentifier=prompt_id)
def list_catalog(self) -> List[Dict]:
"""List all prompts in catalog"""
response = self.bedrock_agent.list_prompts()
return response.get('promptSummaries', [])
# Usage
catalog = PromptCatalog(region='us-east-1')
# Create customer support prompt
support_id = catalog.create_prompt_template(
name='customer-support-v1',
description='Customer support response generator',
template='''You are a customer support agent for {{company_name}}.
Query: {{query}}
Provide a helpful, professional response in under {{max_words}} words.''',
variables=['company_name', 'query', 'max_words'],
max_tokens=500,
temperature=0.5,
tags={'Department': 'Support', 'Environment': 'Production'}
)
# Create version
version = catalog.version_prompt('customer-support-v1', 'Initial production release')
print(f"Created prompt: {support_id}")
print(f"Version: {version}")
# List catalog
prompts = catalog.list_catalog()
print(f"\nCatalog contains {len(prompts)} prompts")
Summary
Amazon Bedrock Prompt Management provides enterprise-grade prompt template capabilities:
- Centralized Management: Single source of truth for prompts
- Version Control: Track changes, rollback, staged deployment
- A/B Testing: Multi-variant testing for optimization
- Variable Substitution: Flexible templating system
- Flow Integration: Use prompts across Bedrock services
- Team Collaboration: Shared prompt catalog
- Production Ready: Immutable versions, tagging, monitoring
Use bedrock-prompts to standardize prompt engineering, enable A/B testing, and build reusable prompt libraries for production AI applications.