一文梳理大言语模型编程框架

大言语模型(LLMs),以及普通的言语模型(LMs),催生了一种新的编程方式,其中“指令”不再是明白的运行程序编程接口(APIs),而是像英语这样的人造言语语句。该畛域(一个被称为揭示工程的新畛域)的专家经过组合特定的关键词、揭示格局,甚至认知模型来对他们的言语模型启动编程——或许从言语模型中引出特定行为。

过去两年标明,言语模型可以发生宽泛的改革性影响,但在无缝集成到更大的程序环境方面存在固有局限。它们对理想和先前交互的记忆不完善,不能牢靠地遵照逻辑结构,无法与外部环境交互或口头计算,并且对揭示方式很敏感。为处置这些局限,曾经发生了十多个盛行的框架,它们在对言语模型之间以及与言语模型交互启动形象时偏差于不同的理念。

本文对这些框架启动了迄今为止最片面的综述,驳回了比现有探讨更系统的分类法。除了提供用于对与大型言语模型之间以及与大型言语模型交互启动形象的框架状况的梳理之外,本文还提供了两种分类体系,用于对形象的各种方法和理念启动推理:

言语模型系统接口模型(LMSI),一种新的七层形象,受计算机系统和网络中的开明系统互连(OSI)模型启示,用于对近几个月发生的编程和交互框架启动分层。这些层在言语模型形象的整个档次结构中从最上层形象到最低层形象依次出现。 咱们确定了五类言语模型形象,它们在咱们的综述中口头相似性能,对这些类别启动了分类。这些类别将大抵处于相反层的库分组,并且大抵依照从较上层形象到较低层形象的顺序出现。 这两种分类体系——言语模型系统接口模型(LMSI)和言语模型形象家族分类——经过它们对形象层级的处置方式互关系联。言语模型形象家族的陈列构成一个谱系,大抵与LMSI模型的形象层相对应——特意是,它试图形容向用户或开发者泄露的细节水平。例如,在谱系的一端,较低层形象触及经过Python函数(例如,在LMSI的神经网络层)与大型言语模型的参数间接交互。在另一端,较上层形象提供用于揭示生成和提升的工具,能够对大型言语模型的照应启动递归式提升,而无需深化钻研基础大型言语模型或流程的底层技术复杂性(例如,在LMSI的提升层或运行层)。

言语模型系统接口模型(LMSI)

在咱们对言语模型框架的钻研环节中,咱们观察到一种趋向;咱们可以大抵将特定框架确定为上层形象、低层形象或混合层形象。但是,假设不进一步分类,在这种状况下“高”或“低”究竟象征着什么并不明白。

受计算机系统和网络中的OSI模型启示,咱们提出了这些框架或许关注的不同性能层的概念,并且关键的是,它们可以很容易地在言语模型库和框架的档次结构中从上层到低层启动组织。咱们总共确定了言语模型框架理论可操作/向用户泄露的七层形象。这些层示意形象水平不时提高,从间接与言语模型的架构、权重和参数交互——这是最低层形象,即神经网络层,到最上层形象,即把启用言语模型的运行程序当作一个黑箱来处置用户提供的普通上层义务,即用户层。

咱们以为,除了成功对现有大型言语模型形象框架启动组织/分类的目的之外,这些层有助于确定大型言语模型框架的不同重点和个性可以在何处相互分别。就像OSI模型的状况一样,咱们宿愿分层能够让框架开发者清楚地了解在适宜的层级设计他们的形象,以便或许应用其余框架中曾经成功的现有基础设备——有效地分别关注点,并准许框架在形象边界/接口处将专业上班转移给其余框架。但是,在阶段,虽然许多框架处于较窄的层带内,但有些框架超过的范围更广,这理论反映了一种裁减性设计,其中上层形象可以与低层个性以一种向开发者泄露的方式启动交互。

上方列出了每层的形容和定义,而表1经过星级示意近期框架所并重的层。

表1

五类言语模型框架

咱们没有依照形象顺序孤立地形容每个框架,而是确定了在咱们的综述中发生的几类口头相似性能的库。这些类别将大抵处于相反LMSI层的库分组,并大抵依照形象水平递增的顺序出现。

