Bedrock Prompt 优化器升级:同时对比 5 个模型、自动跑评估反馈循环
上周接了个需求:把一套跑在 Claude 3.5 Sonnet 上的 prompt 迁移到 Claude Opus 4。
改了三天。每次改完都要手动跑一遍测试用例、对比输出、看有没有回归。20 个测试用例,每个手动跑两遍(旧模型 + 新模型),来回折腾 400 次 API 调用。
这种活现在有工具了。
Bedrock Advanced Prompt Optimization
亚马逊云科技 5 月 14 号发布了 Bedrock 高级 Prompt 优化器。核心卖点:你丢进去一个 prompt 模板 + 测试数据,它自动帮你优化,还能同时跑 5 个模型做横向对比。
不是那种"帮你改个措辞"的玩具。它跑的是完整的评估反馈循环:
你的 Prompt 模板 + 测试输入 + 标准答案
↓
[Prompt 优化器]
↓
┌─────────────────────────────┐
│ 优化 → 推理 → 评估 → 再优化 │
│ (循环多轮) │
└─────────────────────────────┘
↓
输出:优化后 Prompt + 评分 + 成本估算 + 延迟数据
解决什么问题
1. 模型迁移
你在 Claude 3.5 Sonnet 上调好的 prompt,换到 Nova Pro 或者 GPT-5.5 上大概率表现不一样。以前只能手动试。
现在:选 5 个目标模型,一键跑优化。输出每个模型的评分、成本、延迟。你看数据决定用哪个。
2. Prompt 调优
同一个模型上也能优化。你觉得输出不够好,丢进去标准答案让它自动调。
3. 多模态
支持图片和 PDF 作为输入。文档分析、图像理解的 prompt 也能优化。
怎么用
准备输入文件
一个 JSONL 文件,每行一个测试用例:
{
"version": "bedrock-2026-05-14",
"templateId": "extract-order-info",
"promptTemplate": "从以下邮件中提取订单号、金额和收件人信息。\n\n邮件内容:{{email_content}}\n\n请以JSON格式输出。",
"steeringCriteria": ["输出必须是合法JSON", "金额保留两位小数"],
"evaluationSamples": [
{
"inputVariables": [{"email_content": "感谢您的购买!订单号:ORD-2026-8834,金额:¥299.00,收件人:张三,地址:北京市朝阳区..."}],
"referenceResponse": "{\"order_id\": \"ORD-2026-8834\", \"amount\": 299.00, \"recipient\": \"张三\"}"
},
{
"inputVariables": [{"email_content": "订单确认:#A7721,商品:机械键盘x1,实付¥459.90(含运费),寄往:李四 上海市浦东新区..."}],
"referenceResponse": "{\"order_id\": \"A7721\", \"amount\": 459.90, \"recipient\": \"李四\"}"
}
]
}
关键字段
| 字段 | 作用 |
|---|---|
promptTemplate |
你的原始 prompt,变量用 {{}} 包裹 |
steeringCriteria |
约束条件(可选),优化器会尽量满足 |
evaluationSamples |
测试用例 + 标准答案 |
referenceResponse |
你期望的正确输出 |
评估指标三种选法
- 自然语言描述 — "输出必须是合法 JSON 且包含所有必填字段"
- LLM-as-Judge — 自定义 Judge Prompt + 指定 Judge 模型
- Lambda 函数 — 写代码做精确评估(正则匹配、JSON Schema 校验等)
# Lambda 评估函数示例
import json
def lambda_handler(event, context):
model_output = event['modelOutput']
reference = event['referenceResponse']
try:
output_json = json.loads(model_output)
ref_json = json.loads(reference)
except json.JSONDecodeError:
return {'score': 0.0, 'reason': 'Output is not valid JSON'}
required_keys = ['order_id', 'amount', 'recipient']
score = sum(1 for k in required_keys if k in output_json) / len(required_keys)
# 精确匹配加分
if output_json.get('order_id') == ref_json.get('order_id'):
score = min(1.0, score + 0.1)
return {'score': score, 'reason': f'Matched {score*100:.0f}% of fields'}
控制台操作
- 进 Bedrock 控制台 → Advanced Prompt Optimization
- 点 "Create prompt optimization"
- 选最多 5 个目标模型(比如 Claude Opus 4 + Nova Pro + GPT-5.5 + Llama 4 + Claude Sonnet 4)
- 上传 JSONL 文件或从 S3 导入
- 选评估方式
- 跑优化
SDK 调用
import boto3
bedrock = boto3.client('bedrock', region_name='us-east-1')
response = bedrock.create_prompt_optimization(
name='order-extraction-optimization',
inputDataConfig={
's3Uri': 's3://my-bucket/prompt-optimization/input.jsonl'
},
targetModelIds=[
'anthropic.claude-opus-4-v1:0',
'amazon.nova-pro-v1:0',
'openai.gpt-5-5',
'meta.llama-4-maverick-v1:0',
'anthropic.claude-sonnet-4-v1:0'
],
outputDataConfig={
's3Uri': 's3://my-bucket/prompt-optimization/output/'
}
)
job_id = response['optimizationJobId']
print(f"优化任务已创建: {job_id}")
输出结果
优化完成后你会拿到:
{
"results": [
{
"modelId": "anthropic.claude-opus-4-v1:0",
"originalScore": 0.72,
"optimizedScore": 0.94,
"improvement": "+30.5%",
"optimizedPrompt": "...(优化后的 prompt)...",
"estimatedCostPer1000": "$2.40",
"averageLatencyMs": 1850
},
{
"modelId": "amazon.nova-pro-v1:0",
"originalScore": 0.65,
"optimizedScore": 0.91,
"improvement": "+40%",
"optimizedPrompt": "...",
"estimatedCostPer1000": "$0.80",
"averageLatencyMs": 920
}
]
}
一目了然。Nova Pro 用优化后的 prompt 能达到 0.91 分,成本是 Opus 4 的 1/3,延迟快一倍。够不够用看业务需求。
实际场景
场景一:降本
你现在用 Claude Opus 4 跑文档分析,效果好但贵。加几个便宜模型进去(Nova Pro、Claude Sonnet 4),看优化后能不能达标。能的话直接切,成本降 50-70%。
场景二:模型升级
新模型出了想试试。但怕 prompt 不兼容导致回归。丢进去优化器,自动跑对比,有数据兜底。
场景三:多模态 prompt 优化
做 PDF 发票识别的 prompt,直接把测试 PDF 丢进去。优化器会调整 prompt 让模型更准确地提取信息。
{
"inputVariablesMultimodal": [
{
"invoice_image": {
"type": "PDF",
"s3Uri": "s3://my-bucket/test-invoices/invoice-001.pdf"
}
}
]
}
注意事项
- 测试用例质量决定优化效果 — 标准答案写得不准,优化方向就歪。建议 10-20 个高质量用例
- 成本 — 优化过程本身会产生推理费用(多轮循环 × 多模型),注意预算
- 不替代人工判断 — 评分高不代表上线没问题。优化完还是要人看一眼输出
- 区域 — 目前在 us-east-1、us-west-2 可用
和之前 Prompt Optimization 的区别
之前 Bedrock 就有基础的 prompt 优化(单模型、单轮改写)。这次升级的核心差异:
| 基础版 | 高级版 | |
|---|---|---|
| 模型数 | 1 个 | 最多 5 个同时 |
| 评估方式 | 无 | 支持 Lambda/LLM Judge/自然语言 |
| 反馈循环 | 无(一次性改写) | 多轮迭代优化 |
| 多模态 | 不支持 | 支持图片/PDF |
| 输出 | 优化后 prompt | prompt + 评分 + 成本 + 延迟 |
| 迁移场景 | 不支持 | 原生支持跨模型迁移 |
我的判断
这工具解决了真实痛点。Prompt 工程现在最花时间的不是"想出一个好 prompt",而是"验证这个 prompt 在各种边界情况下都能正常工作"。
自动化评估循环 + 多模型对比 + 成本数据,让决策有据可依。特别适合:
- 有大量 prompt 需要维护的团队
- 正在做模型迁移的项目
- 想降本但怕影响质量的场景
不适合随便写两句 prompt 的简单场景——那种直接试就行了,不需要跑优化流水线。
参考:

浙公网安备 33010602011771号