【人工智能系列】提示词工程概述

1 简介

提示词工程(prompt engineering)是自然语言处理(NLP)中重要技术,主要目的是设计、优化、调整用于指导预训练语言模型的输入提示。

  • 重要性
  •         引导输出:预训练模型虽然有大量的知识,但其输出往往取决于提示词,通过优化提示词可以引导模型输出更有价值的信息
  •         提高模型适应性:不同场景需要模型有不同输出,通过提示词可以定制化模型输出,提升模型适应性
  •         简化模型使用:对于非专业人士,对模型进行训练是一项复杂工程,具有挑战性,通过提示词引导,可以简化模型使用
  • 提示词价值
  •         提升生成质量
  •         提高准确性
  •         提高相关性
  •         改进交互性
  • 关键技术
  •         提示词设计:作为提示词工程核心工作,需要充分考虑模型的特点、任务需求、用户期望等因素;同时提示词的设计需要遵循一定原则,如简洁明了、具体明确、具有指导性
  •         提示词优化:通过不断改进和优化提示词来提升模型性能,同时提升输出的价值;一般可以修改提示词、调整提示词数量、位置、给出示例等
  •         提示词评估:通过期望输出和模型输出进行对比,评估提示词效果。一般可以通过召回率、准确率、F1值等方式评估

2 模型常见参数设置

在调用模型时,可以先进行一些参数设置,常见的参数包含:温度(Temperature)、顶部概率(Top P/K)、最大长度(Max Length)、停止序列(Stop Sequences)、频率惩罚(Frequency Penalty)、存在惩罚(Presence Penalty)

  • 2.1 温度(Temperature)
  •         Temperature参数用于调整语言模型生成文本的随机性。简单来说Temperature设置的越小输出的内容越确定,值越大结果越随机。Temperature参数实际上是在抽样策略阶段,对这些概率进行调整,以控制生成文本的多样性和可预测性,通常是大于0的实数,但是值太大意义不大,为0输出最保守,较多的模型将值定义在【0,1】的范围
  •         高Temperature :增加生成文本的随机性,使得不太可能的词汇有更高的出现概率。比较适合创作场景,但结果可能太发散、不连贯等
  •         低Temperature :减少随机性,使得更可能的词汇出现概率更高。比较适合学术等对确定性要求高的场景,但是会丧失多样性
  •         原理
  •                 Temperature参数通过对模型输出的概率分布进行缩放来起作用。具体来说,对于每个可能的下一个词,模型计算出一个原始概率分布,然后使用以下公式进行调整:
  • 2.2 Top P/K
  •         Top P允许模型在生成每个词时只考虑概率最高的一定比例的词汇;模型首先计算出所有可能的下一个词的输出概率,然后只从这个分布中累积概率最高的前P%的词中选择下一个词。这样,Top P采样在保持生成文本连贯性的同时,也为文本的多样性提供了空间
  •         Top K和P类似,只不过P是按照概率,K是按照数量(如果是Top K,则表示最有可能的前K个)
  •         如上图,按照K=2就是United和Netherlands;按照P=15%也是United和Netherlands
  •  技术细节(P值方法,K值类似,只是按照数量)
  •         计算概率分布:模型为所有可能的下一个词计算概率分布
  •         降序排序:将这些概率从高到低进行排序
  •         累积概率:从最高的概率开始,累加这些概率,直到累积概率达到或超过预设的阈值P
  •         选择词汇:在累积概率达到P的词汇集合中随机选择一个词作为下一个词
  •         适用场景:总体来说和temperature类似,在需要创造性和多样性的文本生成任务中,如创意写作、对话生成等,Top P采样可以帮助模型避免过早地陷入重复和固定的模式,值可以更大
  •         注意:一般Top和Temperature选择其一使用即可
  • 2.3 最大长度(Max Length)
  •         最大长度用于控制模型生成的词的最大数量。通过控制长度可以控制tokens消耗以及限制无关信息输出;但是针对文本生成场景要注意参数设置,否则可能导致文本生成不全
  • 2.4 停止序列(Stop Sequences)
  •         停止序列(Stop Sequences)是在自然语言处理和文本生成任务中使用的一种控制机制,是一系列预定义的字符、词汇、短语或者标记,用于告诉模型在生成文本的过程中何时停止输出;当模型在生成文本时遇到了这些特定的停止序列,就会终止当前的生成任务。
  •         作用
  •                 控制输出长度和内容
  •                         长度控制:可以有效防止文本生成过长而失去控制。例如,在生成一篇新闻报道时,如果没有停止序列,模型可能会一直生成下去,变得冗长且偏离重点。通过设置停止序列,比如 “。。。结束” 或者特定的标点符号组合,就可以将新闻报道的篇幅控制在合理范围内。
  •                         内容控制:帮助确保生成的内容符合预期的主题或结构。例如,在回答一个问题时,当出现 “综上所述” 或者 “答案是” 这样的停止序列时,模型可以停止生成,使得回答有一个较为明确的结尾,避免生成无关内容。
  •                 提高生成效率和质量
  •                         减少不必要的计算资源消耗。如果模型没有停止信号,它可能会在生成低质量或者不符合要求的内容上浪费时间和资源。停止序列可以让模型及时停止无效的生成过程,提高整体的生成效率。同时,由于能够更好地控制输出内容,也有助于提高生成内容的质量,使其更符合用户的期望。
  • 2.5 频率惩罚(Frequency Penalty)
  •         频率惩罚(Frequency Penalty)是一种对模型生成文本时单词(或标记)出现频率进行控制的机制。简单来说,就是当模型在生成过程中倾向于过度使用某些单词或短语时,频率惩罚可以降低这些单词或短语再次出现的概率。
  •         原理:在模型的生成算法中,每个单词(或标记)都有一个生成概率。频率惩罚会根据单词已经出现的次数来调整这个概率;当一个单词出现的次数较多时,频率惩罚机制会降低其后续生成的概率,使得模型更有可能选择其他单词来生成文本,从而避免生成内容过于单调、重复
  • 2.6 存在惩罚(Presence Penalty)
  •         存在惩罚(Presence Penalty)主要用于控制生成文本中单词(或词汇单元)的多样性。与频率惩罚(Frequency Penalty)不同,存在惩罚重点关注单词是否出现,而不是出现的频率
  •         原理:当设置了存在惩罚参数后,模型在生成文本过程中,如果一个单词已经出现过,存在惩罚会降低这个单词再次被选中的概率。这种降低概率的程度由存在惩罚的具体数值决定。例如,若存在惩罚值较高,那么一旦一个单词出现过,它再次出现的可能性就会被大幅降低,从而促使模型去选择其他尚未出现的单词来构建文本。

