AI知识库

53AI知识库

学习大模型的前沿技术与行业应用场景


一文讲透AI Prompt提示词工程 (上)
发布日期:2024-06-29 14:42:03 浏览次数: 4329 来源:亘心


前言

许多人认为prompt就是用来和AI交互提问的方式,只要会说话就会提prompt,为什么还需要系统学习prompt呢?还整出来个“提示词工程”的专业术语,而且市面上还有不少讲AI提示词工程的书,竟然还专门设有prompt engineer的职位。难道是我自己的理解肤浅了?带着这些疑问我翻了几本市面上写prompt提示词的书,同时还学习了吴恩达的《ChatGPT Prompt Engineering for Developers》,最后在open AI 的官方文档里找到了答案


本来想写一篇文章的,鉴于内容还是有些多,于是拆成2篇。

 

1. 什么是“Prompt工程”?

官方定义:The process of designing and refining prompts to elicit the best possible responses from language models”【from OpenAI Documentation】。 
Prompt工程就设计和优化提示词(prompt)以获取AI语言模型的最佳回答。

2. 为什么需要系统学习Prompt工程

大语言模型LLM(如ChatGPT)的诞生与崛起源自海量的优质数据预训练,这些数据的汇聚与提炼,赋予了它上千亿的参数和无比强大的能力。它如同一座深不可测的宝藏,其中蕴含的潜力与可能性无穷无尽。然而,这座宝藏的发掘与利用,却高度依赖于提问者的技巧与智慧
不同人提问,会有不同的收获。就如同面对同一座宝藏,有人手拿小铲挖掘,有人开挖掘机挖掘,收获的价值完全不同。会提问的人就如同开着挖掘机,能够引导LLM发挥出更高的潜力,产生更为深刻、有价值的回答
人与人沟通有时候为了保证信息和情绪的无损尚需要技巧,更何况人与AI沟通? 因此,系统地学习prompt(提示词)是一门学习如何与AI大语言模型有效沟通和提问的技巧。通过学习如何构建问题或引导式提问,可以最大限度地发挥AI的潜力,从而输出高质量和满意的结果。

 

2.1 Prompt工程的2个核心内容

为了让AI能更好的理解人类指令,Prompt工程实际上包含2层核心内容,User promptSystem prompt然而,大多书里并没有指出这一点,它们更多是在讲基于chatGPT 用户界面使用的User prompt,却忽略了System prompt. 

User Prompt.用户(User)输入的提示,即User在使用LLM时写的提示词。模型需要基于用户提示来生成回答。
System Prompt. 这是由系统生成的提示,通常用于设定对话的背景、提供指导或规定规则。然而系统怎么生成提示?实际是LLM在面向用户发布使用之前,由Prompt工程师根据不同任务类型分别预定义prompt以保证LLM模型输出的质量
比如,Grammar correction 纠正语法任务,Prompt工程师会预先定义执行这个任务的指令说明(instruction), 然后当User在让AI帮助自己纠正语法时,AI就会按照预先定义好的instruction指导下生成输出。如果不对这个任务进行指导定义,很可能AI是不能理解什么叫“Grammar correction”的。

果想更多的了解chatGPT 内置的system prompt,可参考:https://platform.openai.com/examples

2.2 Base LLM 和 Instruction Tuned LLM

为了区别预训练原始模型和预先定义了Prompt指令的模型,Andrew Ng.吴恩达老师在他的课程里将LLM分为这两类, Base LLMInstruction Tuned LLM.

Base LLM:最原始的预训练好的基础模型,而它工作的原理就是follow transformer架构定义的根据预训练数据中词语之间的高相关性概率来预测输出内容。然而,这种模型在实际应用中可能效用有限,因为它缺乏针对特定任务的优化。
Instruction Tuned LLM预定义了prompt任务指令的模型。它帮助AI理解人类的指令,然后输出高质量的回答。这种模型是在Base LLM的基础上,通过预定义的任务指令(prompts)使得LLM能够更好地理解和执行人类的指令,从而输出更高质量、更符合预期的回答。这种调优过程使模型能够在多任务环境中表现更加出色。

在举个例子进一步说明什么是Base LLM 和Instruction Tuned LLM.

当用户提问“what is the captial of France?”的时候,

Base LLM 根据高相关性概率的回复是:What is Franc's largest city? 很显然这不符合我们的预期。

Instruction Tuned LLM 根据预定义promopt会很好的执行并回复“The capital of France is Paris.”


 

2.3 LLM 的Instrunction Tuning 和 Fine Tuning 的区别

看上去Instrunction Tuning Fine Tuning(微调)都是提升LLM模型性能的方法,但实际上是有本质区别的

Instruction Tuning 是在模型已经训练好的基础上,通过提供具体的任务指令(prompts)和示例,进一步优化模型的工作性能,以便它更好地理解和执行不同类型的任务。这种调优方式不直接改变模型的权重参数,而是通过改进模型如何解释和响应指令来提高性能。这种方法常用于提高模型在多任务环境中的表现。

