AI知识库

53AI知识库

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


提示工程(Prompt Engineering)最全综述:本质、技术、最佳实践
发布日期:2024-12-04 08:17:28 浏览次数: 1601 来源:大模型之路



提示工程(prompt engineering),简而言之,是构建和优化输入提示以引导LLMs生成准确且富有洞察力的输出的艺术和科学。在LLMs的世界里,一个精心设计的提示就如同一位经验丰富的向导,能够引领模型穿越复杂的信息海洋,找到用户心中的答案。

一、理解提示与提示工程(prompt engineering)

(一)提示的本质

提示是我们输入给大语言模型以获取期望响应的信息。它的形式丰富多样,可以是一个简单的问题、一段陈述、详细的指令,甚至可以是文本与图像等其他模态的组合。例如,在向大语言模型询问历史事件时,我们输入的关于该事件的相关描述或问题就是提示(掌握Prompt Engineering(提示工程):解锁大型语言模型的无限潜能)。提示的质量直接影响着模型输出的准确性和有效性,一个精心设计的提示能够激发模型挖掘出其训练数据中的深度知识,从而给出令人满意的回答。

(二)提示工程的定义

提示工程prompt engineering则是一门精心雕琢提示的艺术与科学。它不仅仅是简单地构造输入文本,更是涉及到对模型行为的深入理解,以及对各种影响因素的综合考量。通过不断地实验、优化,提示工程师能够设计出最适合特定任务和场景的提示,引导大语言模型生成精准、富有洞察力的输出。这是一个迭代的过程,需要不断地调整和改进提示,以适应不同的需求和模型特性。

二、控制大语言模型输出:配置是关键

(一)输出长度

大语言模型的输出长度是一个重要的配置参数,它决定了模型将生成的最大令牌数量。令牌是模型处理文本的基本单位,可以是单词、标点符号等。当我们需要更详细、全面的回答时,可能会希望增加输出长度,但这需要更多的计算资源。因为生成更多令牌意味着模型需要进行更复杂的计算,这不仅会导致更高的能源消耗,还可能使响应时间变长,并且增加使用成本。例如,在生成一篇长篇文章时,若设置较长的输出长度,模型将花费更多时间和资源来构建完整的内容。相反,如果我们只需要一个简短的答案,如查询一个事实性信息时,适当限制输出长度可以提高效率并降低成本。

(二)温度

温度参数控制着大语言模型输出的随机性。较低的温度值(如 0.1)会使模型的响应更具可预测性和确定性,它倾向于选择概率最高的令牌,从而生成较为保守和常规的回答。这种情况下,模型的输出更稳定,适合于需要准确、一致性答案的场景,如查询科学公式或定义等。而较高的温度(如 0.9)则引入了更多的随机性,允许模型探索更多样化的可能性,从而产生更具创造性和独特性的结果。在创意写作、头脑风暴等任务中,较高的温度能够激发模型生成新颖的想法和独特的表达方式。例如,在创作一篇小说时,适当提高温度可以让模型生成更富有想象力的情节和生动的描写。

(三)Top - K 采样

Top - K 采样基于模型为下一个令牌生成的概率分布进行操作。它限制模型仅从概率最高的 K 个令牌中选择下一个令牌。例如,当 K = 5 时,模型会在生成每个新令牌时,仅从概率排名前五的候选令牌中随机选择。这种方法在一定程度上平衡了确定性和随机性,既能保证模型考虑到最有可能的选项,又给予了一定的变化空间。在实际应用中,根据任务的需求调整 K 的值可以影响模型输出的多样性和准确性。如果 K 值过小,可能会导致输出过于局限;而 K 值过大,则可能使模型的选择过于分散,降低输出的质量。

(四)Top - P 采样(核心采样)

Top - P 采样采用了不同的策略,它不固定考虑的令牌数量,而是设定一个概率阈值 P。模型从概率分布中选择令牌,从最有可能的开始,直到所选令牌的累积概率达到或超过 P。例如,当 P = 0.9 时,如果前三个最有可能的令牌的累积概率为 0.92,模型就会选择这三个令牌。这种方法更加灵活,能够根据概率分布的实际情况动态确定选择的范围。在处理一些复杂或不确定的任务时,Top - P 采样可以更好地适应模型的预测概率分布,提供更合适的输出。它可以避免因固定 K 值而可能导致的不合理选择,尤其在概率分布较为分散的情况下,能够更准确地捕捉到关键信息。

(五)配置示例

