提示词工程(Prompt Engineering)是近年来随着人工智能(AI)蓬勃发展,特别是大语言模型(如GPT-4)惊艳登场而崭露头角的一个新兴领域。它指的是设计和优化提示词,以引导人工智能生成特定类型的输出或行为。提示工程是一种新的计算机编程方式,用提示词让大模型被编程化的手段,通过对提示词进行编排和格式化,最大限度地提高目标任务的性能。

OpenAI 提示词工程指南

首先要介绍的是OpenAI 提示词工程指南,当然还是需要上网才能访问。

地址:https://platform.openai.com/docs/guides/prompt-engineering

AI大模型LLM提示词工程指南:简单易懂的入门指南_AI大模型

下面是我根据官网提示词指南总结的思维导图,下面根据指南要点展开讲讲。

AI大模型LLM提示词工程指南:简单易懂的入门指南_LLM_02

一、写出清晰的指令

1. 在查询中包含详细信息以获得更相关的答案

坏例子:谁是总统?
好例子:2021年墨西哥的总统是谁?选举的频率是多长时间一次?

2.让模型充当某个角色

比如你是一个心理学专家、城市规划师、前端开发工程师之类的。

3.使用分隔符清楚地指示输入的不同部分

如"“” “”" 、 <> </> 、‘ ’、``` ```

对于简单的任务,使用分隔符可能对输出质量没有太大影响。然而,任务越复杂,澄清任务细节就越重要。不要让模型费力去理解您的具体要求。

4.明确完成任务所需的步骤,即大模型按照步骤一步一步思考(思维链)

AI大模型LLM提示词工程指南:简单易懂的入门指南_大模型_03

5.提供例子,即少量学习的概念(few-shot)

下面这张截图是我们在做指标查询时,为了让大模型可以区分近XX年写的提示词,也就是上面提到的“**思维链+少量学习”**的概念。如果例子太少,模型可能会过度依赖这些特定示例,影响其泛化能力。一般来说,例子应该不小于 5,甚至可以达到几十个。

AI大模型LLM提示词工程指南:简单易懂的入门指南_AI大模型_04

6.明确输出的期望长度

我们在让模型生成文本时,对模型的输出做一些限制

比如:根据我发给你的工作内容,生成一份周报,字数大约在150字。

二、提供参考文本

1.让大模型使用参考文本来回答
2.让大模型使用参考文本中的引用来回答

官网原文:Given that all models have limited context windows, we need some way to dynamically lookup information that is relevant to the question being asked. Embeddings can be used to implement efficient knowledge retrieval. See the tactic “Use embeddings-based search to implement efficient knowledge retrieval” for more details on how to implement this.

If the input has been supplemented with relevant knowledge, it’s straightforward to request that the model add citations to its answers by referencing passages from provided documents. Note that citations in the output can then be verified programmatically by string matching within the provided documents.

这两段告诉我们使用检索增强生成(RAG)技术来提升体验,所谓的**“RAG”(Retrieval-Augmented Generation)**,即利用更多的信息库和实时信息来弥补模型的不足。这不仅可以补充大型模型可能缺乏的最新语料或新闻,还可以解决事实性问题,某种程度上解决大模型可能产生的幻觉问题等。像现在通义千问、kimi等大模型的联网搜索功能其实就是外挂了一个知识库。

三、将复杂的任务分解成更简单的子任务

1. 使用意图分类来识别与用户查询中最相关的指令

OpenAI官网举了一个客服应用的例子,比如用户常问客服的问题有账单方面、技术支持、账户管理、一般问题咨询。这四类下面又可以细分,当用户来咨询问题的时候,首先由大模型对问题进行分类,也就是先做意图识别。如用户问如何做故障排除时,大模型将此问题归为技术支持,相应的回答技术支持的步骤和内容,这样得到的回答更精准。

