当前位置: 首页 > news >正文

提示词高级阶段学习day1

今天我们首先来介绍一下LangGPT

以 ChatGPT 为代表的大型语言模型(Large Language Models, LLMs)可以基于强大的语言理解能力、推理能力和生成能力执行各种各样的任务。此外,注入领域知识还能让 LLM 执行与领域相关的特定任务,要充分发挥 LLM 的这些能力,就需要构造高质量的提示。因此,提示工程 (Prompt Engineering) 吸引了许多研究人员的关注。

提示工程是典型的经验科学,主要涉及提示设计和提示优化。由于 LLM 具备自然语言理解能力,可以通过非结构化的自然语言指令直接要求 LLM 执行任务。在此基础上,研究人员首先探索并总结出了一些优化提示的技巧。

[Bsharat等人,2023年]介绍了26条指导原则,旨在让 LLMs 表现得更好。除了这些直接作用于提示的优化技巧外,一些研究人员还基于历史数据的提出了提示优化方法。

[Sun 等人,2023a] 引导 LLM 从不正确的推理中得出特定实例的新提示,然后总结每个实例的对应提示,作为优化原始提示的参考。

[Pryzant等人,2023年]定义了自然语言"梯度",利用小批量数据求解该"梯度"并利用波束搜索和 Bandit 选择程序,按照梯度的相反语义方向编辑当前提示。[Fan 等人,2023 年]对一个大型提示数据库进行分析,并提出了一个自动提示优化框架。

基于历史数据的直接提示优化原则和方法需要丰富的经验。因此,这些方法通常只在特定任务或领域中表现良好。为了提高通用性,一些研究人员提出了自适应提示优化方法。

[Guo 等人,2023 年] 将 LLM 与进化算法联系起来,提出了一种新的离散提示优化框架,称为 EvoPrompt。

[Li等人,2023a]设计了一种多轮对话对齐策略,并利用GPT-4[Achiam等人,2023]生成易读的提示集。同时,他们还提出了一种高效的提示筛选指标,能以线性复杂度筛选出高质量的提示。

[Wang等人,2023b]引入了PromptAgent,它可以反思模型错误并产生建设性的错误反馈,以诱导精确的专家级见解和深入的指导。[Hao等人,2022] 和 [Cheng等人,2023] 还从协调人类和 LLM 偏好风格的角度优化了提示。

提示优化可以大大提高 LLM 的性能,但由于缺乏系统性设计,高质量提示的可复用性很差。因此,一些研究人员设计了构建提示的规则。

[Nigh, 2023]收集了大量高质量提示,并总结了用于提示设计的 CRISPE 规则。

[ZamfirescuPereira等人,2023年]以基于LLM的聊天机器人设计工具原型为设计探针,支持非人工智能专家参与"终端用户提示工程"。

此外,一些研究人员为不同领域的应用设计了提示构建规则。

[Cao 等人,2023 年]为 ChatGPT 提出了各种利用深度学习执行程序修复任务的提示模板。

[Yeh等人,2022年]将生物医学关系提取任务重新表述为简单提示表述下的 cloze 测试任务,从而系统地生成全面的提示语。

[Liu和Chilton,2022年]在文生图任务的五个实验中评估了涵盖51个主题和51种风格的5493个生成提示,并总结了提示设计指南。

但是面临的主要问题:

1.这些方法以AI专家大量的使用经验为基础,

2.主要依赖列出的设计规则,缺乏系统性。

3.此外,这些规则具有较强的领域相关性和模型相关性,但通用性、灵活性和可复用性较低。

为了推广基于 LLM 的应用,进一步激发 LLM 的潜力,我们希望设计一个高质量、可复用的提示模板。

该模板应具有通用性和可扩展性。

此外,该模板还应该易学易用。

受 prompt 是 LLM 时代的编程语言这一观点的启发 [Alouani, 2023; Mund, 2023],

我们设计了一种面向 LLM 的编程语言,

即一种 prompt 设计框架 Language for GPT-like LLMs (LangGPT)。

特点:

LangGPT 具有编程语言的系统性、规范性和可复用性的特点,

并保留了自然语言的灵活性和可扩展性。

我们首先分析了自然语言和编程语言之间的差异,以确定提示模板应具备的属性。

LangGPT 设计为双层结构,由模块和内部元素组成。

———————————————————————————————————————————

LangGPT 中的模块可分为两类:

内置模块和扩展模块

———————————————————————————————————————————

对于内置模块:

我们详细设计了每个模块的必要内部元素,并给出了示例模板。

对于扩展模块:

我们统一了基本内部元素的设计。

实验证明两个现象:

1.在引导 LLM 方面,LangGPT 比基线提示更好。

2.此外,LLM 可以利用这一框架自动生成提示,就像生成代码一样。

2. 参考编程语言构造提示设计规则

与自然语言相比,编程语言更具标准化和可复用性。为了设计高质量的可复用的提示,我们分析了自然语言和编程语言之间的差异,并提出了提示设计原则。

2.1 自然语言与编程语言的区别

自然语言主要用于交流,而编程语言则是为机器执行任务定义的指令[GeeksforGeeks, 2023]。

不同的应用目的导致这两种语言的创造和演变背景截然不同。

1:目标受众:

自然语言是由人类对人类说的[Grune等人,2012],而编程语言是由人类为机器准备的[Chakray,2018]。

2理解:

计算机只能理解固定的指令,这要求编程语言具有严格、严谨的语法和语义。相反,自然语言具有宽松而灵活的语法和语义,允许创造和变化,并具有高度的容错性。