在实际应用中,为了获得一般连贯且具有创造性的结果,通常可以从温度为 0.2、Top - P 为 0.95、Top - K 为 30 开始进行尝试。当然,这些参数并非一成不变,需要根据具体的任务需求和模型表现进行调整。例如,在一个需要高度准确和稳定答案的知识问答应用中,可能会进一步降低温度,同时适当调整 Top - K 和 Top - P 的值,以确保模型给出最可靠的回答。而在一个创意写作项目中,则可能提高温度,放宽 Top - K 和 Top - P 的限制,鼓励模型发挥更大的创造力。

三、提示技术

(一)零样本提示

零样本提示是最基础的方法,在这种方式下,我们仅提供任务描述和输入文本,而不给出任何示例。它完全依赖大语言模型自身的知识储备和从训练数据中归纳总结的能力。例如,当我们询问 “太阳系有哪些行星?” 时,模型凭借其预先学习到的天文知识来回答。然而,零样本提示的局限性在于,对于一些复杂或不常见的任务,模型可能无法准确理解我们的意图,导致输出不够理想。

(二)单样本和少样本提示

单样本和少样本提示通过在提示中提供一个或多个示例来引导模型生成特定结构或模式的输出。这些示例就像是模型的学习范例,向模型展示了我们期望的答案形式。在代码生成任务中,提供一段代码示例以及相应的功能描述,模型就能更好地理解我们的需求并生成符合要求的代码。在翻译任务中,给出几个句子及其翻译示例,有助于模型在处理新句子时遵循相同的翻译模式。这种提示技术在许多领域都取得了显著的效果,因为它为模型提供了更明确的指导,降低了理解任务的难度。

Parse a customer's pizza order into valid JSON:EXAMPLE:I want a small pizza with cheese, tomato sauce, and pepperoniJSON Response:("size": "small", "type": "normal", "ingredients": [l"cheese", "tomaato sauce","peperoni"]]
Now, I would like a large pizza, with the first half cheeseand mozzarella. And theother tomato sauce, ham and pineapple.JSON Response:

(三)系统提示

系统提示(系统提示(System Prompt)与LLM输出:揭秘AI对话背后的“隐形指挥棒”)为语言模型设定了整体的上下文和目的。它明确了模型的 “大方向” 任务,例如是进行语言翻译、评论分类还是其他特定任务。此外,系统提示还可用于指定返回的结构或格式,如要求以 JSON 格式或大写形式输出。通过系统提示,我们可以将模型的行为引导到特定的任务框架内,使其生成的输出更符合我们的预期用途。例如,在构建一个电商客服聊天机器人时,系统提示可以告知模型其主要任务是解答客户关于产品的疑问、处理订单问题等,并指定输出格式为清晰易懂的文本段落,以便更好地与客户进行交互。

(四)上下文提示

上下文提示为模型提供与当前对话或任务相关的具体细节和背景信息。这有助于模型更好地理解问题的细微差别,从而生成更贴合情境的回答。在一个持续的对话中,如果我们提到了之前讨论过的某个主题或事件,通过上下文提示将相关信息传递给模型,它就能基于这些背景知识进行连贯的回应。例如,在讨论一部电影时,我们先提到了导演的风格特点,然后询问电影中的某个情节设置的意义,模型可以结合之前关于导演风格的信息来给出更深入、准确的解释。

(五)角色提示

角色提示要求大语言模型扮演特定的角色,从而影响其输出的语气和风格。通过赋予模型一个角色,如医生、律师、诗人等,模型会根据该角色的特点和知识背景生成相应风格的回答。当我们希望得到一首富有诗意的描述时,可以让模型扮演诗人的角色;而在寻求法律建议时,则让模型扮演律师。这种提示技术能够为输出增添更多的情感色彩和专业氛围,使其更符合特定场景的需求。

I want you to act as a travel guide. I will write to you about my location and you willsuggest 3 places to visit near me. In some cases, I will alsogive you the type of placesI will visit.My suggestion: "I am in Amsterdam and I want to visit only Imuseums.Travel Suggestions:

(六)回退提示

回退提示鼓励大语言模型进行更深入的批判性思考。其操作方式是先让模型考虑一个与手头特定任务相关的一般性问题,然后将该一般性问题的答案作为后续特定任务提示的输入。这种 “回退一步” 的方法有助于激活模型的相关背景知识,从而产生更有见地和准确的回答。例如,在解决一个复杂的数学问题时,我们可以先让模型思考解决此类问题的一般方法或原理,然后再将这些思路应用到具体的问题解决中。

