基础知识

提示词工程最佳实践

写出更好的 AI 提示词、获得更可靠回答的 10 条提示词工程最佳实践,每条都附有前后对比示例。

译自英文原文。代码、提示词和模型输出保留英文。

这十条实践适用于各种模型和任务。它们都不依赖于下一个模型版本可能就会失效的小技巧。每一条都附有简短的前后对比,让你直接在页面上看到改变。

1. 把任务放在最前面

以一句祈使句开头。后面的一切都会被读作对这个任务的支撑。

  • 之前:I have a spreadsheet of expenses from last year.
  • 之后:Categorize the expenses below into travel, software, and office.

2. 明确范围、受众和篇幅

含糊的词会把决定权交给模型。请换成真实的值。

  • 之前:Write a short post about our new feature for users.
  • 之后:Write a 120-word announcement of scheduled exports for existing admins who already use manual exports.

3. 用数字表示大小

“几个”“简短”和“详细”在每次运行时含义都不同。数字加单位能让篇幅可预测。

  • 之前:Give me some ideas.
  • 之后:Give me 5 ideas, one sentence each.

4. 说明要做什么,而不只是要避免什么

一串禁令列出了你不想要的一切,却没有说你想要什么。把每条“不要”与你希望替代它的行为配成一对。

  • 之前:Don't be too formal. Don't use jargon.
  • 之后:Write in a conversational tone, using words a new customer would know.

5. 指定输出格式

说明结构;如果输出由机器读取,还要给出确切的 schema。当不应出现其他任何内容时,加上“只返回 JSON”。详见结构化输出提示词。

6. 把指令与输入分开

用清晰的分隔符(例如 XML 风格的标签)包裹文档、用户消息和变量。这样模型就能区分数据和指令,数据中的一句话也更不容易被当作命令执行。

Summarize the email in the tags below in 2 sentences.

<email>
{{email_body}}
</email>

7. 对需要判断的情形给出示例

当“好”比定义更容易展示时,放入两三个示例。示例要有差异,这样模型学到的是规律,而不是某个表面特征。参阅 few-shot 提示词。

8. 为长提示词设计结构

超过大约一段之后,就使用分节:任务、背景、要求、输出格式、输入。标题让模型更容易跟随提示词,也让人更能安全地编辑它。

9. 删除不会改变答案的内容

问候语、客套话和重复的指令只增加 token,不增加信息。重复甚至可能有害:当两句几乎相同的话略有差异时,模型必须判断你指的是哪一句。

  • 之前:Hi! Could you please make sure to really focus on accuracy? Please make sure to focus on accuracy.
  • 之后:Prioritize accuracy over completeness.

10. 用真实输入测试并保留结果

只有在用有代表性的输入运行过,并且弄清楚了失败原因之后,提示词才算完成。把这些输入保存为测试集,每次修改之后重新运行。参阅提示词评估。

提示词效果不佳时如何改善 AI 回答

按可能性从高到低逐一排查原因:

症状 可能的原因 修正
每次运行答案都不同 未指定大小或格式 添加数字和输出格式
回答泛泛 缺少背景 添加受众、领域和约束
忽略某条指令 冲突,或被埋在长段落中 消除冲突,移入列表
语气不对 语气描述含糊 给出语气的示例
编造内容 被问到未提供的事实 提供原文并要求引用
照做输入中的文字 输入未加分隔 用标签包裹输入

自动检查这些问题

其中许多实践无需运行模型就能检查。PromptFlowEngine 提示词分析器会标出缺少目标、含糊措辞、未量化的大小、只有否定式约束、缺少输出格式、未加分隔的变量和冗余内容,并把每条发现链接到带有修正示例的参考页面。提示词优化器会替你应用第 8 和第 9 条实践,并验证没有丢失任何要求。

接下来,请阅读这些实践旨在预防的提示词工程常见错误。