Bedrock 新工具:自动优化 Prompt + 多模型横评,调 Prompt 不用再靠感觉了

痛点

调 Prompt 这事,说实话全靠手感。

写个 Prompt 模板 → 跑几条数据看效果 → 觉得不对就改一改 → 再跑 → 来回折腾。运气好一上午搞定,运气不好折腾三天还在调。

更难受的是换模型的时候。好不容易在 Sonnet 上调好的 Prompt,换到 Haiku 效果就拉了。每个模型的"脾气"不一样,Prompt 又得重新调。

5 月 14 号,亚马逊云科技在 Bedrock 里发布了一个 Advanced Prompt Optimization 工具。思路是:你给模板和测试数据,系统自动帮你迭代优化 Prompt,而且可以同时对比 5 个模型

折腾了一天跑通,记录一下。

这东西怎么工作的

整体流程是这样的:

  1. 你提供 Prompt 模板(带变量的)
  2. 准备 测试数据集(JSONL 格式,包含输入和期望输出)
  3. 选择 评估方式(三种可选)
  4. 选择 目标模型(最多 5 个同时跑)
  5. 系统自动在 反馈循环 中迭代优化 Prompt
  6. 输出:优化后的 Prompt + 评估分数 + 成本估算 + 延迟数据

关键词是反馈循环——不是简单地改一次,而是多轮迭代。每轮根据评估结果调整 Prompt,直到收敛。

准备数据

Prompt 模板

就是你原来的 Prompt,但变量用占位符表示:

你是一个技术文章摘要生成器。

请阅读以下文章内容,生成一段 200 字以内的摘要。

要求:
- 保留核心技术观点
- 包含关键数据和结论
- 使用中文

文章内容:
{{article_content}}

测试数据集

JSONL 格式,每行一条:

{"article_content": "亚马逊云科技发布了新的...", "ground_truth": "亚马逊云科技近日发布..."}
{"article_content": "在构建分布式系统时...", "ground_truth": "分布式系统中的一致性..."}
{"article_content": "容器编排技术在过去...", "ground_truth": "容器编排从 Docker Compose..."}

ground_truth 是期望的输出,系统用它来评估 Prompt 效果。

建议:测试数据集至少准备 20-30 条,覆盖你的典型场景。太少的话优化可能过拟合。

数据集可以放 S3,也可以直接上传。支持多模态——PNG、JPG、PDF 都行。如果你的 Prompt 处理图片或文档,测试数据里可以直接带这些文件。

三种评估方式

这是最关键的部分。系统怎么判断一个 Prompt 好不好?三种方式可选:

方式一:Lambda 自定义评分

最灵活。你写一个 Lambda 函数,定义自己的评分逻辑:

import json

def lambda_handler(event, context):
    predicted = event["predicted_output"]
    ground_truth = event["ground_truth"]

    # 自定义评分逻辑
    score = 0.0

    # 检查长度
    if len(predicted) <= 200:
        score += 0.3

    # 检查关键词覆盖
    keywords = extract_keywords(ground_truth)
    covered = sum(1 for kw in keywords if kw in predicted)
    score += 0.7 * (covered / max(len(keywords), 1))

    return {
        "score": min(score, 1.0)
    }

def extract_keywords(text):
    # 简单的关键词提取
    words = text.replace(",", " ").replace("。", " ").split()
    return [w for w in words if len(w) >= 2]

方式二:LLM-as-Judge

用另一个 LLM 来评判。你提供评分 rubric:

评估标准:
1. 准确性(0-40分):摘要是否准确反映原文核心观点,无事实错误
2. 完整性(0-30分):是否涵盖关键数据和结论
3. 简洁性(0-30分):是否在 200 字以内,无冗余信息

总分 = 准确性 + 完整性 + 简洁性

系统会用 LLM 按你的 rubric 给每个输出打分。省事,但不如 Lambda 精确。

方式三:Steering Criteria

最简单的方式。用自然语言描述你想要什么:

优化目标:生成的摘要应该在 200 字以内,准确概括原文的核心技术观点和关键数据,语言简洁流畅。

系统自动把这段话转成评估逻辑。适合快速实验,不适合精细化调优。

跑优化

在控制台操作

  1. 打开 Bedrock 控制台 → Prompt Optimization
  2. 上传 Prompt 模板
  3. 关联数据集(上传或指定 S3 路径)
  4. 选择评估方式
  5. 选择目标模型(最多 5 个,比如同时跑 Sonnet、Haiku、Llama)
  6. 开始优化

用 SDK 操作

import boto3
import json

bedrock = boto3.client("bedrock", region_name="us-east-1")

response = bedrock.create_prompt_optimization_job(
    name="summarization-prompt-opt",
    promptTemplate={
        "text": "你是一个技术文章摘要生成器...\n\n文章内容:\n{{article_content}}"
    },
    datasetConfig={
        "s3Uri": "s3://my-bucket/prompt-opt/dataset.jsonl"
    },
    targetModels=[
        {"modelId": "anthropic.claude-sonnet-4-20250514"},
        {"modelId": "anthropic.claude-haiku-3-20240307"},
        {"modelId": "meta.llama3-1-70b-instruct-v1:0"}
    ],
    evaluationConfig={
        "type": "STEERING_CRITERIA",
        "criteria": "摘要应在 200 字内,准确概括核心技术观点。"
    }
)

job_id = response["jobId"]
print(f"优化任务已启动:{job_id}")

查看结果

result = bedrock.get_prompt_optimization_job(jobId=job_id)

for model_result in result["modelResults"]:
    print(f"模型:{model_result['modelId']}")
    print(f"评估分数:{model_result['score']}")
    print(f"延迟(p50):{model_result['latencyP50']}ms")
    print(f"成本估算:${model_result['estimatedCost']}")
    print(f"优化后 Prompt:\n{model_result['optimizedPrompt']}")
    print("---")

输出里有每个模型的:优化后的 Prompt、评估分数、延迟数据、成本估算。一目了然。

实际体验

我用文章摘要生成的场景跑了一下,30 条测试数据,对比 3 个模型:

发现 1:优化后的 Prompt 比我手写的长了不少——系统会加很多约束条件和示例。但效果确实好。

发现 2:不同模型适合的 Prompt 风格差异挺大。Sonnet 对简洁指令响应好,Haiku 需要更详细的说明。

发现 3:Lambda 评分方式最可控,但写评分函数本身也要花时间。Steering Criteria 适合第一轮快速筛选。

几个注意的点

  1. 数据质量决定上限:测试数据的 ground_truth 质量直接影响优化效果。垃圾进垃圾出。

  2. 多模态支持:如果你的 Prompt 处理图片或 PDF,测试数据集里可以直接带这些文件。JSONL 里用 S3 路径引用。

  3. S3 导入导出:大数据集建议放 S3。结果也可以导出到 S3,方便后续分析。

  4. 成本估算是估算:给的是参考值,实际使用可能因输入长度、输出长度不同而有差异。

  5. 不是一劳永逸:模型更新、业务场景变化后,建议定期重新跑优化。

参考链接

总的来说,这个工具把"调 Prompt"从手工活变成了工程化流程。尤其是多模型对比这个功能——不用再一个个模型手动测了。调 Prompt 终于可以用数据说话了。

posted @ 2026-05-18 11:34  亚马逊云开发者  阅读(17)  评论(0)    收藏  举报