第一组框架是那些专一于受控生成(如Guidance和LMQL)的框架。这些框架能够对言语模型的输入定义格局要求和其余解放(例如,经过正则表白式),这是围绕言语模型构建牢靠系统的关键因素。在此基础上,用于形式驱动生成的库(如OpenAI的函数调用形式和Marvin)准许用户表白类型级别的输入结构(例如,作为Pydantic形式)。以DSPy为首的框架应用弱小的形式和人造言语签名形象,专一于大型言语模型程序的编译,围绕将程序(其中大型言语模型调用是首要结构)编译为智能生成的高品质揭示链开展。编译驱动战略与带有预封装模块的揭示工程工具(如LangChain和LlamaIndex)不同,在后者中,一组用于生成和解析揭示的预封装适用程序,以及用于将生成的照应与其余言语模型调用或环境调用相衔接的基本原语,可用于以更无心义的方式与言语模型交互。但是,这些工具的外围依然依赖于手动揭示工程技术。在最上层,咱们探讨最具雄心的开明式代理框架(如AutoGPT和MetaGPT)和多代理聊天范式(如在CAMEL和AutoGEN中)。

表2(五类言语模型框架。留意:咱们将最底层的基础揭示层设为灰色,并且不将其计入,由于它只是繁难地封装了言语模型基本的文本输入/输入行为,没有进一步的形象。点击开展。)

0)基础揭示

咱们在言语模型框架家族中不太情愿归入的最低层是在言语模型形象框架发生之前的最先进水平;基础揭示。

基础揭示只是形容了用户在没有任何额外框架的状况下不时能够做到的事件,给定一个言语模型或言语模型的运行程序编程接口(API),基础揭示可以被以为是围绕不同言语模型的繁难包装器,它们以一致的方式表白其最原始的接口(文本输入,文本输入)。这是OpenAI(和其余提供商)的API的外围,也是LangChain - core包中的一些关键形象。关于某些运行程序,这种原始方式为构建手工制造的揭示或构建更上层形象提供了足够的灵敏性。

1)受控生成

言语模型以统计上或许但不确定的方式成功文本。这象征着言语模型的照应或许无法预测,使其难以集成到其余上班流程中。一类库经过运行基于模板或解放的受控生成技术来缓解此类担心,例如Outlines、Guidance和LMQL。这些库经常使用模板引擎,其中模板表白带有“空位”的揭示,以供生成内容来填充。这些言语模型生成的内容可以绑定到模板变量,并代入后续生成环节,疏导输入。这些库还支持将输入解放为诸如子集成员、形式和长度等限度。LMQL应用大型言语模型的解码组件来成功这种过滤,而Outlines修正言语模型修正令牌概率的才干以支持输入解放。这些框架往往超过神经网络层到揭示解放层。

@lmql.query LMQL程序是用嵌入在Python中的畛域特定言语(DSL)示意的,其中顶级字符串(或许蕴含用方括号示意且带有可选类型注释的“空位”)是用于补全的揭示,而附加解放由where语句示意。LMQL引入了急切和局部求值语义的概念,它激进地近似判别关于特定生成,解放能否成立。应用这种语义,LMQL可以生成特定于模型的令牌掩码,以在解码环节中修剪搜查空间。

Outline具备相似的才干,能够经过正则表白式有效地疏导生成,它也能支持LMQL所支持的许多解放。在外部,Outline将神经文本生成表述为有限形态机形态之间的转换。它在模型词汇表上建设索引,并经过操纵模型对令牌的概率来有效地保证生成文本的结构。该库还具备许多基于高低文有关语法(CFG)疏导生成的内置个性,以成功更适用的用法,例如经常使用Jinjia模板言语启动揭示生成,或经常使用json和Pydantic启动对象类型解放和形式定义。

但是,就LMQL而言,关于像GPT - 3和GPT - 4这样的托管端点,或许无法随便访问言语模型的解码组件。此外,这些库经常使用的一些“填空”战略更适宜用于生成义务的言语模型,而关于聊天模型(例如GPT - 4)则不太适用。

2)形式驱动生成

受控生成的一种更精细的形象是形式驱动生成。在这里,言语模型与其宿主编程接口之间的边界遭到一些预约义形式或一些对象规范言语(理论是JSON)的解放。这与Guidance和LMQL不同,在后者中,假设用户宿愿获取JSON输入,就必定指定JSON骨架及其外部内容限度。与受控生成相比,基于形式的方法可以更容易地集成到其余现有的编程逻辑中。但是,对生成内容类型的控制粒度或许更有限。这些库位于揭示解放层,由于合乎形式是限度言语模型输入的一种方式。