3模糊性

自然语言更加模棱两可,但人类有能力明确自然语言表达的意思。例如,顺序混乱和打字错误等问题对阅读的影响较小,发音错误也可以理解[Chakray,2018;Aho,2007]。

编程语言比较准确,因为它们需要为计算机提供明确的指令[GeeksforGeek,2023]。

4演变与更新

自然语言通过人类的使用和交流,随着时间的推移自然演变[Sipser,1996]。自然语言在增加新词与新的意义,以及摒弃过时用法方面是比较灵活的[Fromkin等人,2018年]。相反地,编程语言是专门为与机器通信而设计的[Sebesta,2012],新的语法规则和功能需要明确的升级或正式发布[Pratt等人,1984]。

总而言之,这两种语言的主要区别在于,自然语言更模糊、更灵活,而编程语言更规范、更精确。LLM本质上执行大量计算,与机器有许多相似之处。因此,我们借鉴了编程语言的特点,结合自然语言的优势,提出了一种面向 LLM 的自然语言编程框架--LangGPT。

2.2 提示设计规则

我们参考编程语言的设计思想来优化提示。

在分析了编程语言和自然语言的区别之后,我们提出了提示的设计原则:

(1)提示应具有规范化的格式

灵活和模糊的自然语言对于LLM来说是很难理解的。格式规范的提示使用户的目的和要求更加突出。

(2)提示的结构应该是可扩展的

自定义结构便于用户根据自己的领域和任务设计合适的提示。

(3)具体要求必须明确、完整

指令和附加要求都应明确和完整,以避免误解或偏见。

(4)语言要灵活

在需求明确的情况下,灵活的语言可以更好地适应不同的领域。此外,灵活的语言也便于用户学习。

3 面向大语言模型的自然语言编程框架

基于这些设计规则,我们提出了一种面向 LLM 的双层自然语言编程框架--LangGPT。

3.1 整体双层结构

为了系统地设计符合规则的提示,我们充分参考了面向对象编程语言的设计思想和结构[Rentsch,1982;Lutz,2010]。

我们将提示视为一个软件项目,并将提示设计过程类比为软件开发过程。对应关系如图1所示。

图 1:编程语言和自然语言提示之间的类比。

依据层次结构分析了两种语言之间的相似性。

不同大小的圆圈表示不同的层。较小的圆圈表示更靠近内层,对应于较深的颜色。

通过类比分析可以发现,自然语言提示与编程语言具有相似的多层次结构。

因此,我们参考编程语言的结构,提出了提示设计的双层结构,

并定义了提示的模块元素的概念。

一个完整的提示包含几个模块。

模块类似于编程语言中的类,每个模块代表要求LLM的一个方面。

例如,可以在Constraint、Goal、Profile等方面增加提示。

在一个模块中,包括许多内部元素。

元素类似于编程语言中的函数和属性,表示对LLM的直接和特定指令的内容。

例如“输出不应超过500字”可以是提示中属于Constraint模块的元素。

双层结构可以很好地标准化提示的格式。

然而,

过度严格遵循定义的不利结果:

1.如果过于严格地要求提示遵循预定义的内置模块和基本元素,无法利用自然语言的灵活性的优势。

2.此外,还会降低LangGPT对不同领域不同任务的通用性,不利于高质量提示的复用。

为了解决这些问题,我们将模块和元素的类型进行了划分。

1.

我们首先定义了内置模块和基本元素作为预定义双层提示模板。

2.

此外,我们还构建了支持自定义的扩展模块和自定义元素。

我们为内置模块和扩展模块提供Markdown[Gruber,2012]和JSON[Pezoa等人,2016]格式。

此外,我们为不同的模块编写了基本元素,并定义了编写自定义元素的规则。

3.2 内置模块的构造

该模块作为完整提示和指令单元之间的连接部分,对于控制提示的结构有非常重要的作用。

我们为所有提示所需的关键方面定义了内置模块

此外,我们还针对与应用程序相关的某些场景定义了内置模块,以便于学习和使用。表1展示了我们为某些场景定义的内置模块。


http://www.mrgr.cn/news/54578.html

相关文章:

  • 关于懒汉饿汉模式下的线程安全问题
  • STM32软件模拟I2C的实现方式(一)
  • 速盾:直播cdn加速原理是什么?
  • 安全见闻笔记
  • JS事件和DOM
  • 1.2024.10.17
  • LLAMA2入门(二)-----Transformer基础知识
  • 基于SSM果蔬经营系统的设计
  • 函数指针和指针函数
  • 一套开源轻量级的新零售快消进销存管理系统,使用.Net7 + Angular4开发(附私活源码)
  • 腾讯云技术深度解析:构建高效云原生应用与数据安全管理
  • 爬虫+数据保存
  • Maven 的使用:在 IDEA 中配置 Maven 的超详细步骤
  • centOS部署Jenkins实现项目可持续自动化部署
  • LLM | Hugging Face | 如何利用几句代码实现强大的AI效果(pipeline)?
  • Java 方法引用详解
  • 以简单组合优化为例讨论计算复杂性
  • 网球循环赛日程表生成算法[循环右移迭代算法]
  • (44)MATLAB读取语音信号进行频谱分析
  • Codeforces Round 979 (Div. 2)
  • Spark 基础概念
  • Systemd: service传递进程参数
  • ip-geoaddress-generator 基于IP的真实地址生成器
  • STM32F407变量地址如何指定到iram1
  • 项目模块四:Channel模块
  • 世界脑力锦标赛资料,最强大脑教程