AI TOOLS

EP03. "Prompt Engineering 核心技巧:清晰直接、具体化与 XML 结构"

首页 › AI 工具 › Claude · Developer and Platform · Google Vertex AI · EP03
约 10 分钟· #EP03#Claude#Google Vertex AI
🔒 登录后可标记已读
  • Prompt engineering 不是玄学,是一个能反复跑的循环:定目标 → 写草稿 → 拿评测数据打分 → 套一个技巧改一版 → 再评测确认真的有进步——跟 EP02 的评测 pipeline 是同一套东西,这篇讲的是「改哪里」
  • 课程用同一个「帮运动员生成一天的饮食计划」prompt 全程示范,从 2.32 分(写得含糊)一路改到 3.92 分(写清楚直接)、再到 7.86 分(加上具体指引)——每一步改动都有分数验证,不是凭感觉
  • 一次只改一个地方再重新评测,才知道这个改动到底有没有用,不要一次把好几个技巧全塞进去,说不清是哪个起了作用
  • 评测时并发请求先设低一点(1-3 个),避免撞到 API 的 rate limit
  • 前置知识:EP02 的评测 pipeline(跑分、比较改动前后分数)

重点内容


循环怎么跑:五步

  1. 定义目标:搞清楚这个 prompt 到底要做到什么
  2. 写初版草稿:先有一个能跑的基础版本
  3. 拿评测标准测试:用 EP02 的评测 pipeline 量出目前分数
  4. 套改进技巧:用具体手法(下面几节)改善输出
  5. 验证有没有真的变好:重新评测,对比改动前后的分数

反复跑这个循环,直到分数达到满意的水平为止。

📌 一份好的评测框架要具备三件事:测试数据集要贴近真实使用场景、打分标准要前后一致、进度要每一版都记录下来,方便回头比较。


定评测标准:具体到能打分

以「生成运动员一日饮食计划」为例,评测标准要写清楚输出应该包含什么,例如:

  • 全天总卡路里
  • 三大营养素(蛋白质/碳水/脂肪)的比例
  • 每一餐的份量和用餐时间

💡 一开始拿到很低的分数(比如 2.3/10)是件好事——它证明了后面每一步改动能带来可衡量的进步,不用靠瞎猜。


技巧一:清晰直接(Clear and Direct)

📌 Prompt 的第一句话是整个请求里最重要的部分。

清晰(Clarity):用直白的语言,不要含糊。例如别写「我想知道那些人们装在屋顶上、靠太阳发电的东西」,直接写「写三段介绍太阳能板怎么运作」。

直接(Directness):用祈使句/动作动词,不要用疑问句。例如把「哪些国家用地热能?」改成「列出三个使用地热能的国家,附上各自的发电数据。」

饮食计划的例子:

  • 改前:「这个人该吃什么?」
  • 改后:Generate a one-day meal plan for an athlete that meets their dietary restrictions.

改后的版本清楚交代了三件事:动作(生成)、产出物(饮食计划)、关键限制(一天、运动员、饮食限制)。

📌 光是把开头这句话改清楚直接,评测分数就从 2.32 涨到 3.92。


技巧二:具体化(Being Specific)

比起含糊的要求,给 Claude 明确的指引或步骤,能让它更准确地朝你要的输出方向走。指引分两种:

质量指引(Quality Guidelines):规定输出该有的属性——长度限制、结构要求、内容规格。饮食计划例子里包括:准确的卡路里数字、营养素占比、用餐时间、以克为单位的份量、预算考量。

流程步骤(Process Steps):引导 Claude 的思考顺序,例如写小说角色设定时:

Brainstorm 3 talents that would create dramatic tension.
Pick the most interesting talent.
Outline a pivotal scene.
Brainstorm 3 supporting character types.

📌 质量指引几乎任何场景都适用;流程步骤特别适合复杂问题排查、决策判断、批判性思考这类需要多角度分析的任务。

💡 加上具体指引后,饮食计划 prompt 的评测分数从 3.92 涨到 7.86,几乎翻倍——具体化不是在「微观管理」AI,而是替它把成功的条件铺好。


技巧三:用 XML 标签建立结构

Prompt 里塞了大量内容时,Claude 有时会分不清哪几段文字该归在一起——没有清楚的边界,Claude 可能分不清哪部分是指令、哪部分是数据。

自定义 XML 标签能当容器,把 prompt 里不同性质的部分分隔开,标签名称本身就该说明这段内容是什么,例如用 <sales_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>

饮食计划例子,把运动员的资料包成一组:

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

📌 XML 标签对「指令 + 数据 + 范例混在一起」的复杂 prompt 特别有用,能帮 Claude 分清楚各部分之间的关系。


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

给 Claude 看几组「输入 → 期望输出」的示范配对,比单纯用文字描述规则更有效——例子是用「示范」而不是「讲道理」在教 Claude。

典型场景:讽刺语气的情感分类

像 "Yeah, sure, that was the best movie I've seen since 'Plan 9 from Outer Space'" 这类反讽推文,Claude 单靠字面很容易判断错方向(误判成正面),需要靠范例才能学会识别这种反讽。

推荐用 XML 标签包住范例,结构清楚:

<sample_input>
[范例输入]
</sample_input>
<ideal_output>
[期望输出]
</ideal_output>

针对边界情况给范例:

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>


方法怎么选

做法适合场景
用 XML 标签包住范例结构清楚、Claude 容易分清哪段是范例哪段是指令
先给一个范例,不够再加不用一开始就堆一大堆例子,按评测结果决定要不要加
针对性地挑「Claude 容易出错的边界情况」给范例比给一堆普通例子更有效,比如反讽语气这种模型天生容易判断错的场景
范例里附带「为什么这样判断」的理由帮 Claude 理解规则背后的逻辑,不只是死记这一条

调整范例数量和内容时,同样要照评测结果迭代,不是凭直觉加到「感觉够了」为止。

Sources

官方文档:

  1. Claude with Google Cloud's Vertex AI(Claude Academy 课程)— https://academy.claude.com/courses/claude-with-google-cloud-s-vertex-ai