提示词工程的演变与重要性

自从22年以来,提示词已经经过多轮的迭代,发展出了更系统的方法论。在初期,各路网上的提示词,还更多是角色扮演,偏向C端用户。大家也相信,凭借 LLM 基座大模型的进步,提示词会逐渐退出舞台。然而一坤年(两年半)过去了,期待的基座模型大进步并未出现——提示词仍然决定了 LLM 应用的质量;也决定了用户交互时,能多大程度得到自己想要的答案。因此,再探提示词是有必要。无论是个人使用,还是构建 LLM 应用,都需要掌握其基本原理和目前的最佳实践。

提示词技巧与人类沟通的共通性

产品设计本身也是人类社会规则设计的一个抽象。从宏观来说,提示词技巧和人类社会的一些常见共识重合度很高。例如:清晰阐明你的诉求、明确角色职责、分阶段分解任务、重复诉求以防止遗忘、约定清晰的输出结构、提供样例进行模仿、引导输出内容、要有事实数据支撑、设计指标反复迭代。这些技巧,在与人沟通、协作、领导、教练的时候,是非常重要的。靠意识同步的三体人,其 AI 的形态必与我们的不同。只要人类社会还是当前的结构形态,当下这些工作就还有意义。

提示词的分类

提示词,我们从配置方来说,分为三类。分别是系统提示词,由 LLM 提供商预设在模型 API 接口下,定义模型的行为准则。例如:反黄暴之类的。这一般是第一条注入的提示词。角色提示词,这个提示词是开放给用户配置的,比如配置为“你是一个大模型专家”。最后就是常见的用户交互提示词,用户输入的内容也算提示词。在此基础上,又根据用户和场景,派生出例如:指令提示词,指定输出xx字这种;上下文提示词,交代上下文说过啥;样本提示词,按照给的样式来;CoT 提示词,好好想想,逐步思考,等若干提示词种类。

主流大模型提供商的提示词建议

话归正题,笔者参考了 Anthropic、Google 以及 OpenAI 的提示词构建文档,力求从第一手信息源出来,结合自身的使用经验,给到当下最好的解决方案。这其中也离不开各类 LLM 支持构建的 deep reasearch 工具,这个过程才会变得更丝滑、效率更高。但由于人脑的带宽毕竟有限,错误和纰漏在所难免,读者朋友如有发现,欢迎指出。

Antropic 的提示词建议

以 Anthropic 为例,他们在训练过程中使用了大量的 XML 的结构化语料,因此类似的结构化提示词在他家的模型上会表现得很好。另外也强调清晰和直接的重要性。即清晰表达你的需求,可量化的提出你的诉求。而不是丢一个模棱两可的问题,然后反复沟通。但其实这部份也是需要的,这里更多是指大规模应用的时候,系统预设提示词,减少用户和下文的困惑度,这在软件系统中很重要。而且模型本身就是概率模型,它的结果是不确定的,那么反复沟通其实就有必要。

因为 LLM 的本质是预测下一个 token 是啥,所以可以通过预设这个开头来保证它会做出预期内的事情。比如想要输出 JSON,那么就以{开头。这一技术也被用在 deepseek 的 think 推理里面,通过预先提示来让模型进行 reason 推理。另一方面,由于模型的被奖励尽可能多的输出下一个 token,所以当遇到负面提示时:比如不要干啥,模型可能会产生意料之外的变化。因此,Anthropic 家的文档建议出更多的正面提示词:应该做什么,而不是不应该做什么,借此来减少不可控性。

Google 的提示词建议

而 Google 来说,对于他们的 Gemini 模型,则建议提供一个清晰可供参考的样本。这点在笔者做仓满量化相关的产出时,深有体会。只需要在开始和模型磨合,得到想要的代码模版或者是 doc 模版,后续只需要提供这个模版,即使是 Gemini-flash 模型,也能高效完成代码的编写工作。除此之外,谷歌文档中也给出了更高级的方式。例如 Step back 思考。先抽象,再解决问题。CoT 思维链也是一种方式,通过提示词注入“一步步思考”的方式,让模型的输出更具可解释性。

当然,还有像多次运行取平均值这种机器学习上的常用技巧(自洽性)。不过话说回来,这种方法对于成本控制和延迟响应要求蛮高。而在 agent 大行其道的当下,ReAct 也是一个重点。即推理和工具反馈相结合,用反馈来修正模型的表现。不过这些技术会显著增加 token 的消耗,需要在实践中取舍平衡。

ChatGPT 的提示词建议

最后是 ChatGPT,ChatGPT 是最早出圈的那一位。同样也强调“show and tell”方式来提高模型的准确性。强调编写的过程也是一个迭代的过程,并非一蹴而就。角色注入,上下文注入也是很关键的就是了。当然,对于他们自己构建的各类 LLM,其评估是必不可少的。评估有很多种方法,展开讲又是一篇文章。但大体遵循这么几个原则:遵循指令;结果准确、完整、清晰;系统易维护可扩展;token 消耗和 TTFT 响应在合理范围内。

其他重要参数

除开以文本输入的提示词外,还有一类参数值得关注,那就是 top-k、top-p、temperature。top-k/p 是关于模型下一个输出选择范围的参数,其本质是对 token 的 softmax 排序截取。无非是 k 是 top-k 个字符,p 则是头部概率截断。temperature 温度则是指其概率分布的集中情况,越高表示分布越尖,多样性被抑制。反之。这些部分一般情况下使用不多了。

总结与展望

如果上述内容看完,心里基本有数,那么恭喜你,你已经是一名合格的提示词工程师了。虽说当下,各家的提示词已经算不上核心机密,通过各种方式都能反响爆破系统提示词。但这并不意味着你不需要掌握一些基本的提示词技巧。系统地了解相关内容,能让你从 FOMO 的焦虑中走出来,免于被一些自媒体 KOL 收割。

另一个层面,构建一套达到特定目的且成本可控的提示词系统仍然很重要,特别是目前的 LLM 并未达到脱离提示词的程度。即使现在的提示词工程,缺少软件系统设计的美感,像胶水一样。这和几年前业界对于 Python 来做机器学习的评价一样:胶水。现在 Python 在机器学习的地位已然稳固。高效串联成一个可规模化的应用,就是它本身的价值和意义所在。

和模型沟通,就像是和刚入职的新人/实习生沟通一样。对方有很高的潜力,但是也需要 on boarding 过程。有些团队能将这部份做得很不错,而有些团队则让这个过程变得很艰难。

人类在塑造模型的同时、LLM 模型也在改变人类社会。上下文工程何尝不是一种社会工程。


关于作者