3 提示词设计思路

  • 3.1 明确提示词的基本元素(RTPO框架)
  •         角色(role):告诉模型它需要扮演什么角色,如老师、医生、翻译等
  •         模型需要做什么(target):告诉模型的具体任务
  •         需要怎么做(plan):告诉模型该怎么做
  •         输出格式(output):告诉模型该怎么输出,非必需

在以上基本元素上,不同的提示词工程师有自己的一些变形,下面是一些参考框架

        

  • 3.2 设计提示词基本原则
  •         3.2.1 表意清晰明确
  •                 使用符号
  •                 通过“”、<>、1/2/3等符号,类似于写作文中的段意明确;增加模型理解提示词
    •         
  •                 结构化输入
  •                 采用一定的范式进行输入,如HTML、JSON、markdown等方式来设计提示词

如markdown格式:

{

  "input_format": {

    "query": "{query}",

    "brand_name": "{品牌名称}",

    "shop_name": "{店铺名称}"

  },

  "output_format": {

    "can_invest": "是/否"

  }

}

  •                 提示词完备
  •                 尽可能完整表达需求,采用特定的格式进行设计
  •                 给出示例
  •                 给出一些输入、输出示例,便于模型参考;也是给模型你期望的答案的一种参考
  •          3.2.2 给模型思考时间
  •                 任务分步骤处理
  •                 给出步骤,让模型按照步骤执行,避免错误理解或跳过思考;类比上学时考试前老师一般都会说请认真审题、不要着急交卷
  •                 例如:第一步 …… 第二步 ……
  •                 给模型预留时间提示
  •                 让模型预留一些时间来思考,因为模型给它一个输入一定会给一个输出,如果不提示思考,会快速给出答案,不关注答案可用性
  •                 例如:请多花一点时间思考,确保答案的准确性
  • 3.3 提示词常用规则
  •         引导输出
  •                 在提示词末尾包含几个字词或短语,以便获得遵循所需形式的响应
  •                 例如:在提示词末尾加上:请以“小主”作为回答的开头
    •   明确语法
      • 对提示词使用明确的语法(标点符号、标题、节等)
  •                 例如:
  •                 #你是一个心理咨询大师,你需要根据用户的感受给出建议

                        #你需要按照以下步骤执行:

                                1、引导用户进行多次输入,围绕用户现状、心理困惑等尽可能详细询问;

                                2、对用户输入的结果进行理解,并给出用户回复

  •           分解任务
  •                 对于任务较多的,对任务进行拆解
  •                 例如:
  •                 第一步:你需要查阅XX
  •                 第二步:对查询到的XX进行理解
  •            思维链提示
  •                 属于分解任务的变体,不是直接给出步骤,而是提示模型响应逐步进行,并提出所有涉及的步骤,可以减少不确定性(类似让模型给出解答步骤)
  •                 例如:请给出你思考的过程,并将过程输出
    •     末尾重复提示
      • 对于重要信息,在末尾重复几次,便于模型重视,因为模型容易受到“近因偏差”影响;类似于重要事情说三遍
  •             元提示
  •                 可以用来指导AI系统的行为和提高系统性能的基础提示内容,把基础内容封装成模块、模版
  •            少样本学习
  •                 通过少样本学习可以让模型快速适应新任务,一般是在提示中给出一组训练示例,然后要求模型完成多个未完成的示例
  •            指定结构输出
  •                 指定结构输出可以让模型的输出规范化,同时指定结构输出也是让模型作为“连接器”的基础

