输入“/”快速插入内容

解读LangChain

2024年7月9日创建
作者:半吊子全栈工匠 | 喔家ArchiSelf
随着OpenAI在2020年发布了开创性的GPT-3,我们见证了LLM的普及度稳步攀升,如今还在逐渐升温发酵。这些强大的人工智能模型为自然语言处理应用带来了新的可能性,使开发人员能够创建更为复杂、类似于人类交互的聊天机器人、问答系统、摘要工具等产品。
LangChain作为一个多功能框架应运而生,旨在帮助开发人员充分发挥LLMs在各种应用中的潜力。基于“链式”不同组件的核心概念,LangChain简化了与GPT-3/4,Bloom、Huggingface等LLM的工作过程,允许开发者无缝地构建基于LLM的高级应用程序。
1. Langchain 是什么
LangChain是一种创新性的框架,是语言模型驱动的应用程序的开发方式,关于应用框架的概念和使用可以参考《 全栈认知:应用框架 》和《 探索嵌入式应用框架(EAF) 》。LangChain 是基于大模型的应用开发框架,是一个开源的Python库,旨在通过以下方式更轻松地构建基于LLM的应用程序:
向多种不同的基础模型提供通用接口,
提供管理Prompt提示的框架,以及
提供长期记忆能力、外部数据以及其他代理程序的中央接口,用于处理LLM无法处理的任务(例如计算或搜索)。
通过融合先进原则,LangChain正在重新定义通过传统API可以实现的极限。此外,LangChain应用程序是主动的,使语言模型能够轻松地与其环境交互和适应。Langchain由几个模块组成。正如其名称所示,连接不同的模块在一起是Langchain的主要目的。这里的想法是将每个模块链接在一个链中,并最终使用该链一次性调用所有模块。
2. LangChain 中的核心概念
LangChain简化了Prompt提示词的管理,提供提供了优化能力,为所有LLM提供了通用接口,并包括用于处理LLM的常用程序。LangChain为链式调用提供了标准接口,使开发人员能够创建超出单个LLM调用的调用序列。LangChain 还为开发人员提供了创建与外部数据源集成的链的能力,此功能使基于特定数据而不是用于训练语言模型的通用数据生成文本成为可能。而且,LangChain为开发人员提供了一个标准接口,使LLM能够根据LLM的输出做出明智的决策,确定采取哪些行动以及何时采取这些行动。记忆能力是LangChain中的一个关键概念,因为它涉及在链/代理的调用之间保留状态。LangChain还提供了一个标准的记忆接口、一系列的记忆实现以及使用记忆的链/代理的示例。
2.1. 模型
大型语言模型(LLM)是指由具有众多参数的神经网络组成并在大量未标记的文本上进行训练的模型。有许多技术巨头和学术组织都有着自己的LLM,例如:OpenAI的GPT-3/4,Google的LaMDA/PaLM,Meta AI的LLaMA,百度的文心,阿里的千问,讯飞的星火,清华的GLM等等。借助Langchain,应用成效与大型语言模型的交互变得更容易。
LangChain轻松地集成和使用不同的语言模型,用于增强应用程序的功能,可连接到大多数第三方LLM可用的API。它具有与公共LLM、聊天和embedding模型的 ~40 个API连接。LangChain还通过asyncio库为LLM提供异步支持,还为同时调用多个LLMs的情况提供了异步支持。我们可以使用agenerate方法异步调用LLM,还可以编写自定义的LLM包装器。每个大模型都有自己的优点、令牌的使用次数和用例。更多的细节,可以到相关大模型的官网去阅读更多信息。
2.2. Prompt提示
LangChain允许有效地管理、优化和序列化Prompt提示,允许开发者使用模板构建动态提示。它可以根据上下文窗口大小和用作上下文(对话历史记录,搜索结果,以前的答案等)的输入变量适应不同的LLM类型。这有助于从语言模型生成更准确且具有上下文相关性的响应。
Prompt提示是我们向LLM系统提供的输入,以改进我们的答案,使其更准确或更能够适应我们的具体用例。很多时候,我们可能希望获得比纯文本更具体结构化的信息。许多基于对比预训练和零样本学习的目标检测和分类算法都将Prompt作为有效的结果输入。例如,OpenAI的CLIP和META的Grounding DINO都使用Prompt作为预测的输入。
在Langchain中,可以根据我们想要的答案设置Prompt模板,然后将其链接到主链以进行输出预测,还有一个用于结果精炼的输出解析器的功能。输出解析器负责指示模型输出的格式,并将输出解析为所需的格式,必要时需要重试。
模板是指我们希望回答的特定格式或蓝图。LangChain提供了预先设计的Prompt模板,可以为不同类型的任务生成Prompt。然而,在某些情况下,预设模板可能无法满足要求,可以使用自定义的提示模板。
2.3. 记忆能力
LangChain为记忆能力提供了标准接口和一系列实现,为LLM提供了访问对话历史记录的权限。它促进了在链或代理的调用之间保持状态的持久性,增强了模型的知识召回能力。
LangChain在默认情况下以无状态模式运行,这意味着独立处理每个传入的查询。然而,对于某些应用程序,如聊天机器人,无论是短期还是长期,保留前面的交互非常重要。这就是“记忆能力”概念发挥作用的地方。为了跟踪用户与语言模型的交互,LangChain的记忆能力涉及将聊天消息序列转化为ChatMessages,并从中摄取、捕获、转换和提取知识。在LangChain中有许多不同的记忆类型,每一种都有其处理消息序列的独特方式。在使用记忆能力时,一种是独立的函数,它们从消息序列中提取信息,另一种是如何在链中使用这种类型的记忆。LangChain的记忆能力可以返回多个信息,例如最近的N个消息或所有先前消息的摘要,返回的信息可以是一个字符串或一个消息列表。
LangChain提供了两种形式的记忆能力组件。 首先,提供了管理和操作以前聊天消息的辅助工具,这些工具被设计为模块化和可用的,适应于各种用例。 其次,LangChain提供了将这些 常 用程序集成到链中的简便方法,使它们具有高度的适应性。
2.4. 索引