AI TOOLS

EP03. "Prompt Engineering 核心技巧:从 2.3 分改到 7.8 分"

首页 › AI 工具 › Claude · Developer and Platform · Amazon Bedrock · EP03
约 19 分钟· #EP03#Claude#Amazon Bedrock
🔒 登录后可标记已读
  • Prompt engineering 不是「灵感突然来了改一改」,而是一套可重复的循环:定目标 → 写初版 prompt → 跑评测拿分数 → 套一个技巧改进 → 再评测确认真的变好
  • 课程用同一个案例贯穿全程——「根据身高体重目标和饮食限制生成一日餐单」——初版 prompt 只拿 2.3 分(满分 10),逐个套用技巧后一路改到 7.86 分,每一步的分数变化都摆出来给你看
  • 四个技巧依序是:说清楚、说具体、用 XML 标签分隔结构、给例子(one-shot/multi-shot)——不是随便选一个,是有顺序的:先把指令说清楚,才谈得上进一步细化
  • 初版打分低不代表 prompt 没救,那本来就是用来当基准(baseline)的起点,不用因为分数低就气馁
  • 前置知识:EP02 的评测 pipeline(dataset、grader、run_eval 那一套)

重点内容


迭代循环:定目标 → 写初版 → 评测 → 套技巧 → 再评测

Prompt engineering 就是把一个已经写好的 prompt,透过系统化手法改到输出更可靠、质量更高。整个过程是一个循环:

  1. 定清楚这个 prompt 要达成什么目标
  2. 写一版最基础的 prompt
  3. 跑评测,拿到一个客观分数
  4. 套用一个 prompt engineering 技巧
  5. 重新评测,确认分数真的往上走

案例贯穿全程:给一位运动员,根据身高(height)、体重(weight)、目标(goal)、饮食限制(restrictions)生成一份一日餐单(meal plan)。


用 PromptEvaluator 搭建评测管道

课程把 EP02 讲的评测流程包成一个 PromptEvaluator 类,内建并发支持:

evaluator = PromptEvaluator(max_concurrent_tasks=5)

💡 建议一开始用比较低的并发数(比如 3),避免触发 API 的 rate limit,之后再照自己的额度往上调。

生成测试数据集,要给三样东西:任务描述、输入变量说明、要生成几条:

dataset = evaluator.generate_dataset(
    task_description="Write a compact, concise 1 day meal plan for a single athlete",
    prompt_inputs_spec={
        "height": "Athlete's height in cm",
        "weight": "Athlete's weight in kg",
        "goal": "Goal of the athlete",
        "restrictions": "Dietary restrictions of the athlete"
    },
    num_cases=3
)

初版 prompt(run_prompt 接收测试用例的输入,回传 Claude 的回答):

def run_prompt(prompt_inputs):
    prompt = f"""
    What should this person eat?

    - Height: {prompt_inputs["height"]}
    - Weight: {prompt_inputs["weight"]}
    - Goal: {prompt_inputs["goal"]}
    - Dietary restrictions: {prompt_inputs["restrictions"]}
    """

    messages = []
    add_user_message(messages, prompt)
    return chat(messages)

跑评测时可以额外给一段 extra_criteria,告诉 grader 该按什么标准打分:

results = evaluator.run_evaluation(
    run_prompt_function=run_prompt,
    dataset_file="dataset.json",
    extra_criteria="""
    The output should include:
    - Daily caloric total
    - Macronutrient breakdown
    - Meals with exact foods, portions, and timing
    """
)

跑完会生成一份 output.html,浏览器打开能看到每条测试用例的分数、评分理由、Claude 实际生成的内容。初版这个「What should this person eat?」的粗糙 prompt 只拿到 2.3 分——这就是接下来每个技巧要挑战的基准线。


技巧一:说清楚、说直接(Being Clear and Direct)

📌 prompt 的第一句话是整个请求里最重要的部分,后面所有指令都是建立在这句话之上的。

说清楚:

  • 用任何人都看得懂的简单语言
  • 直接说清楚要什么,不用绕弯
  • 开头就是一句直白的任务描述

例如把含糊的「关于太阳能板的一些想法」换成「Write three paragraphs about how solar panels work」。

说直接:

  • 用「指令」而不是「问句」
  • 开头用动词:Write / Create / Generate

例如把「I was reading about renewable energy and geothermal energy sounds neat. What countries use it?」换成「Identify three countries that use geothermal energy. Include generation stats for each.」

套到餐单案例:「What should this person eat?」改成:

Generate a one-day meal plan for an athlete that meets their dietary restrictions.

这句话讲清楚了动作(generate)、要产出什么(meal plan)、关键限制(一天、针对运动员、要符合饮食限制)。

结果:2.3 → 3.92 分——光是把开头这句话说清楚、说直接,就有明显提升。

💡 核心心法:把 Claude 当成一个有能力的助理,给它清楚的方向,而不是丢一句含糊的话逼它自己去猜。


技巧二:说具体(Being Specific)

给具体的指引,能把输出往你要的方向收拢,而不是任由 Claude 自由发挥。指引分两种:

Quality guidelines(质量准则)——控制输出「长什么样」:

  • 长度限制(例:1000 字以内)
  • 结构要求(例:要有一段明确揭露天赋的情节)
  • 内容规格(例:要包含配角)

