大语言模型 (Large Language Models, LLMs) 在不同领域都表现出了优异的性能。然而,对于非AI专家来说,制定高质量的提示来引导 LLMs 是目前AI应用领域的一项重要挑战。现有的提示工程研究已经提出了一些零散的优化原则,也有些研究设计了基于经验的提示优化器。然而,这些研究缺乏结构化的设计模板,学习成本高,可复用性低。受到编程语言的结构化和可复用性的启发,提出了双层提示设计框架 LangGPT,作为面向 LLM 的编程语言。LangGPT 具有易于学习的规范结构,并为迁移和复用提供了扩展结构。实验表明,与 baseline 相比,LangGPT 极大地增强了 LLM 生成高质量回复的能力。此外,也证明了 LangGPT 框架能有效地指导 LLM 自动化地生成高质量提示。
以 ChatGPT 为代表的大型语言模型(Large Language Models, LLMs)Achiam 等人,2023;Schulman 等人,2023 可以基于强大的语言理解能力、推理能力和生成能力执行各种各样的任务Sun 等人,2023b;Sun 等人,2023c;Yu 等人,2023。此外,注入领域知识还能让 LLM 执行与领域相关的特定任务 Wang 等人,2023a;Li 等人,2023b;Zhang 等人,2023;Ren 等人,2023。要充分发挥 LLM 的这些能力,就需要构造高质量的提示Eric,2022;Chen 等人,2023;Gajula,2023。因此,提示工程 (Prompt Engineering) 吸引了许多研究人员的关注Varshney 和 Surla,2023;Mesk´o,2023;Wang,2023。
为了推广基于 LLM 的应用,进一步激发 LLM 的潜力,希望设计一个高质量、可复用的提示模板。该模板应具有通用性和可扩展性。此外,该模板还应该易学易用。受 prompt 是 LLM 时代的编程语言这一观点的启发 Alouani, 2023; Mund, 2023,设计了一种面向 LLM 的编程语言,即一种 prompt 设计框架 Language for GPT-like LLMs (LangGPT)。LangGPT 具有编程语言的系统性、规范性和可复用性的特点,并保留了自然语言的灵活性和可扩展性。首先分析了自然语言和编程语言之间的差异,以确定提示模板应具备的属性。LangGPT 设计为双层结构,由模块和内部元素组成。LangGPT 中的模块可分为两类:内置模块和扩展模块。对于内置模块,详细设计了每个模块的必要内部元素,并给出了示例模板。此外,对于扩展模块,统一了基本内部元素的设计。实验证明,在引导 LLM 方面,LangGPT 比基线提示更好。此外,LLM 可以利用这一框架自动生成提示,就像生成代码一样。
这项工作的主要贡献为:
与自然语言相比,编程语言更具标准化和可复用性。为了设计高质量的可复用的提示,分析了自然语言和编程语言之间的差异,并提出了提示设计原则。
自然语言主要用于交流,而编程语言则是为机器执行任务定义的指令GeeksforGeeks, 2023。不同的应用目的导致这两种语言的创造和演变背景截然不同。
总而言之,这两种语言的主要区别在于,自然语言更模糊、更灵活,而编程语言更规范、更精确。LLM本质上执行大量计算,与机器有许多相似之处。因此,借鉴了编程语言的特点,结合自然语言的优势,提出了一种面向 LLM 的自然语言编程框架--LangGPT。
参考编程语言的设计思想来优化提示。在分析了编程语言和自然语言的区别之后,提出了提示的设计原则:
基于这些设计规则,提出了一种面向 LLM 的双层自然语言编程框架--LangGPT。
为了系统地设计符合规则的提示,充分参考了面向对象编程语言的设计思想和结构Rentsch,1982;Lutz,2010。将提示视为一个软件项目,并将提示设计过程类比为软件开发过程。对应关系如图1所示。
图 1:编程语言和自然语言提示之间的类比。依据层次结构分析了两种语言之间的相似性。不同大小的圆圈表示不同的层。较小的圆圈表示更靠近内层,对应于较深的颜色。
通过类比分析可以发现,自然语言提示与编程语言具有相似的多层次结构。因此,参考编程语言的结构,提出了提示设计的双层结构,并定义了提示的模块和元素的概念。
一个完整的提示包含几个模块。模块类似于编程语言中的类,每个模块代表要求LLM的一个方面。例如,可以在Constraint、Goal、Profile等方面增加提示。在一个模块中,包括许多内部元素。元素类似于编程语言中的函数和属性,表示对LLM的直接和特定指令的内容。例如“输出不应超过500字”可以是提示中属于Constraint模块的元素。
双层结构可以很好地标准化提示的格式。然而,如果过于严格地要求提示遵循预定义的内置模块和基本元素,无法利用自然语言的灵活性的优势。此外,还会降低LangGPT对不同领域不同任务的通用性,不利于高质量提示的复用。为了解决这些问题,将模块和元素的类型进行了划分。首先定义了内置模块和基本元素作为预定义的双层提示模板。此外,还构建了支持自定义的扩展模块和自定义元素。为内置模块和扩展模块提供MarkdownGruber,2012和JSONPezoa等人,2016格式。此外,为不同的模块编写了基本元素,并定义了编写自定义元素的规则。
该模块作为完整提示和指令单元之间的连接部分,对于控制提示的结构有非常重要的作用。
为几乎所有提示所需的关键方面定义了内置模块。此外,还针对与应用程序相关的某些场景定义了内置模块,以便于学习和使用。表1展示了为某些场景定义的内置模块。
表 1:内置模块定义的状态。该表列出了目前定义的8类应用场景以及为这些场景定义的模块。 ✓表示已经针对该场景设计了相应的模块。相反, ✗ 表示没有设计。
第一个与编程语言中属性或变量的定义非常相似。相应地,后两类类似于编程语言中的函数。因此,构建了这三种类型的基本元素。使用“⟨PROPERTY⟩ 是⟨VALUE⟩”语句来模拟赋值操作。对于后两种情况,需要指定输入信息、任务和输出,其中输入和输出可以省略。使用“对于给定的⟨VALUE⟩的⟨PROPERTY⟩,请执行以下操作:⟨ACTIONS⟩;返回⟨RESULT⟩。”的形式来模拟函数。在提供的基本元素模式中,尖括号中包含的内容需要根据模块和使用场景来填充。需要注意的是,提供的模式仅指定了编辑内部元素的想法。为了提高提示的通用性和灵活性,可以调整语言来表达关键信息。在表 2 中,展示了一些模块中基本元素的一些示例。
表2:写作场景中内置模块的基本内部元素示例。该提示属于写作场景,其目的是为给定的文章生成标题。选择了五个模块作为示例——Profile、Goal、Constraint、Workflow和Style——并展示了每个模块的一个内部元素。特别是,对于Workflow模块,展示了一个类似函数的基本元素。
定义的内置模块已经尽可能全面地涵盖了提示的许多方面。此外,还添加了LangGPT涵盖的应用场景和模块。但受限于自身的能力和领域知识,无法考虑LLM的所有应用场景。
因此,除了内置模块和基本元素之外,还定义了扩展模块和自定义元素,以提高提示的通用性和复用性。扩展模块和自定义元素的设计流程如图2所示。
这个过程可以帮助用户快速分析他们的需求并提出提示中需要包含的要点。基于LangGPT提供的设计模板以及设计流程,可以优化高质量提示以快速匹配应用场景。
图 2:扩展模块和自定义元素的设计流程。对于内置模块无法覆盖所有方面的应用场景,可以根据需要定义新的扩展模块。定义了扩展模块后,还应该根据扩展模块的要求来设计内部元素。另外,如果内置模块能够满足应用场景需求,但基本元素无法满足所有需求,可以直接在内置模块中添加自定义元素。需要注意的是,扩展模块和内置模块应尽可能相互排斥,以最大限度地减少修改成本。
为了验证提出的LangGPT的先进性,在两个方面进行了实验:LLM执行任务的效果和LangGPT的可用性调研。在的实验中,选择了两种类型的应用场景:写作和角色扮演。对于每个场景,选择了五个由社区用户构建和共享的具体的任务助手。
为了进行比较,选择了两个baseline。
直接指令提示非常直观,可最大限度地节省token。但这种方式内容太少,往往不能全面传达需求,也难以抓住重点。 CRISPE提供了一个相对完整的设计框架,而不是一些零散的规则。但它没有清晰的结构化设计,不利于学习和高质量提示的复用。另外,CRISPE对提示中包含的元素有严格的规范,泛化能力较低。由于这些方法在提示设计上的缺点,设计了LangGPT。然而,除了这些直观的优势之外,还需要验证提示能否引导LLM执行任务,这才是提示设计最本质的目的。
选择了表 3 中所示的这些LLM进行评估,实验中的所有任务均于2024年1月18日前完成。
表 3:实验中使用的LLM。“unk”表示不知道这些模型的规模。
由于任务场景的复杂性,缺乏客观的评价指标。因此,使用人工评估和LLM评估来评估LLM执行任务的能力。为了更好地保证评估的合理性,针对两种场景设定了评估标准。
对于写作任务,要求评估者从3个维度评估LLM执行任务的有效性:文本连贯性、格式规范和内容丰富度。生成主题连贯的内容的能力很重要。然而,发现LLM在生成任务中通常能够保持主题一致性,因此没有针对这方面设计评估指标。对于角色扮演任务,同样设计了3个维度的评价指标:语言风格、角色相关性和主题一致性。对于每个评估指标,定义了从0到5的分数来表示不同的级别,并解释了每个整数分数对应的情况的描述。此外,允许评估者在不同级别之间打 .5 分。
该评估框架还可以指导高性能LLM,例如GPT-4和Ernie Bot-4,自动评估其表现。由于LLM作为评估者的一致性较低Liu et al., 2023,实验中也发现LLM评分的区分度很低,因此仅采用了人工评估的结果。
提示引导LLM执行任务能力最直观的体现是LLM在执行提示引导的任务时的表现。因此,评估了LLM在两种情况下的表现,结果如表 4 及表 5 所示。
表 4:引导LLM执行任务的不同提示的结果。粗体字体表示在当前场景中效果最佳的提示类型。 I、C、L 分别表示三种提示符,即Instruction-only、CRISPE、LangGPT。 s1到s3分别代表两种场景的三个评估指标。对于写作场景来说,s1是文本连贯性,s2是格式规范,s3是内容丰富度。对于角色扮演场景,s1是语言风格,s2是角色相关性,s3是主题一致性。
从结果可以看出,LangGPT更擅长引导LLM执行任务。此外,还注意到一个有趣的现象。某些具有特别严格安全限制的LLM将拒绝回答,例如关于吹牛和暴躁等话题的问题或请求。 LangGPT可以让这些LLM认识到这只是一种说话方式,而不是真正具有破坏性的行为,并引导LLM生成回复。其他两个baseline都无法做到这一点。
为了评估 LangGPT 的易用性,在在线社区进行了一项用户调查。该社区已经运行了六个多月,已经聚集了来自各行各业的数千名用户,包括制造、建筑、信息技术、金融和娱乐。因此,调查结果的客观性能够得到保证。设计了一份关于 LangGPT 体验的完整调查问卷,以确保答案的质量。调查问卷包括关于易用性的评分问题。用户评分结果如图3所示。从图3可以看出,87.81%的用户给出了3分或更高的分数,这表明用户对LangGPT的易用性表示认可。此外,LangGPT在用户调查中的总体满意度得分为8.48分(满分10分)。
图 3:用户调查中的易用性评分。最低分是0分,表示非常难用,最高分是5分,表示非常容易使用。 “:”用于分隔分数和百分比。
表 5:不同LLM在两种情况下的平均得分。
为了更直观地展示LangGPT的效果,从实验中筛选了具体案例。除了直接的效果比较之外,还尝试使用LangGPT来指导LLM生成质量提示。
在的实验中,使用三种提示来引导LLM扮演马屁精,图 4 中给出了一个示例。
在此示例中,直接指令提示和 CRISPE 提示引导的 ChatGPT 都只是回复用户的话语。相比之下,LangGPT 引导的 ChatGPT 在针对用户给定主题进行了更加夸张的吹嘘。此外,它从更广泛的角度表达赞美,也更有个性。
在实验中,还尝试让LLM使用 LangGPT 构建提示。图 5 展示了一个示例。
图 4:马屁精的案例。 ChatGPT-3.5 在三种不同提示下对用户的回复。需要注意的是,明远大学是虚构的。
图 5:ChatGPT-3.5 使用 LangGPT 生成提示的示例。为了便于演示,一些模块被省略。
如果直接要求LLM生成有关 MBTI 评估的提示,他们可能会拒绝。然而,LangGPT 可以指导LLM生成无害的高质量提示。
在本文中,提出了 LangGPT,一个用于提示设计的结构化且可扩展的框架。 LangGPT具有类似于面向对象编程语言的系统结构,易于学习和复用。实验表明,LangGPT 在指导LLM执行任务方面比baseline方法表现更好。还在LangGPT构建的社区中进行了用户调查,以验证LangGPT的易用性和可复用性。在未来的工作中,将进一步优化LangGPT的设计,减少LangGPTtoken消耗。此外,还将添加对LLM使用第三方工具和自定义工具的支持。
在LLM的应用过程中,可能会出现伦理争议,但LangGPT的设计及本文的写作过程避免了可能出现的伦理问题。
更多优质内容请关注公号:汀丶人工智能;会提供一些相关的资源和优质文章,免费获取阅读。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。