这十条实践适用于各种模型和任务。它们都不依赖于下一个模型版本可能就会失效的小技巧。每一条都附有简短的前后对比,让你直接在页面上看到改变。
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 条实践,并验证没有丢失任何要求。
接下来,请阅读这些实践旨在预防的提示词工程常见错误。