### 提示词工程概述 提示词工程是一种专注于优化和改进自然语言处理(NLP)模型输入的技术方法。通过精心设计的提示词,可以显著提升AI模型的理解能力和响应质量[^1]。 #### 设计提示词的关键要素 为了有效实施提示词工程,需关注以下几个方面: - **提供详细信息**:清晰描述目标场景或需求背景,帮助模型更精准理解意图。 - **指定角色**:定义交互中的身份设定,使对话更加贴近实际应用环境。 - **使用分隔符与特殊符号**:合理运用标记区分不同部分的内容结构,增强可读性和逻辑性。 - **提供示例**:展示具体案例辅助说明抽象概念,降低误解风险。 - **少量示例的思维链(COT)** 和 **思维树(TOT)** 模型:引导模型逐步推理复杂问题解决方案。 #### 实现提示词工程的方法论 遵循一定的原则来构建高效的提示机制至关重要。这些原则包括但不限于简洁明了、针对性强以及适应性强等特点。此外,在实践中不断调整和完善设计方案也是成功的重要因素之一。 以下是基于 Python 的简单代码片段用于演示如何创建并调用带有特定参数设置的基础版本提示函数: ```python def generate_prompt(input_text, role="default", examples=None): prompt = f"You are now acting as a {role}. Please respond accordingly.\n" if examples is not None and isinstance(examples,list): example_section = "\n".join([f"- Example{i+1}: {ex}" for i, ex in enumerate(examples)]) prompt += f"\nHere are some relevant examples:\n{example_section}\n" return prompt + input_text if __name__ == "__main__": user_input = "What's the capital of France?" custom_role = "geography expert" sample_examples = ["Paris is located on which continent?", "Which country has Eiffel Tower?"] generated_prompt = generate_prompt(user_input,custom_role,sample_examples) print(generated_prompt) ``` 此脚本展示了如何根据给定的角色和例子生成个性化的查询语句。 ### 参考资料链接 对于希望深入学习或者参与到此类项目开发的朋友来说,这里推荐一份来自GitHub上的公开教程资源作为起点[^2]: [DAIR AI Prompt Engineering Guide](https://github.com/dair-ai/Prompt-Engineering-Guide/blob/main/notebooks/pe-lecture.ipynb)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值