6 min read

Prompt 第 0 课:如何写出清晰、明确、结构化的 Prompt

本文内容源于博主在 2024 年 9 月对某企业内部培训的讲稿。与 LLM 高效沟通的能力正在成为一项必备技能,然而,很多人一开始就陷入各种技巧的学习中,却忽视了最根本的问题:如何与 LLM 建立有效的沟通。
这篇文章没有介绍 CoT、Few-Shot 等具体技巧的「术」,而是聚焦于更基础的「道」——如何写出清晰、明确、结构化的 Prompt。通过将 LLM 比作一位远程工作的聪明同事,文章深入浅出地解释了与 LLM 交互的核心原则。掌握这些原则,不仅能让你更好地运用各种提示词技巧,更能帮助你建立起与 AI 交互的正确认知框架,在这个 AI 时代游刃有余。

编写清晰、明确、结构化的 Prompt

高质量的 LLM 很聪明,就像我们在生活中面对一个很聪明的人一样,哪怕对方智商 230,如果我们无法清楚描述自己想要什么,那么对方一样无法快速有效的满足你的需求。

因此,无论是 OpenAI、Claude 等 LLM 厂商的官方指导,还是各种各样的 Prompt 课程,都会告知用户:给 LLM 以清晰、明确、结构化的 Prompt,是构建基于 LLM 应用的最基本的要素。

如何做到「清晰、明确」

Claude 在官方的提示工程指南中提到一个很好的比喻:

在与 Claude 互动时,将其视为一位才华横溢但非常新的员工(患有失忆症),需要明确的指示。像任何新员工一样,Claude 并不了解你的规范、风格、准则或首选工作方式。 你越精确地解释你想要什么,Claude 的回应就会越好。

在实际的 Prompt 设计的过程中,只要遵循这个原则,写出的 Prompt 基本可以满足「明确」的要求。

  1. Prompt 撰写能力基本上等同于你的沟通能力;
  2. 如果你描述不清楚任务,那么多半是因为还没想明白任务;
  3. 先想明白任务,做好拆分,再动手设计 Prompt。

在与 LLM 沟通的过程中,想象它是你的一名同事,但你们都是远程办公,只能通过电子邮件文字沟通,你希望向对方提一个需求,需要对方尽快将其实现。

本着「有效沟通」的原则,你如何将任务准确的描述与传达?

错误示例

这个需求很紧急,怎么实现我不管,参考资料自己找,明天上线辛苦了。

正确示例

任务概览、任务背景、任务详情、拆分后的任务1、拆分后的任务2、拆分后的任务3、参考资料、任务输出要求、任务截止时间。

如何做到「结构化」

为什么需要结构化

讨论如何做到结构化,首先我们先讨论,为什么建议与 LLM 交互的过程中,需要将 Prompt 保持结构化。

依然沿用前面的举例,将 LLM 视为你的同事,但你们都是远程办公,只能通过电子邮件文字沟通,你希望向对方提一个需求,需要对方尽快将其实现。

你已经理解了如何在沟通中保持清晰和明确,现在需要将任务落实到纸面,开始写邮件了。

想象一下,为什么我们在邮件中需要标题?为什么需要分段落?更甚一步,为什么需要标点符号?

人类在传统的文字写作中,逐渐发明出段落及标点符号,主要的目的就是增加内容的可读性。换句话说,段落及标点符号,将一篇文章从某种意义上实现了结构化,让读者可以快速方便的理解一篇文章的整体结构和细节结构,增强阅读效率及理解深度。

将这个概念落地到 LLM Prompt 领域,我们已知 Prompt 在内容的角度需要「清晰、明确」,那么「结构化」是实现「清晰、明确」的具体表现方式。

使用内容结构化语言

在传统的文档编辑软件(如 Microsoft Word)中,我们可以通过多种方式来结构化我们的文档,比如设置标题层级、调整文本颜色、改变字体大小、设置段落缩进和行距等。这些视觉和格式化的元素帮助我们清晰地传达信息的结构和重要性。然而,在与 LLM 交互的过程中,我们面临一个挑战:我们只能输入纯文本。换句话说,我们无法使用 Word,只能使用记事本。

这意味着我们需要一种替代方案,既能在纯文本环境中工作,又能有效地传达结构化信息。所以,我们需要使用结构化语言。

结构化语言是指使用特定的格式或语法来组织和呈现信息的方式,比如 JSON、HTML、XML、Markdown。

在 LLM Prompt 的场景中,我们一般使用 Markdown,结合 XML 辅助。

为什么是 MarkDown?

虽然 JSON、HTML 和 XML 都是优秀的结构化语言,但在与 LLM 交互的场景中,Markdown 具有以下优势:

  1. 可读性强:Markdown 语法简洁,即使不渲染也容易阅读,对人类和 LLM 都友好。
  2. 学习成本低:相比 HTML 和 XML,Markdown 的语法更简单,易于掌握。
  3. 灵活性高:Markdown 可以轻松地转换为其他格式,如 HTML。
  4. 广泛支持:许多 LLM 和相关工具都原生支持 Markdown。
  5. 轻量级:相比 JSON 和 XML,Markdown 的标记更少,减少了不必要的复杂性。
  6. 富文本支持:Markdown 支持各种富文本元素,如表格、代码块等,满足大多数结构化需求。
  7. 专注于内容:Markdown 让用户更专注于内容本身,而不是复杂的标记语法。

一句话总结:有的语言对机器更友好,有的语言对人类更友好,而 Markdown 在简洁性、可读性和功能性之间达到了一个很好的平衡,它既能满足结构化的要求,又不会因过于复杂的语法而分散注意力,使得人类和 LLM 都能更好地关注于内容本身。

Claude 官方提示工程指南:使用 XML 标签来构建你的提示

清晰提示的黄金法则

向同事展示你的提示,最好是对任务几乎没有背景的人,并要求他们按照指示操作。如果他们感到困惑,Claude 可能也会感到困惑。--《Claude 官方提示工程指南》

学习资源

LLM 厂商官方的提示工程指南是最好的学习资料,胜过绝大多数社交媒体、社群中所谓的「课程」