Process steps(过程步骤)——控制 Claude「怎么想出这个输出」,引导它一步步系统化思考:

  1. 先想 3 个能制造戏剧张力的天赋
  2. 挑出最有戏的那一个
  3. 列出揭露这个天赋的关键场景大纲
  4. 再想 3 种能加强这段揭露戏剧效果的配角类型

套到餐单案例,加上 6 条 quality guidelines:

Generate a one-day meal plan for an athlete that meets their dietary restrictions.

- Height: {prompt_inputs["height"]}
- Weight: {prompt_inputs["weight"]}
- Goal: {prompt_inputs["goal"]}
- Dietary restrictions: {prompt_inputs["restrictions"]}

Guidelines:
1. Include accurate daily calorie amount
2. Show protein, fat, and carb amounts
3. Specify when to eat each meal
4. Use only foods that fit restrictions
5. List all portion sizes in grams
6. Keep budget-friendly if mentioned

结果:3.92 → 7.86 分(几乎翻倍);改用 process steps 的版本单独测得 7.3 分,同样有效但没有 quality guidelines 这版高。

📌 什么时候该加 process steps:排查疑难问题、需要做决策、需要批判性思考、需要顾及多个角度的场景。例如分析「销售额下滑 30%」这种问题,要求 Claude 依序检查市场状况、个人表现、组织变动、客户反馈等多个角度,能避免它太早下结论。


技巧三:用 XML 标签分隔结构

内容一多,Claude 会分不清哪几段文字是一组、各自是什么用途。XML 标签就是最直接的分隔手法,尤其是塞进大量数据的时候。

举例:20 页的销售记录如果没有清楚的边界,Claude 没办法轻易分清「你的指令」和「要分析的数据」在哪里断开。用标签包起来就没这个问题:

<sales_records>
{sales_records}
</sales_records>

💡 标签名不用符合正式 XML 规范,用 sales_records、data、records 这类描述性名字就行,而且名字越具体,效果通常越好。

另一个例子:区分「要调试的代码」和「参考文档」,不加标签容易混在一起看不清边界:

<my_code>
from datavortex import Pipeline, DataSource

def process_data(input_file, output_file):
pipeline = Pipeline()
source = DataSource.from_csv(input_file)
</my_code>

<docs>
# Creating a data source from data vortex
csv_source = DataSource.from_csv("data.csv")
</docs>

加了标签之后,Claude 能清楚分辨哪段是要修的代码、哪段是用来指导怎么修的文档。

套到餐单案例,就算是像下面这样不长的插值内容,也建议包起来:

<athlete_information>
- Height: {prompt_inputs["height"]}
- Weight: {prompt_inputs["weight"]}
- Goal: {prompt_inputs["goal"]}
- Dietary restrictions: {prompt_inputs["restrictions"]}
</athlete_information>

这样明确告诉 Claude:这一段是外部数据,是用来支撑生成餐单的信息,不是指令本身。


方法怎么选:什么时候该加 XML 标签

场景要不要用 XML 标签
插入大段上下文/数据要——不然 Claude 分不清指令跟数据的边界
prompt 里混了好几种不同类型的内容要——各自包起来避免混淆
需要强调某一段的边界要
插值内容可能被误认成指令的一部分要
prompt 本身很简单、内容量很少效果不明显,加不加都可以

技巧四:给例子(One-shot / Multi-shot)

给 Claude 「输入 → 理想输出」的范例,直接示范期望的行为,尤其适合抓边界情况。课程用情绪分析(sentiment analysis)示范:一条推文「Yeah, sure, that was the best movie I've seen since 'Plan 9 from Outer Space'」字面看像正面,实际上因为提到的是一部公认的烂片,其实是反讽的负面评价——这种反讽单靠指令很难讲清楚,给个例子最直接。

结构要点:

  • 清楚的引导句:「Here is a example input with an ideal response」
  • 用 <sample_input> / <ideal_output> 这组 XML 标签包住范例
  • 针对反讽这类边界情况,给具体例子并加说明:

Be especially careful with tweets that contain sarcasm.
For example:
<sample_input>
Oh yeah, I really needed a flight delay tonight! Excellent!
</sample_input>
<ideal_output>
Negative
</ideal_output>

什么时候该用例子:抓边界情况、定义复杂的输出格式(比如特定结构的 JSON)、示范什么叫「好」的输出。

去哪里找好例子:直接翻评测报告里分数最高的输出(理想是拿到满分或接近满分的那几条),把输入和输出原样复制过来当范例。

如果好在哪里不是一眼就能看出来,可以在例子后面补一句说明:

<ideal_output>
[Your example output here]
</ideal_output>

This example meal plan is well-structured, provides detailed information on food
choices and quantities, and aligns with the athlete's goals and restrictions.


学完你会

  • ✅ 用「定目标 → 写初版 → 评测 → 套技巧 → 再评测」的循环系统化改进 prompt,不再靠感觉判断好坏
  • ✅ 依序用「说清楚说直接 → 加具体准则/步骤 → XML 标签分隔 → 给范例」四个技巧,一步步把评测分数往上推
  • ✅ 知道范例该去哪里找(评测报告里的高分输出),以及什么时候该给 quality guidelines、什么时候该给 process steps

Sources

官方文档:

  1. Claude with Amazon Bedrock(Claude Academy 课程)— https://academy.claude.com/courses/claude-with-amazon-bedrock