(七)思维链提示Chain of Thought (CoT) 

思维链(Chain-of-Thought (CoT):引导大型语言模型解决问题的有效策略)提示通过明确要求模型生成中间推理步骤,显著增强了其推理能力。这使得推理过程更加透明,不仅提高了答案的准确性,对于涉及逻辑推理和问题解决的复杂任务尤其有效。在解决一道逻辑谜题时,模型可以逐步展示其推理过程,如 “首先,根据条件 A,我们可以得出结论 X;然后,结合条件 B,进一步推断出结论 Y……”,最终得出答案。这种方式让用户能够清晰地了解模型的思考路径,增加对答案的信任度,同时也有助于模型在复杂任务中更准确地找到解决方案。

When I was 3 years old, my partner was 3 times my age. Nlow, I am 20 years old. Howold is my partner? Let's think step by step.

(八)自一致性提示

自一致性提示利用了多个推理路径的优势来提高准确性。具体操作是多次发送相同的思维链提示,并设置较高的温度值,以鼓励模型产生多样化的推理。然后,从这些不同的推理结果中选择出现频率最高的答案。这种方法类似于 “群体智慧” 的概念,通过让模型从多个角度思考问题,减少了单一推理路径可能导致的错误。在处理一些具有模糊性或多种可能解决方案的问题时,自一致性提示能够提高答案的可靠性。

(九)思维树提示

思维树提示进一步拓展了思维链提示的概念,允许大语言模型同时探索多个推理路径,就像一棵树的分支一样。与思维链提示遵循单一的线性推理链不同,思维树提示能够更全面地考虑各种可能性,因此在需要探索多种选择才能得出解决方案的复杂任务中表现出色。例如,在制定一个项目计划时,模型可以同时考虑不同的任务安排、资源分配方案等多种可能性,并逐步评估和筛选,最终确定最优的计划。思维树提示可以通过手动精心设计提示来引导模型进行多路径探索,也可以借助 Python 脚本或 LangChain 等库实现自动化操作,提高效率和灵活性。

(十)ReAct 提示

ReAct 提示是一种流行的技术,它通过使大语言模型能够与外部工具和 API 交互,极大地增强了其能力。在这个过程中,模型首先分析给定的提示,制定行动计划,该计划可能涉及使用外部工具来收集额外信息。然后,模型利用其内部知识和外部获取的信息进行推理,将问题分解为更小的步骤,并制定实现目标的策略。接着,模型与适当的外部工具(如搜索引擎、API 或数据库)进行交互,执行计划中的行动,如搜索相关信息、检索特定数据点或进行计算。最后,模型观察行动的结果,并将新信息纳入推理过程,通过反馈循环不断调整计划和优化方法,直至找到解决方案。例如,当我们想要了解某个城市的实时天气情况时,ReAct 提示可以让模型与天气预报 API 进行交互,获取最新的天气数据并提供给用户。这种技术突破了传统文本输入的限制,使模型能够处理更复杂、实际的问题。

四、自动提示工程

(一)核心思想

自动提示工程(APE)的核心思想是利用大语言模型自身来生成多种提示候选,然后根据选定的评估指标对这些候选进行评估,最终选择表现最佳的提示。这一过程是迭代的,可以重复进行以进一步优化提示的效果。通过自动化提示生成和评估的过程,节省了人工设计提示的时间和精力,同时提高了提示的质量和适应性。

(二)实现步骤

  1. 提示生成:首先向大语言模型提供一个初始提示,并指示其生成具有相同语义但表述不同的多个提示变体。例如,若目标是为一个旅游网站训练一个聊天机器人,初始提示可以要求模型生成游客询问特定旅游景点门票价格的不同表达方式。

  2. 提示评估:使用合适的评估指标对生成的每个提示候选进行评估。常用的评估指标包括 BLEU(双语评估辅助工具)和 ROUGE(面向召回的摘要评估辅助工具)等。这些指标从不同角度评估提示的质量,如流畅性、连贯性以及与原始提示的语义相似度等。

  3. 提示选择:选择评估得分最高的提示候选作为最终用于目标应用的提示。如果需要,还可以对选定的提示进行进一步的微调,并再次评估,以确保其达到最佳效果。

(三)示例

以一个在线书店的聊天机器人为例,我们提供初始提示:“我们有一个在线书店,为了训练聊天机器人,我们需要各种顾客询问某本畅销书价格的方式。生成 10 个变体,保持语义相同。” 大语言模型会根据此指令生成一系列不同的提示,如 “某本畅销书多少钱?”“我想知道某本畅销书的售价是多少?” 等。然后,使用评估指标对这些提示进行评估,选择最适合用于训练聊天机器人的提示,使其能够更好地理解和处理顾客关于图书价格的询问。