在Outlines、其余库(如Marvin和Instructor)以及最近的LangChain和Llamaindex中,这一步骤被进一步形象。用户可以经常使用数据验证库Pydantic指定数据结构作为某些言语模型的输入形式(模型级形象)。在外部,这些库经过预构建揭示将形式编码为人造言语指令,要求言语模型以正确、可解析的格局输入。但是,关于Marvin和Instructor,有一些支持来应用基础言语模型供应商提供的更初级性能(例如,OpenAI的函数调用以确保可解析性)。估量这些库也将驳回OpenAI的新JSON形式,以降落输入无法解析的或许性。

例如,Instructor为OpenAI API提供了一个代替客户端,它接受经常使用Pydantic指定的照应模型。在其成功中,它支持三种查问言语模型的形式,即json、函数调用和工具经常使用,每种形式都对应于OpenAI支持的等效API。为了在解析环节中疏导言语模型,Instructor有一些外部揭示来告知言语模型形式和输入格局。

在LangChain中,当偶然发生验证失误时,支持更复杂的重试解析器,但输入不是经过OpenAI的函数调用API启动揭示,而更多是经过人造言语指令。

除了输入数据形式,一些库在大型言语模型交互的背景下参与了对性能形式(函数级形象)的支持,准许程序员用人造言语形式或签名对函数启动申明式注释,以示意其上层用意。这个想法最早出如今2023年终的DSP名目中,它是DSPy框架的前身。在DSP中,用户可以指定函数输入和输入的类型(在最繁难的状况下:“疑问,思索 -> 答案”),其中包括对参数含意和关系前缀的人类层面形容。输入和输入类型的汇合构成了一个DSP模板,从中可以诱导出一个可调用的Python函数。Marvin最近经过其“AI函数”简化了这种形式,其中程序员对输入和输入类型以及函数文档字符串的注释用于依据一些运转时输入生成揭示,以便从言语模型中提取输入。

在DSPy中,开发者雷同可以指定人造言语签名,以申明式地定义大型言语模型须要处置的(子)义务,这些义务是从全体义务的冗长形容以及输入和输入字段的形容中推导进去的。

3)编译大型言语模型程序

函数的人造言语规范的详细化在很大的搜查空间中或许会有所不同,这取决于所提供的示例(例如,少样本对比零样本)、揭示战略(例如,思想链)、外部数据源(检索增强生成,RAG),甚至是多跳方法(例如,思想程序)。在Marvin中,详细化战略是固定的,开发者理论局限于经常使用所提供的现成处置打算。但是关于DSPy来说,人造言语签名与详细的查问战略是分别的,这象征着要经常使用一个签名,用户必定申明一个带有该签名的模块。这些模块还可以选用性地带有示例(或演示)列表。DSPy还包括许多复杂的模块,如思想链(ChainOfThought)、思想程序(ProgramOfThought)、多链比拟(MultiChainComparison)和反响(ReAct),它们可以将这些揭示或交互战略运行于恣意的DSPy签名,而无需手动启动揭示工程。

DSPy模块可以像PyTorch一样经常使用运转时定义(define - by - run)接口启动组合,准许构建恣意的流程。DSPy中的一个弱小概念是能够编译一个流程,经过选用超参数(如指令/揭示或演示)甚至微调来对其启动提升。这个提升环节是经过提词器(teleprompter)启动的,它示意一种特定的提升战略。例如,自举少样本(BootstrapFewShot)提词器从大批输入(留意并不严厉须要输入)中疏导示例到模块流程。这个提词器在输入上运转流程,并选用满足某些可定制启示式的演示。

与其余技术相比,基于编译的系统有几个清楚的长处,例如能够在不从新定义基础签名的状况下扭转不同的揭示战略,以及经过提升提高性能。但是,要取得编译的好处,须要触及不少框架搭建上班,并且须要对底层的DSPy系统有必定的了解。关于须要少量与言语模型 - 环境交互的名目,或许不须要太多提升的繁难名目,在现阶段驳回这个系统或许具备应战性。

4)揭示工程适用程序