Fine Tuning是在模型基础上使用特定领域或任务的数据进行训练,从而调整模型的权重参数,使其在该特定领域或任务上表现更好。Fine Tuning涉及直接修改模型的权重参数,因此从根本上改变了模型的内部结构。这种方法常用于需要高精度、特定领域的应用。

总结:

  • Base LLM:未经微调的通用语言模型。
  • Instruction Tuned LLM:通过特定任务指令(Prompt)进行微调的模型,更适合多任务处理。
  • Fine Tuning:使用特定领域数据进行微调的模型,专注于单一任务或领域的高精度应用。

3. Instruction Tuning 集成方法

看到这里可能有同学会有疑问: 
1. 工程师通过什么方式预定义system prompt的,不像user prmopt有图形窗口可以输入,system prompt是通过什么对base LLM 进行微调? 
2. 微调好的instrunciton tuned LLM是如何生效的? 比如chatGPT, instrunciton tuned LLM是被直接打包在chatGPT的某一个版本中,然后当用户使用过程中就生效了?
有三种Instruction Tuning方式:
1. 配置文件

预定义的prompt可以被写入配置文件,这些配置文件会在模型启动时加载。


2. API调用

在一些应用中,prompt可能会通过API调用传递给模型。


3. 硬编码到应用中

在某些应用中,prompt可能会直接硬编码到应用逻辑中。例如,聊天机器人可能会在每次用户输入之前插入一个system prompt,以确保每次对话都遵循设定的上下文和规则。
在ChatGPT中,预定义的prompt通常会通过上述方式之一生效。特别是在特定的应用版本中,这些prompt会被集成到模型配置或API调用中,以确保模型在每次对话中都遵循特定的上下文和规则。例如,当用户访问某个特定版本的ChatGPT应用时,系统会自动加载和应用预定义的prompt,使得对话更加流畅和有效。

4. 定义和优化Prompt的6大策略

在系统了解了Prompt工程后,我们就可以开始撸起袖子写prompt了!
基于LLM大语言模型的工作原理能力边界,无论是优化User prompt还是System Prompt, 会有一些使用策略和最佳实践。
下面就是OpenAI官网给出的6大策略。 
一条都会大致标注一下内容,但不会进入到细致的讲解。如果每条都细致写的话估计要出一本小册字了;) 本身也没什么太难理解的内容,感兴趣的朋友可以参照官网的文档,每一个都有示例。

【I】 Write clear instructions (编写清晰的指令)

【II】 Provide reference text(提供参考资料)

在一些特定的场景和背景下用户希望AI的回答能更加贴切和准确,那么是需要在提示词中提供一些参考资料。

【III】Split complex tasks into simpler subtasks(将复杂任务拆解成更简单的子任务)

正如在软件工程中,将复杂系统分解为一系列模块化组件是一种良好的做法,提交给语言模型的任务也是如此。复杂任务的错误率往往高于简单任务。此外,复杂任务通常可以重新定义为一系列简单任务的工作流程,其中早期任务的输出用于构建后续任务的输入。

下面3条是针对长文本或者复杂业务类型(如,客户服务)对于如何提示模型的一些建议,可以参考。

【IV】Give the model time to "think" (让模型更充分的思考)

这个策略主要是按照提示词中提示的步骤或思路引导模型更好更全面的思考,而不是着急匆忙的给出一个不见的正确的答案。这么做的目的是为了让模型可以更好的完成任务。

【V】Use external tools (使用外部工具)

可以通过为模型提供其他工具的输出来弥补模型的不足。例如,文本检索系统(有时称为RAG或检索增强生成)可以向模型提供有关相关文档的信息,调用外部API,或访问其他特殊函数。

【VI】 Test changes systematically(系统地测试模型性能)

通常在写好提示词后,我们需要对写好的提示词进行调试,测试它是否按照预期来很好的完成了任务。

*Gold Standard Answer(黄金标准答案)**指的是在某一特定问题或任务中,被公认为正确和权威的答案。这些答案通常是基于广泛的专家共识或经过严格验证的事实。在评估模型输出时,可以将生成的答案与黄金标准答案进行对比,评估其准确性和完整性。可以通过模型查询来计算答案中包含多少个必需的事实。



Prompt知识补充

除了以上6大策略之外,deeplearning.AI ChatGPT Prompt Engineering for Developers课程也给出了一些最佳实践。大部分和OpenAI 官网类似,大家可以参考一下这个总结。


值得一提的是,“Iterative prompt development” 是一个很好的思路,即通过迭代优化的方式来不断调整和优化prompt, 使prompt(提示词)能更好的提升模型的性能。

同时,可以使用OpenAI Evals框架进行批量测试,分析不同版本prompt的表现。




53AI,企业落地应用大模型首选服务商

产品:大模型应用平台+智能体定制开发+落地咨询服务

承诺:先做场景POC验证,看到效果再签署服务协议。零风险落地应用大模型,已交付160+中大型企业

联系我们

售前咨询
186 6662 7370
预约演示
185 8882 0121

微信扫码

与创始人交个朋友

回到顶部

 
扫码咨询