在实际落地应用过程中,我们对用户问题做了分类,如指标类问题、知识类问题、地图操作类问题、其他类问题,首先由大模型对问题进行意图识别之后再分别去请求不同的接口进行处理。

2. 对于需要非常长对话的对话应用程序,可以对先前的对话进行总结或过滤

由于模型具有固定的上下文长度,因此在上下文窗口中包含整个对话的用户和助手之间的对话无法无限期地继续。

如当我们与大模型进行第四轮对话时,这个时候可能快超出上下文长度了,然后又需要借助前三轮对话的信息才能更好的回答第四个问题,这个时候可以借助大模型对前三轮对话进行总结,总结的信息和第四轮要问的问题一起提交给大模型。

下图的问题建议功能其实也是对前一轮的对话进行总结,从而推荐相关的几个问题给用户进一步提问。

AI大模型LLM提示词工程指南:简单易懂的入门指南_人工智能_05

3. 逐段对长文档进行总结,并递归构建完整摘要

OpenAI举了一个总结书本的例子。为了总结一本书这样非常长的文档,我们可以使用一系列查询来总结文档的每个部分。部分摘要可以连接起来再次进行总结,生成摘要的摘要。这个过程可以递归进行,直到整个文档被总结完毕。如果需要使用关于前面部分的信息来理解后面部分的内容,那么一个有用的技巧是在总结某一部分内容时,包含该部分之前文本的持续摘要。

如通过大模型总结和人工整理的方式,按照一个人读书的思维链,对每本书进行结构化整理,增加结构增加章节结构信息,以及章节总结内容,作为索引时的附带信息,以此来增强知识的连贯性。

四、给模型时间“思考”

1.让模型在急于得出结论之前找出自己的解决方案。

这里可以理解为让大模型在回答具体问题之前,先从基本原理进行推理,从而得出结论,基于这个结论去判断答案是否正确。

2.使用内心独白或一系列查询来隐藏模型的推理过程

对于某些应用,模型用来得出最终答案的推理过程不适合与用户共享。例如,在辅导应用中,我们希望鼓励学生自己解答问题,但模型对学生解答的推理过程可能会向学生透露答案。

“内在独白”是一种可以用来缓解这个问题的策略。内在独白的想法是指示模型将那些不打算展示给用户的输出部分放入一种易于解析的结构化格式中。然后在向用户展示输出之前,对输出进行解析,只展示部分内容。

3.询问模型是否在之前的尝试中遗漏了什么

我理解是让大模型给出最终回答之前先反思一下。假设我们使用一个模型从某个来源中列出与特定问题相关的摘录。在列出每个摘录后,模型需要确定是继续写下一个还是停止。如果源文档很大,模型通常会过早停止,未能列出所有相关摘录。在这种情况下,通过后续查询提示模型查找之前遗漏的摘录,通常可以获得更好的性能。

五、使用外部工具

  1. 使用基于嵌入的搜索实现高效的知识检索

跟第二部分提到的策略,提供参考的文本类似,这里说的还是运用RAG的技术。大模型结合RAG也是目前市面上最成熟的大模型应用了,适用于内部存在大量知识性的文档,减少模型编造错误事实的可能性。整体的流程如下:

AI大模型LLM提示词工程指南:简单易懂的入门指南_AI_06

2.使用代码执行来进行更准确的计算或调用外部API

文中举了一个数学计算的问题,我们都知道语言模型不擅长数学计算,可以让大模型自己编写Python代码来执行数学计算并返回结果,这个也比较好理解,本身编码能力也是评价语言模型的一个重要指标。

在实际落地应用过程中,我们试着让模型自主调用matplotlib库,编写代码绘制图表。

3.给模型提供特定的功能

其实就是函数调用(function call),通过提供一系列函数及其描述,通过大模型对问题的理解,去决定调用哪些函数来执行,从而满足问答。

六、系统的测试变更

参考标准答案评估模型输出。主要叫我们如何对模型输出结果进行评估,包括人的主观评价和程序的客观评价。