提示词工程 (Prompt Engineering) 基础

2025年1月7日

ChatGPT 教學專書
不僅教你 ChatGPT 指令,更帶你實作出創新應用!前往了解

谈到开发生成式 AI 产品,相信多数人前几个会想到的名词中,多半会有提示词工程 (prompt engineering)。所谓的提示词 (prompt) 如其名,代表着对 AI 模型的一种提示,让人能借由提示来把模型最好的回应引出来。

给定同样的大型语言模型,高品质的提示词与一般的提示词,会有很不同的效果。对此,在这篇文章中,我们会来探讨可以如何透过提示词工程,协助开发出更好的生成式 AI 产品。

提示词也能是工程吗?

在往下深谈提示词工程前,相信有些读者会有「提示词也能被当做工程吗」的疑问。毕竟很多人对提示词的使用印象,就是按照一些常见的原则,然后下完提示词后得到来自 AI 模型的回答,这样为什么会被称为工程呢?

之所以提示词工程能加上工程这两个字,甚至许多公司会愿意花大钱找提示词工程师 (例如最有名的 Anthropic 提示词工程师的年薪超过千万台币),是因为如同工程师在解决问题时,需要有系统且有方法,提示词工程师也会透过工具,以及试误 (trial and error) 与迭代 (iteration),从过程中去找出最理想的提示词。

以 Anthropic 的提示词工程师职缺描述来看,可以看到其中一项要求是交付、测试,与纪录最佳实践 (Discover, test, and document best practices)。从抽象的角度来看,这与其他工程师在做的事情是很相似的。都是需要先针对需求深入理解,然后提出相对应的解决方案,最后从解决问题中创造价值,并且记录下最佳实践。

企业级提示词 (enterprise prompting) 的不同之处

进一步说,企业之所以愿意花钱聘请专门的提示词工程师,是因为企业级应用所需要的提示词,与一般使用者平常在用 ChatGPT 或 Claude 这类应用有所不同。假如是一般的 AI 聊天机器人使用者,多半可以在使用时,自行调整提示词。换句话说,假如今天某个输出的格式不符合预期,可以直接换成另一个提示词,然后再试一次。

但是企业级应用,或者说假如今天是要打造一个放上线的产品,就没办法这样。举例来说,目前市场上有许多 AI 履历修改工具,让使用者可以简单上传自己的履历后,得到 AI 的回馈;然而,这时如果解析完履历后给的回馈品质不好,使用者因为只能上传履历,不能像用 ChatGPT 一样自己进一步调整,因此当收到品质不好的成果,使用者只会觉得这个产品没帮助,然后就流失掉。

又或者现在有些 AI 履历修改工具,不仅会给回馈,还能做到直接帮忙输出一个新的版本的履历。想要这样做,可能需要 AI 在修改完后回传某个特定格式 (例如 JSON 格式),然后再由伺服器根据该格式,套到某个履历模板后输出。在这种情况下,假如 AI 模型没有按照预期的格式输出,可能会导致伺服器无法处理,导致无法输出修改后的履历,那也会让使用者觉得产品不好,然后就流失掉。

对比起一般使用者,在用 AI 聊天机器人时,如果没按照预期输出,可能骂一声后换个提示词,然后继续用;企业级的应用不能这样,所以企业级的提示词需要试到非常稳定,各种输入都能处理才行,这也是提示词工程师的价值所在。

更进一步说来说,随着模型的演进、产品的演进,提示词也需要与时具进,这需要有专门的人来做 (如果是由软体工程师来做,那工程师本身也需要不断精进相关知识),因此对企业来说,专门的提示词工程师有其存在之必要。

如何为 AI 产品下好提示词?

在了解完企业级产品的提示词,与一般自己在使用 AI 助手的区别后,接着我们来谈在打造 AI 产品时,可以如何下好提示词。

透过系统讯息设定角色

假如过去你已经有在使用 ChatGPT 或 Claude 这类 AI 助手,相信在读提示词相关的内容,可能有读过可以透过设定角色,来让 AI 模型的回应更加贴近某个角色的回答。举例来说,同样是做资料分析,从商业分析师的角度来分析,会跟产品经理的分析角度有所区别,所以预先设定好角色,会让模型的回答更贴近预期。

不过从开发产品的角度看,应该要尽可能做到,让使用者不用做这件事。换句话说,产品本身就要把这件事情给做掉。举例来说,假如现在使用 Cursor 或 Windsurf 等 AI 驱动的 IDE,在与 AI 对话时,不需用前面加上「请扮演一个资深软体工程师」这种角色设定,因为 Cursor 或 Windsurf 已经把这件事做掉。

不过,具体要怎么做呢? 可以透过系统讯息 (system message) 来做到。目前主流的模型,例如 ChatGPT、Claude 以及 Gemini 都有支援这个设定。

举例来说,在 Claude 的文件当中有以下的范例

client.messages.create(
    model="claude-3-5-sonnet-20241022",
    max_tokens=2048,
    system="You are a seasoned data scientist at a Fortune 500 company.", # <-- role prompt
    messages=[
        {"role": "user", "content": "Analyze this dataset for anomalies: <dataset>{{DATASET}}</dataset>"}
    ]
)

可以在这个范例看到,在系统讯息 (system) 当中,传入了 You are a seasoned data scientist at a Fortune 500 company,就先让模型进入财星五百大资料科学家的角色。这会让后面的回答角度,更往这个方向走。

清晰明确

除了设定角色外,清晰也是提示词能否达到预期效果的关键之一。甚至目前社群多数提示词工程师,普遍认为清晰是最重要的关键。先前 Anthropic 的提示词工程师就有在一场对谈讲到,比起让模型进入某个角色,在他的经验当中,能否给足够清晰的提示,更常是影响回覆品质的关键。

要做到清晰,首先得知道目标是什么,然后具体的描述出来。

除此之外,对于预期的输出结果,需要足够明确。举例来说,假如希望模型「简短回答」,可以在提示词中加上「请简短回答」;然而,简短回答是多短? 同样的回覆,有些人可能觉得太长,同时可能有另一些人觉得太短,因此只用「简短」这个词,可能也会不够明确,这时可以做的是给一个具体的数字。

当然,对于某些应用,具体的回覆数字该在什么范围,可能不是那么重要;但对于另一些应用来说,可能会相对重要。举例来说,假如要做 AI 履历产生器,为了确保履历的每个列点数字不会过长,精确要求 AI 的输出就会相对重要一些。在这种情境下,就不要只是说简短,而是要直接给数字,例如「每个列点使用少于 105 个字元」。

前史丹佛大学教授,同时为 DeepLearning.AI 的创办人吴恩达,先前就分享在 AI 时代的产品开发,核心关键是不能够模糊 (vague)。他提到假如要 AI 模型协助打造一个「可以回答跟使用者帐号资讯相关问题的聊天机器人」这样的描述就很模糊。当模糊、能够诠释的空间变大,就可能导致 AI 模型产出看似不错,但实际完全不符合预期的成果。

读到这边你可能会问「如何判断自己写的提示词够不够清晰明确?」,一个简单的做法,是当你写下提示词后,把提示词给一个对该领域不太熟的人看 (例如别的部门的人),然后问对方假如要根据该提示词去完成任务,能不能做到? 如果没办法的话,是有哪些是不够清楚的? 透过这个做法,可以去补上那些可能你本来觉得很清楚,但其实仍有许多模糊不清的描述。

阅读更多

如果你对「提示词工程」这主题感兴趣,我们在 E+ 有更深入的讨论。有兴趣的读者,欢迎加入  E+ 成长计划。我们在 E+ 有更深入的内容,谈到更多能下好提示词的原则与方法,例如如何让模型思考 (CoT)、如何有效迭代提示词 (iteration) 等。

本文为 E+ 成长计划的深度内容,截取段落开放免费阅读。欢迎加入 E+ 成长计划阅读完整版本 (点此了解 E+ 的详细介绍)。

🧵 如果你想收到最即時的內容更新,可以在 FacebookInstagram 上追蹤我們