LangChain是一个开源的大模型应用开发框架,为什么称之为框架呢?原因就是它将我们构建大模型应用的通用步骤进行了封装,使其模板化,通用化,这就使我们在构建大模型应用时没必要对那些通用的东西重复造轮子,减少了工作量,同时也可以使各家厂商可以快速的对接互通,该框架主要包含以下四个部分,它们构成了LangChain的基本骨架。
首先是模型,LangChain集成了很多我们常见的预训练模型,例如openai,一旦我们安装好LangChain,就可以直接通过LangChain建立相关的模型对象,同时它还提供了很多提示词模板,可以使我们像调用函数一样,构建我们的提示词,例如问答模板,连接数据库的模板,调用不同api的模板等等,这都大量减少了我们重复造轮子的工作。
其次是存储,这个主要是为了让大模型具备短期记忆能力,以便大模型可以根据上下文更好的与用户交互,其实现的核心原理就是将一定范围内的对话存储起来,当用户将下次对话问题发送过来后,将其与之前的对话进行合并,一块儿给大模型,大模型推理后再进行响应,LangChain本身也提供了几种常用存储组件,例如ConversationBufferMemory,ConversationBufferWindowMemory等等,我们可以根据自身的业务特点选择相关的组件使用。
第三是模型链,链其实就是逻辑流程,简单来讲就是if else这种结构,即如果是这种情况,模型该怎么处理,如果是另外一种情况模型该怎么处理,链与链之间可以相互组合,从而构成更大的逻辑链路,LangChian中最基础的链就是LLMChain,其它复杂的链都是在这个基础上构建的,例如顺序链,路由链等等。
第四是代理即我们常说Agent,我们可以把自己写的一些工具,比如查询天气预报,或者点餐,或者写的一些其它小工具,利用Langchain的代理功能,生成相应的agent,直接在构建的大模型应用中使用。
我们还可以使用LangChaing构建基于文档的问答系统,即RAG(知识增强检索),其好处就是可以低成本的利用大模型来构建的我们的私有知识库,免去了重新训练专有大模型的成本,Langchain提供了两个核心组件来完成这件事,一个是表征模型(embedding model),一个是向量库,表征模型负责将私有数据向量化,向量库负责存储这些私有数据,其整个交互流程是这样的,用户提出问题,表征模型将问题向量化,框架提供相关的检索组件在向量库查询相关的文本,之后将查到的文本与用户问题,及模型本身对于问题的回答,共同提交给大模型,大模型以此为最终问题输入,进行推理回答。
