大型语言模型(LLM)的横空出现在NLP自然语言处理领域掀起了革命。它们能够理解和生成高品质的文本,应用于问答、翻译等多种任务。
LangChain框架则是专为开发LLM应用而设计,提供了灵活且高效的解决方案。本文将带你深入了解如何利用LangChain从零开始开发强大的LLM应用。
什么是大型语言模型(LLM)?
大型语言模型(Large Language Model,简称LLM)是一种机器学习模型,利用大量的数据与资料进行训练,它可以够理解并且生成自然语言。 LLM的核心是类神经网络,这种架构适合处理序列型的数据资料,如文本内容。透过学习词汇与短句之间的关系,LLM可以执行多种语言任务,例如回答问题、生成文本内容、翻译语言以及对文本内容进行摘要。
现在,大型语言模型之所以受到瞩目,得益于其强大的生成和理解能力,使得LLM在处理复杂的语言任务方面表现卓越。就以OpenAI GPT-4 这样的模型来说,它能够生成酷似于人类写作的文章,甚至能够模拟名人的风格创作诗歌和编写剧本。这些模型的创新不仅推动了技术的进步,也改变了我们与技术互动的方式。
大型语言模型的应用范围非常广泛,从虚拟助理到AI聊天机器人,再到AI搜索引擎和文本内容编辑器。这些应用在各行各业中发挥着重要作用,大大地提升了自动化和AI化的水准,实具有革命性意义,成为现代科技不可或缺的一部分。
LangChain框架概述
LangChain是一个用来开发应用程式的框架,这个框架它是专门为开发基于大型语言模型(LLM)的应用而设计的。它的核心理念就是让开发者能够轻松地建立和架构LLM大型语言模型的各种应用程式,用来实现各种自然语言处理的任务。
LangChain由Harrison Chase等人共同开发。自2024年1月发布了第一个稳定版本以来,因其灵活的特性和强大的功能,迅速获得了大众广泛的关注。
他们设计LangChain的目标,主要包括了提供简单且容易操作的工具,帮助开发者可以轻松的在不同的语言模型之间切换,并能够轻松地整合其他外部的资源。这使得开发者不需要特别为某个特定语言模型撰写多种版本的程式码,大大提高了应用程式的开发效率。
以目前来说,LangChain不仅支援Python、同时也支援JavaScript这两种主要的程式语言,为开发者提供了各种丰富的元件和工具,以便快速建构功能强大的应用服务。
此外,不仅包含LangChain框架主体,在LangChain的生态系统中还包括各种延伸功能,例如LangServe和LangSmith。
LangServe是一个用于将流程机制部署为REST API的套件,而LangSmith则是一个专门为开发者设计的平台,它提供了测试、评估和追踪LangChain应用服务的工具。这些工具共同构成了一个强大且灵活的开发环境,满足不同层次和需求的开发者。
综上所述,LangChain框架以其便利性和强大的功能为开发者提供了一个不错的开发平台,让开发者们能够充分发挥大型语言模型LLM的潜力,能建造出各种创新的应用服务。
来源:https://python.langchain.com/v0.2/docs/introduction/
LangChain的组成元件
我们可以将LangChain框架分成多个核心元。每个元件都被设计用来处理大型语言模型(LLM)应用程式的不同方面,提供了高度的灵活性和可扩充性。以下是LangChain的主要组成元件:
1. Model元件
我们可以说Model元件是LangChain框架的基础,它支援以下两种类型的语言模型:
- LLMs 语言模型
- ChatModel 聊天模型
在LangChain框架中,LLMs 指的是text completion模型,主要功能在于文字的生成、完成与摘要任务。它可以接受一组文字字串prompt作为输入值并返回另一组字串内容作为文章内容的补全,我们也可以说它就像是一个文字接龙。
与上面text completion模型不同的是,ChatModel 聊天模型可以参与对话。它会接受一系列的聊天讯息作为输入,而输出另一条讯息作为答覆。在LangChain里面会有三个不同的角色标记,分别是System 、Human 和AI。在OpenAI里面也存在三类标记,只不过在OpenAI里面使用的名称与此处相异,分别是system、 user 和assistant。
在模型的选用上,LangChain与主要的语言模型供应商,如OpenAI、Anthropic和Hugging Face等合作,以便于开发者使用这些模型。
2. Prompt Template元件
此元件提供了建立和使用提示样板(prompt Template)的工具,这些样板不会被特定的模型所绑定,可以在不同的LLM大型语言模型之间轻松切换、重复使用,开发者只需要替换提示样板中关键的部分,就可以变化出多种不同的指令。这种设计方式使得开发者可以建立标准化的提示,进而增加使用上的普遍性与弹性。
3. Output Parser元件
在与大型语言模型沟通的过程中,既然我们可以针对提问时的内容客制化提示的样板,那么想当然的对于大型语言模型回覆的答案也应该可以客制化结果吧!没错,Output Parser元件就具备这样的功能。它是个输出解析器,用于解析语言模型的输出,并将其转换为更符合我们需要、更具备结构化的格式。
LangChain提供了包括多种输出的解析器,如JsonOutputParser可以将输出解析为JSON物件、TextOutputParser可以解析为字串、CsvOutputParser则可以解析为CSV文件和XmlOutputParser解析为XML档案,这些多样化的输出格式,可以满足我们不同的使用情境需求。
4. Chain元件
Chain元件是将各个模型和工具串联起来的流程链,使得开发者能够结合多种元件建立复杂的应用服务。流程链的设计使得不同的LLM大型语言模型和工具可以无缝的协作,从问答到文本生成等各种任务得以顺利的执行。
5. Memory元件
若要开发一个可以持续的与它对话的AI聊天助理,最重要的是可以「记住」使用者与AI助理之间的对话过程。在LangChain中有一个Memory元件,它可以从将对话记忆在这个元件中,让语言模型参考对话纪录再进行回覆,并且取得回覆后也可以将结果与问题再存入Memory元件中。
LangChain提供了多种实现记忆的方式来满足不同使用场景的需求,包括将对话纪录存入如SQ-Lite等的资料库中,或者是将讯息存在文字档案里面。
6. Agent元件
有时候当我们想要让LLM模型回答的结果更符合我们的需要时,我们会希望LLM模型可以回答我们昨天发生的事情(我们知道像ChatGPT之类的大型语言模型的学习资料只到2023年) ;有时候我们又会希望大型语言模型回答一些与计算有关的问题(当然,我们知道像ChatGPT之类的大型语言模型,虽然能言善道,但是碰到回答数学问题时,常常都是一塌糊涂),不要随随便便就给我们一个错误的答案。然而,该如何做?
LangChain中的Agent代理元件是一个可以为LLM大型语言模型加上其他功能的程式工具,让语言模型适时的根据使用者的对话来选择需要采用的工具,利于于建立以自然方式与使用者互动的应用服务。
换句话说,它会依据我们输入的指令让大型语言模型选择下一步应该采取的行动,当该行动完成之后会自动将执行的结果再送回给模型,让模型继续选择下一个步骤,直到模型认为已经得到所要的答案之后才停止。
7. Retrieve元件
我们都知道ChatGPT之类的大型语言模型,它的学习资料只到2023年为止的公开资讯。如果想要建立能够回答企业内部私有的或者是特定领域相关的AI工具,该如何处理?理论上来说,我们可以将整份内部文件「喂」给语言模型,让它只针对文件内容进行回答。然而实际上这样做的话每一次的对话都需要将整份文件放入与模型对话的prompt指令中,会让使用的token数量大增,甚至于超过模型可以承受的token数量。此外,让模型直接在整份文件中大海捞针的找答案回答,可能也不会得到精确的结果。因此,目前大家会采用一种称为RAG(Retrieval-Argumented Generation)的方式来处理,这种方式是以检索文件而取得的资料来扩充语言模型的生成能力。
在LangChain中的Retrieve元件,它提供了一套用来从各种不同来源(包括资料库、文件和网路)检索数据的工具。可以将资料进行切片,并且将内容转换成向量之后,再提供检索。在使用者对模型寻问问题时,会先从向量化之后的资料片段中,寻找相似度较高的部分片段给模型作为回答的参考,模型依据这个片段的资料生成问题的答案。
上述这七个元件共同组成了一个强大且灵活的框架,使开发者能够轻松地建构和部署LLM的应用服务,并充分发挥大型语言模型的潜力。
LangChain的优势
由于LangChain框架具备的各种优越性,使它成为大型语言模型(LLM)应用服务开发上的首选。
灵活性
LangChain提供了高度的灵活性,让开发者在不同的语言模型之间可以无缝的切换,不需要为不同的语言模型撰写多种版本的程式码,明显提高了开发的效率。
简单易用
LangChain拥有丰富的元件库,包括模型、提示样板、输出解析器、流程链、记忆体和代理等,这些元件设计简单易用,可以自由组合,满足不同应用场景的需求。这使得开发者能够快速建立功能强大的服务,进而加速产品的上市时间。
轻松扩充
LangChain具备强大的扩充性,能够轻松利用外部的资源和工具,如资料库、文件和网络检索模组。这使得开发者能够建立更为复杂和智慧的应用,实现多样化的功能。
生态系统
LangChain的生态系统之中,包括LangServe和LangSmith等工具,替开发者提供了全方位的支援。从开发、测试到部署,大大地简化了整个开发流程,并提升了产品的稳定性和效能。
Model I/O
如果从LangChain整个输入(Input)与输出(Output)的范畴来看,LangChain从最初的prompt提示,到与大型语言模型的互动,最终输出特定格式的结果。这个过程可以称为模型的输出/输入(Model I/O)。这个范畴包括了与大型语言模型沟通的所有环节。
图片来源:Model I/O
参考资料:https://python.langchain.com/v0.1/docs/modules/model_io/
如何开始使用LangChain
提到那么多好处与功能,让我们在此示范一下如何开始使用LangChain的范例。当然这里示范的部分只是简单的开始使用LangChain,就像是一般我们在开始使用一个程式语言时,会进行的「Hello World」一样罢了。
安装langchain套件
在使用langchain 之前,请在自己的电脑中先建立一个虚拟环境,然后在虚拟环境中安装langchain套件。
pip install langchain
使用OpenAI模型
在此我们将使用langchain_openai套件,这个套件将OpenAI模型包装成一个Langchain套件,方便我们取用OpenAI模型,使我们在取用模型时更为简单。请在同样的环境中执行下面的指令安装langchain_openai套件。
pip install langchain_openai
Langchain除了将OpenAI打包成套件外,它也针对Google gemini等模型打包为套件,您如果不喜欢使用OpenAI,可以选用其他的大型语言模型。 (参考:Langchain Doc)
引入套件
安装完毕之后,就可以建立一个python档案,并且引入langchain_openai使用。程式码如下:
from langchain_openai import ChatOpenAI
llm = ChatOpenAI(model= "gpt-4-turbo" , apikey= "your-api-key" )
msg = llm.invoke([( "human" , "What's the oldest known example of cuneiform" ) ])
print (msg.response_metadata)
在上面的程式码中,你可以在ChatOpenAI中指定model的参数。 model可以让你指定想要使用的模型,上面的范例采用的是OpenAI的gpt-4-turbo 模型,当然您也可以改成比较便宜的gpt-3.5-turbo模型。
结语
具备灵活性和强大功能的LangChain框架,为开发大型语言模型(LLM)应用服务提供了一个理想的平台。透过简单的配置和丰富的元件库,无论是文件内容生成、问答系统还是对话机器人这些高效能并且智慧的应用服务,都可以让开发者快速的建立。
此外,LangChain还附有的记忆功能和流程链设计,使得应用开发更加流畅和便利。如果再结合LangServe和LangSmith等工具,整个开发、部署和优化过程将变得更为简单。使用LangChain,开启你的LLM应用服务开发之旅,必能发掘无限可能。
RA/SD 衍生者AI训练营。发布者:chris,转载请注明出处:https://www.shxcj.com/archives/3090