另一类库(包括LangChain和LlamaIndex)采取了一种十分不同的方法,经过少量预封装模块,这些库为经常使用言语模型的程序构成了“开箱即用”的处置打算。与DSPy等相比,例如,这些库往往有许多可用性能,更依赖揭示工程,并专一于与大型言语模型自身的一些特定交互模型。例如,LangChain包括控制揭示模板、输入解析、内存和检索模型集成的适用程序。

LangChain还提供了预构建的形象,应用这些适用程序来提供与言语模型和外部环境启动交互的更复杂形式。由LangChain的畛域特定言语——LangChain表白式言语(LCEL)指定的代理(Agent)和链(Chain)形象,增强了适用程序的性能和可复用性,以处置更复杂的义务。普通来说,LCEL准许用户指定一组言语模型可用于与某些外部环境交互的工具或举措,以及一个预设揭示和输入解析器来口头编排步骤,确定要调用哪些举措/工具以及如何将代理结果传递到代理循环的后续迭代。LangChain提供了少量预设揭示和输入解析器(例如用于反响(ReAct)、思想链、自我征询等),可以协助开发者极速构建适用于许多用例的复杂代理系统。但是,LCEL关键作为繁难代理循环上的轻量级语法糖,虽然组件是可定制的,但在撰写本文时,它们相关于原生成功并没有成功更初级的性能,而且代理循环自身的交互形式在某种水平上是固定的。

在揭示工程畛域,LangChain和LlamaIndex都为口头文本揭示工程提供了增强性能。除了基于交流的方法外,LangChain还支持一些揭示提升技术。这类提升或许触及选用有效示例或对各种“超参数”启动微调。LangChain还装备了示例选用器(Example Selectors),它们应用相似性(或许来自向量数据库)或更繁难的度量(如n - gram堆叠)等目的来提炼或许提高全体性能结果的示例子集。但是,这个环节是独立于言语模型和揭示战略自身启动的。此外,示例选用器须要少量齐全标注的示例来选用一个有益的子集。

作为一个以揭示为中心的框架,LangChain还经过其LangSmith平台开发了一个用于托管揭示的生态系统。揭示可以托管在LangSmith中以便与他人共享。当与LCEL以及LangChain的代理和链形象联合经常使用时,揭示可以经过揭示重用为幽默的言语模型交互形式提供支持。

5)开明式代理/流程

咱们在最后一局部将开明式代理和多代理聊天归为一类,由于它们作为在代理系统层面运转的框架具备共异性质。

在这个类别中另一个值得留意的工具是MetaGPT,虽然这个框架在本文的其余局部也有触及。MetaGPT以能够将“一行需求”作为输入并输入完整程序、钻研文档等而自豪。在外部,它为不同的言语模型交互高低文分主角色,如软件工程师、名目经理、架构师和品质保证人员。与AutoGPT相似,这些角色具备内置在工具中的固定揭示和才干,开箱即可经常使用。MetaGPT在外部编码了一个规范操作程序(SOP),它出现了一些构想中的努力于处置你义务的公司,并将这个SOP作为一种“算法”来编排不同角色之间的单干。MetaGPT准许经过参与新角色并定义揭示、才干及其与SOP的集成来启动裁减。这相似于AutoGPT中的插件概念。

BabyAGI也旨在应用言语模型智能口头一组义务。实质上,言语模型经常使用可用的口头代理来编排如何将义务合成为子义务以及如何成功这些子义务。

论断

近几个月来,大言语模型编程形象畛域有了清楚开展,涌现出少量盛行框架。咱们提出了一个7层形象模型来对所评价的库启动分类,并描画了咱们所观察到的关注点分别状况。而后,咱们从内在和内在特色方面钻研了五类框架。特意是,它们的内在特色包括能否易于裁减、它们支持哪些类型的特色以确保牢靠或稳固的输入,以及它们的结构如何以便能够与其余库和框架交互。内在特色包括社区和生态系统方面,例如,可复用的揭示战略,或基于该框架构建的可用于更丰盛和更特定畛域义务的库。为了经过这些特色和品质的视角对这些近期框架启动概览,咱们在表3中列出了它们各自的适用程序/库/生态系统、牢靠性、性能、可移植性和可裁减性。

译自(有删改):

原文链接:​ ​​ ​​

您可能还会对下面的文章感兴趣: