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 你期望的正确输出

评估指标三种选法

  1. 自然语言描述 — "输出必须是合法 JSON 且包含所有必填字段"
  2. LLM-as-Judge — 自定义 Judge Prompt + 指定 Judge 模型
  3. 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'}

控制台操作

  1. 进 Bedrock 控制台 → Advanced Prompt Optimization
  2. 点 "Create prompt optimization"
  3. 选最多 5 个目标模型(比如 Claude Opus 4 + Nova Pro + GPT-5.5 + Llama 4 + Claude Sonnet 4)
  4. 上传 JSONL 文件或从 S3 导入
  5. 选评估方式
  6. 跑优化

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"
      }
    }
  ]
}

注意事项

  1. 测试用例质量决定优化效果 — 标准答案写得不准,优化方向就歪。建议 10-20 个高质量用例
  2. 成本 — 优化过程本身会产生推理费用(多轮循环 × 多模型),注意预算
  3. 不替代人工判断 — 评分高不代表上线没问题。优化完还是要人看一眼输出
  4. 区域 — 目前在 us-east-1、us-west-2 可用

和之前 Prompt Optimization 的区别

之前 Bedrock 就有基础的 prompt 优化(单模型、单轮改写)。这次升级的核心差异:

基础版 高级版
模型数 1 个 最多 5 个同时
评估方式 支持 Lambda/LLM Judge/自然语言
反馈循环 无(一次性改写) 多轮迭代优化
多模态 不支持 支持图片/PDF
输出 优化后 prompt prompt + 评分 + 成本 + 延迟
迁移场景 不支持 原生支持跨模型迁移

我的判断

这工具解决了真实痛点。Prompt 工程现在最花时间的不是"想出一个好 prompt",而是"验证这个 prompt 在各种边界情况下都能正常工作"。

自动化评估循环 + 多模型对比 + 成本数据,让决策有据可依。特别适合:

  • 有大量 prompt 需要维护的团队
  • 正在做模型迁移的项目
  • 想降本但怕影响质量的场景

不适合随便写两句 prompt 的简单场景——那种直接试就行了,不需要跑优化流水线。


参考:

posted @ 2026-05-20 23:30  亚马逊云开发者  阅读(4)  评论(0)    收藏  举报