本文翻译自Anthorpic的博客《Best practices for prompt engineering》
原文地址:https://www.claude.com/blog/best-practices-for-prompt-engineering
上下文工程已成为与大语言模型合作中日益重要的组成部分,而提示词工程(Prompt engineering)则是其核心基石。
提示词工程是构建指令以从 AI 模型获得更好输出的艺术。它涉及到你如何组织查询、指定风格、提供上下文以及引导模型行为以实现你的目标。
模糊的指令与精心设计的提示词之间的区别,关系到泛泛的输出与精准符合你所需结果之间的差距。结构不良的提示词可能需要多次来回沟通来澄清意图,而设计良好的提示词则能让你一次到位。
为了帮助你入门,我们汇集了一些团队的最佳实践,包括旨在立竿见影地改善结果的实用方法。我们会从一些你现在就可以使用的简单习惯开始,然后扩展到适用于复杂项目的高级方法。
在最基本的层面上,提示词工程只是修改你传递给 LLM 的查询。通常,这仅仅是在你提出实际请求之前向查询中添加信息——但了解哪些信息是正确的共享信息,是设计出色且有效的提示词的秘密。
以下这些提示词工程技术构成了高效的 AI 交互的基础。坚持使用它们,可以立即看到响应质量的提升。
现代 AI 模型对清晰、明确的指令响应极佳。不要假设模型会推断出你的意图——直接说明。使用简单的语言,准确表达你的要求,避免歧义。
关键原则:准确告诉模型你想看到什么。如果你想要全面的输出,就提出要求。如果你需要特定功能,就列出来。像 Claude 这样的现代模型尤其受益于明确的指导。
例子:创建分析仪表板
模糊:“创建一个分析仪表板”
明确:“创建一个分析仪表板。包含尽可能多的相关功能和交互。超越基础,创建一个功能齐全的实现。”
第二个版本明确要求了全面的功能,并发出信号表示你希望模型“超水平发挥”。
最佳实践:
以直白的动词作为开头:“编写”、“分析”、“生成”、“创建”
跳过开场白,直接进入请求
说明你希望输出包含什么,而不只是处理什么
明确对质量和深度的期望
解释为什么某件事很重要,可以帮助 AI 模型更好地理解你的目标,并提供更有针对性的响应。这对于能够推理你底层目标的新型模型尤为有效。
例子:格式偏好
效果较差:“永远不要使用项目符号”
效果较好:“我更喜欢自然段落形式的回答,而不是项目符号,因为我觉得流畅的散文更容易阅读,也更具对话感。项目符号对于我的休闲学习风格来说显得太正式且像列表。”
第二个版本帮助模型理解规则背后的原因,从而使其在相关格式选择上做出更好的决策。
何时提供上下文:
解释输出的目的或受众
澄清为什么存在某些限制
描述输出将如何被使用
指明你正试图解决什么问题
提示词工程中的具体化意味着使用明确的准则和要求来构建指令。你对想要的东西描述得越具体,结果就越好。
例子:饮食计划
模糊:为地中海饮食创建一个饮食计划
具体:“为糖尿病前期管理设计一个地中海饮食计划。每日 1,800 卡路里,强调低升糖指数食物。列出早餐、午餐、晚餐和一份零食,并附带完整的营养成分明细。”
什么样才算足够具体的提示词?
包括:
清晰的限制(字数、格式、时间线)
相关的上下文(受众是谁,目标是什么)
期望的输出结构(表格、列表、段落)
任何要求或限制(饮食需求、预算限制、技术约束)
示例并不总是必需的,但在解释概念或演示特定格式时效果显著。这也称为单样本(one-shot)或少样本(few-shot)提示,示例通过展示而非讲述,澄清了仅通过描述难以表达的微妙要求。
现代模型需要特别注意:Claude 4.x 及类似的先进模型会非常仔细地关注示例中的细节。确保你的示例与你想要鼓励的行为一致,并尽量减少你想要避免的模式。
例子:文章摘要
无示例:“总结这篇文章”
使用示例:
```plaintext
这是我想要的摘要风格示例:
文章:[关于 AI 监管的文章链接]
摘要:欧盟通过了针对高风险系统的全面 AI 法案。关键条款包括透明度要求和人工监督授权。2026 年生效。
现在以同样的风格总结这篇文章:[你的新文章链接]
```
何时使用示例:
期望的格式更容易展示而非描述
你需要特定的语气或风格
任务涉及微妙的模式或约定
简单的指令未能产生一致的结果
专业提示:先从一个示例开始。如果输出仍然不符合需求,再添加更多示例。
明确允许 AI 表达不确定性,而不是猜测。这可以减少幻觉并提高可靠性。
示例:“分析这些财务数据并识别趋势。如果数据不足以得出结论,请说明,而不要进行推测。”
这个简单的添加通过允许模型承认局限性,使响应更加值得信赖。
以上核心技巧可以让你走得很远,但你仍可能遇到需要更复杂方法的情况。当你构建智能体解决方案、处理复杂的数据结构或需要分解多阶段问题时,高级提示词工程技术将大放异彩。
预填充(Prefilling)让你能替 AI 开始响应,从而引导格式、语气或结构。这种技术对于强制执行输出格式或跳过开场白特别有效。
何时使用预填充:
你需要 AI 输出 JSON、XML 或其他结构化格式
你想跳过对话式的开场白,直接进入内容
你需要维持特定的声音或角色
你想控制 AI 如何开始其响应
例子:强制执行 JSON 输出
如果没有预填充,Claude 可能会说:“这是你要求的 JSON:{...}”
使用预填充(API 使用示例):
```python
messages=[
{"role": "user", "content": "从该产品描述中提取名称和价格并存入 JSON。"},
{"role": "assistant", "content": "{"}
]
```
AI 将从左大括号继续,仅输出有效的 JSON。
注意:在聊天界面中,你可以通过非常明确的要求来近似实现这一点:“仅输出有效的 JSON,不要有开场白。以左大括号开始你的回答。”
思维链(CoT)提示涉及要求 AI 在回答之前进行逐步推理。这种技术有助于处理受益于结构化思考的复杂分析任务。
注意:Claude 提供了一个扩展思考功能,可以自动进行结构化推理。如果该功能可用,通常优于手动思维链提示。然而,了解手动 CoT 对于扩展思考不可用或当你需要审阅透明推理过程的情况仍然很有价值。
何时使用思维链:
扩展思考不可用(例如免费的 Claude.ai 计划)
你需要可以审阅的透明推理过程
任务需要多个分析步骤
你希望确保 AI 考虑了特定的因素
思维链有三种常见的实现方式:
基础思维链
只需在指令中添加“逐步思考”。
```plaintext
起草个性化电子邮件给捐赠者,请求为今年的 Care for Kids 项目捐款。
项目信息:
<program>
{{PROGRAM_DETAILS}}
</program>
捐赠者信息:
<donor>
{{DONOR_DETAILS}}
</donor>
在写邮件之前,请逐步思考。
```
引导式思维链
结构化你的提示词,提供特定的推理阶段。
```plaintext
在写邮件之前先进行思考。首先,思考基于该捐赠者的捐赠历史,什么样的信息可能吸引他们。然后,考虑 Care for Kids 项目的哪些方面会引起他们的共鸣。最后,根据你的分析编写个性化的捐赠者邮件。
```
结构化思维链
使用标签将推理与最终答案分开。
```plaintext
在编写邮件之前,在 <thinking> 标签中进行思考。首先,分析什么信息能吸引这位捐赠者。然后,识别相关的项目方面。最后,在 <email> 标签中编写个性化的捐赠者邮件。
```
注意:即使在有扩展思考的情况下,明确的 CoT 提示对于复杂任务仍然是有益的。这两种方法是互补的,而非互斥。
对于现代 AI 模型,有几种有效的方法来控制响应格式:
1、告诉 AI 该做“什么”,而不是“不”该做什么
不要用:“响应中不要使用 Markdown”
尝试用:“你的响应应该由流畅的散文段落组成”
2、使你的提示词风格与期望的输出相匹配
提示词中使用的格式风格可能会影响 AI 的响应风格。如果你不想要 Markdown 格式的输出,就减少提示词中的 Markdown。
3、明确格式偏好
对于详细的格式控制:
```plaintext
在撰写报告或分析时,请使用完整的段落和清晰、流畅的散文。使用标准的换行符进行组织。Markdown 主要保留用于行内代码、代码块和简单的标题。
除非你正在展示确实离散的项目(且列表格式是最佳选择),或者用户明确要求列表,否则不要使用有序或无序列表。
不要用项目符号列出项目,而是将它们自然地融入句子中。你的目标是编写易读且流畅的文本,自然地引导读者理解想法。
```
与之前的技术不同,提示词链式调用(Prompt chaining)无法在单个提示词中实现。链式调用将复杂任务分解为较小的顺序步骤,每个步骤都有独立的提示词。每个提示词处理一个阶段,其输出作为下一个指令的输入。
这种方法以延迟为代价换取更高的准确性,因为它使每个单独的任务变得更容易。通常这种技术会使用工作流或编程来实现,但你也可以在收到响应后手动提供后续提示词。
例子:研究摘要
第一个提示词:“总结这篇涵盖方法论、发现和临床意义的医学论文。”
第二个提示词:“审查上述摘要的准确性、清晰度和完整性。提供分级反馈。”
第三个提示词:“根据此反馈改进摘要:[来自第 2 步的反馈]”
每个阶段都通过集中的指令增加了精炼度。
何时使用提示词链式调用:
你有一个需要分解为步骤的复杂请求
你需要迭代优化
你正在进行多阶段分析
中间验证具有价值
单个提示词产生的结果不一致
你需要权衡:链式调用会增加延迟(意味着多次 API 调用),但通常会显著提高复杂任务的准确性和可靠性。
一些在早期 AI 模型中流行的提示词工程技术,对于 Claude 这样的模型来说已经不那么必要了。然而,你仍可能在旧文档中看到它们,或发现它们在特定情况下有用。
XML 标签曾是向提示词添加结构和清晰度的推荐方式,尤其是在合并大量数据时。虽然现代模型在没有 XML 标签的情况下也能很好地理解结构,但它们在特定情况下仍然有用。
例子:
```plaintext
<athlete_information>
- 身高:6'2"
- 体重:180 磅
- 目标:增肌
- 饮食限制:素食
</athlete_information>
根据上述运动员信息生成一份饮食计划。
```
XML 标签何时可能仍有帮助:
你正在处理混合了多种内容的极复杂提示词
你需要绝对确定内容的边界
你正在使用较旧的模型版本
现代替代方案:对于大多数用例,清晰的标题、空格和明确的语言(“使用下方的运动员信息……”)同样有效且开销更小(因为XML意味着更多的字符)。
角色提示(Role prompting)在组织查询时定义了专家形象和视角。虽然这可能有效,但现代模型足够先进,生硬的角色提示往往是不必要的。
例子:“你是一位财务顾问。分析这个投资组合……”
重要提示:不要过度限制角色。“你是一个乐于助人的助手”通常优于“你是一位享誉全球的专家,只说专业术语且永不犯错”。过于具体的角色可能会限制 AI 的实用性。
角色提示何时可能有帮助:
你需要在多个输出中保持一致的语气
你正在构建一个需要特定形象的应用程序
你希望为复杂主题设定专业领域的框架
现代替代方案:通常,明确说明你想要的视角更有效:“分析这个投资组合,侧重于风险承受能力和长期增长潜力”,而不是分配一个角色。
你现在已经分别了解了各项技术,但它们的真正力量在于你战略性地结合使用它们。提示词工程的艺术不在于使用每一种可用的技术,而在于为你的特定需求选择正确的组合。
结合多种技术的示例:
```less
从这份季度报告中提取关键财务指标,并以 JSON 格式呈现。
我需要这些数据用于自动化处理,因此关键在于你的响应必须仅包含有效的 JSON,没有任何开场白或解释。
使用此结构:
{
"revenue": "带有单位的数值",
"profit_margin": "百分比值",
"growth_rate": "百分比值"
}
如果报告中未明确说明任何指标,请使用 null 而不是猜测。
以左大括号开始你的响应:{
```
这个提示词结合了:
明确的指令(提取什么)
上下文(为什么格式很重要)
示例结构(展示格式)
允许表达不确定性(如果不确定则使用 null)
格式控制(以左大括号开始)
并非每个提示词都需要用到所有技术。这里我们提供了一个决策框架:
你的请求是否清晰明确?如果不是,先优化清晰度
任务是否简单?仅使用核心技术(具体、清晰、提供上下文)
任务是否需要特定格式?使用示例或预填充
任务是否复杂?考虑将其分解(链式调用)
是否需要推理?使用扩展思考(如果可用)或思维链
技术选择指南:

即使是意图良好的提示词也可能产生意想不到的结果。以下是一些常见问题及其解决方法:
问题:响应太泛 → 解决方法:增加具体性、示例或明确要求全面的输出。要求 AI “超越基础”。
问题:响应偏离主题或没抓到重点 → 解决方法:更加明确你的实际目标。提供关于你为什么要问的上下文。
问题:响应格式不统一 → 解决方法:添加示例(少样本)或使用预填充来控制响应的开头。
问题:任务太复杂,结果不可靠 → 解决方法:分解为多个提示词(链式调用)。每个提示词应该只做好一件事。
问题:AI 包含不必要的开场白 → 解决方法:使用预填充或明确要求:“跳过开场白,直接回答。”
问题:AI 编造信息 → 解决方法:明确允许在不确定时说“我不知道”。
问题:当你想要实现时,AI 却只建议更改 → 解决方法:明确动作:“更改这个函数”而不是“你能建议一些更改吗?”
专业提示:先从简单开始,仅在需要时增加复杂性。测试每次添加的内容,看它是否真的改善了结果。
从这些常见的坑中学习,以节省时间并改进你的提示词:
不要过度工程化:更长、更复杂的提示词并不总是更好。
不要忽略基础:如果你的核心提示词不清晰或模糊,高级技术也帮不上忙。
不要假设 AI 能读心:具体说明你想要什么。留出模糊空间会让 AI 有误解的余地。
不要一次使用所有技术:选择针对你特定挑战的技术。
不要忘记迭代:第一个提示词很少能完美运行。测试并精炼。
不要依赖过时的技术:对于现代模型,XML 标签和沉重的角色提示已经不那么必要了。从明确、清晰的指令开始。
实施高级提示词工程的挑战之一是,它通过额外的 Token 使用增加了上下文开销。示例、多个提示词、详细的指令——这些都会消耗 Token,而上下文管理本身就是一项技能。
请记住,只在有意义且理由充分时才使用提示词工程技术。有关如何有效管理上下文的全面指导,请查看我们关于上下文工程的博客文章。
上下文感知能力的提升:现代 AI 模型(包括 Claude 4.x)显著提高了上下文感知能力,这有助于解决模型难以平等关注长上下文所有部分的“迷失在中间”的历史问题。
为什么任务分割仍然有效:即使有了这些改进,将大型任务分解为较小的、离散的块仍然是一项有价值的技术——不是因为上下文限制,而是因为这有助于模型在非常具体的要求和范围内集中精力做到最好。一个具有明确边界的专注任务产生的质量,始终高于试图在单个提示词中实现多个目标。
策略:在处理长上下文时,清晰地组织你的信息,将最关键的细节放在开头或结尾。在处理复杂任务时,考虑将其分解为专注的子任务是否能提高每个组件的质量和可靠性。
提示词工程是一项技能,在你掌握它之前需要多次尝试。知道你是否做对的唯一方法就是测试并观察。第一步就是亲自尝试。你很快就能看到使用和不使用我们这里介绍的技术的查询之间的区别。
要真正磨练你的提示词工程技能,你需要客观地衡量提示词的效果。好消息是,这正是我们在 anthropic.skilljar.com 的提示词工程课程中涵盖的内容。
快速评估技巧:
输出是否符合你的特定要求?
你是通过一次尝试获得结果,还是需要多次迭代?
多次尝试的格式是否保持一致?
你是否避免了上面列出的常见错误?
提示词工程最终是关于沟通的:使用能帮助 AI 最清晰地理解你意图的语言。从本指南早期介绍的核心技术开始,坚持使用它们,直到它们成为你的第二天性。只有当高级技术能解决特定问题时,才将其层叠进来。
请记住:最好的提示词不一定是最长或最复杂的。它是那个能以最少的必要结构可靠实现你目标的提示词。随着你的练习,你会对哪些技术适合哪些情况产生直觉。
向上下文工程的转变并没有降低提示词工程的重要性。事实上,提示词工程是上下文工程中一个基础的构建模块。每一个精心设计的提示词都会成为塑造 AI 行为的更广泛上下文的一部分,与对话历史、附件文件和系统指令协同工作,从而创造更好的结果。