五、有效提示工程的最佳实践

(一)提供示例

只要条件允许,尽量使用单样本或少量样本学习来展示期望的输出结构或模式。示例对于大语言模型来说是非常有效的学习工具,它们能够直观地向模型传达我们的需求,帮助模型更快地理解任务并生成符合要求的回答(与 LLM 沟通的艺术:实现高效交互的Prompt技巧)。例如,在训练一个图像描述生成模型时,提供一些图像及其对应的准确描述示例,模型就能更好地学习到如何根据图像特征生成合理的描述。

(二)设计简洁

保持提示简洁、清晰、易于理解。避免使用复杂的语言和不必要的信息,以免混淆模型。使用明确描述期望动作的动词,如 “总结”“解释”“生成” 等。简洁的提示能够减少模型理解的难度,提高回答的准确性和效率。例如,当我们想要获取一篇文章的主旨时,简单地输入 “总结这篇文章的主旨” 比使用冗长复杂的表述效果更好。

(三)明确输出要求

不要给出模糊的指令,要明确说明期望的回答格式、风格、长度和内容。清晰的输出要求可以使模型更准确地把握我们的期望,生成更符合需求的回答。例如,如果我们需要一个简短的摘要,明确指定 “生成不超过 100 字的摘要”;如果需要一个正式的商务报告风格的回答,也要在提示中说明。

(四)优先指令而非限制

重点告诉大语言模型要做什么,而不是不要做什么。仅在安全、清晰或特定要求的情况下使用限制条件。正面的指令能够引导模型朝着正确的方向生成回答,而过多的限制可能会限制模型的创造力和灵活性。例如,在要求模型创作一篇文章时,告诉它 “围绕某个主题创作一篇具有逻辑性和趣味性的文章”,而不是 “不要写得太枯燥,不要偏离主题”。

(五)控制最大令牌长度

可以在配置中或直接在提示中设置限制,以管理输出长度和成本。合理控制输出长度既能满足我们的需求,又能避免不必要的资源浪费(Prompt压缩:提升大型语言模型效率的关键技术)。例如,在查询一个简单事实时,设置较短的最大令牌长度,确保回答简洁明了;而在生成较长的文本内容时,根据实际需要适当调整长度限制。

(六)使用变量

在提示中引入变量可以提高其可重用性和灵活性。通过改变变量的值,同一提示可以适用于不同的输入,这对于构建与大语言模型交互的应用程序非常有用。例如,在一个旅游推荐系统中,提示可以包含 “目的地” 变量,根据用户输入的不同目的地生成相应的旅游建议。

(七)实验与迭代

提示工程prompt engineering的成功关键在于不断实验。尝试不同的输入格式、写作风格、模型配置,甚至与其他提示工程师合作比较不同的方法,以找到最适合特定任务的方式。由于大语言模型的复杂性和多样性,没有一种通用的最佳提示方法,需要通过不断尝试和改进来优化提示效果。例如,在优化一个问答系统的提示时,尝试不同的问题表述方式、增加或减少示例数量、调整模型的温度参数等,观察模型回答的准确性和质量变化,逐步找到最佳组合。

(八)适应模型更新

大语言模型在不断发展,新的版本可能会带来架构、训练数据或能力上的改进。及时了解这些更新,并重新审视和优化提示,以充分利用新的特性。例如,当模型更新了对某种语言结构的理解能力时,我们可以调整提示,更好地利用这一改进,提高回答的质量。

(九)探索输出格式

对于涉及数据提取、组织或分析的任务,考虑请求结构化的输出格式,如 JSON。结构化输出便于后续处理,减少了手动格式化的工作量,提高了数据处理的效率。例如,在从一篇新闻文章中提取关键信息时,要求模型以 JSON 格式输出,包含标题、主要内容、涉及人物等信息,方便后续的存储和分析。

(十)记录实验过程

详细记录提示尝试、模型配置、输出结果和观察到的现象。这有助于跟踪进度、发现模式,并随着时间的推移不断完善提示策略。通过记录和分析实验数据,我们可以总结经验教训,避免重复犯错,同时也能更好地理解模型的行为和特点,为进一步优化提示提供依据。


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

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

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

联系我们

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

微信扫码

与创始人交个朋友

回到顶部

 
扫码咨询