大语言模型学习笔记 LangChain简述

avatar
作者
猴君
阅读量:0

一、简述

        LangChain是一个由大型语言模型 (LLM) 驱动的应用程序开发框架。LangChain 旨在为开发人员提供一系列功能,利用大型语言模型简化应用程序的创建和管理。

        LangChain 可充当几乎所有 LLM 的通用接口,提供集中式开发环境来构建 LLM 应用程序并将其与外部数据源和软件工作流集成。LangChain 的模块化方法允许开发人员动态比较不同的提示甚至不同的基础模型,而无需重写代码。这种模块化环境还允许使用多个 LLM 的程序:例如,一个应用程序使用一个 LLM 来解释用户查询,另一个 LLM 来编写响应。

        LangChain 由 Harrison Chase 于 2022 年 10 月推出,随后迅速蹿红:截至 2023 年 6 月,它是 Github 上增长最快的开源项目。紧随其后的是 OpenAI 于次月推出的 ChatGPT,LangChain在广受欢迎之后, 在让生成式人工智能更容易被爱好者使用方面发挥了重要作用。 LangChain 可以促进 LLM 和自然语言处理 (NLP)的大多数用例,例如聊天机器人、智能搜索、问答、摘要服务,甚至能够实现机器人过程自动化的虚拟代理。

二、与 LLM 的整合

        LLM 不是独立的应用程序:它们是预先训练的统计模型,必须与应用程序(在某些情况下,是特定数据源)配对才能达到其目的。 

        例如,Chat-GPT 不是 LLM:它是一个聊天机器人应用程序,根据您选择的版本,它使用 GPT-3.5 或 GPT-4 语言模型。虽然 GPT 模型可以解释用户的输入并编写自然语言响应,但应用程序(除其他外)为用户提供了键入和阅读的界面以及控制聊天机器人体验的界面。即使在企业级,Chat-GPT 也不是唯一使用 GPT 模型的应用程序:微软使用 GPT-4 为 Bing Chat 提供支持。

        此外,尽管基础模型(如支持 LLM 的模型)是在海量数据集上进行预训练的,但它们并非无所不知。如果特定任务需要访问特定的上下文信息(如内部文档或领域专业知识),则 LLM 必须连接到这些外部数据源。

        即使您只是希望模型反映对当前事件的实时感知,它也需要外部信息:模型的内部数据仅在预训练的时间段内是最新的。同样,如果给定的生成式 AI 任务需要访问外部软件工作流程(例如,如果您希望虚拟代理与 Slack 集成),那么您将需要一种方法将 LLM 与该软件的 API集成。 虽然这些集成通常可以通过完全手动的代码实现,但 LangChain 等(还有一些其它选择,比如IBM watsonx平台)编排框架大大简化了该过程。它们还使尝试不同的 LLM 来比较结果变得更加容易,因为只需对代码进行很少的更改即可交换不同的模型。

三、LangChain 如何运作?

        LangChain 的核心是一个开发环境,它通过使用 抽象来简化 LLM 应用程序的编程:通过将一个或多个复杂过程表示为封装其所有组成步骤的命名组件来简化代码。

        几乎任何 LLM 都可以在 LangChain 中使用。只要您有 API 密钥,就可以将语言模型导入 LangChain 很容易。LLM旨在为所有模型提供标准接口。大多数 LLM 提供商会要求您创建一个帐户才能接收 API 密钥。其中一些 API(尤其是用于专有闭源模型的 API,例如 OpenAI 或 Anthropic 提供的 API)可能需要付费。

        许多开源模型,如 BigScience 的 BLOOM、Meta AI 的 LLaMa 和 Google 的 Flan-T5,都可以通过Hugging Face访问。使用任一服务创建帐户将允许您为该提供商提供的任何模型生成 API 密钥。 LangChain 不仅限于现成的基础模型:CustomLLM类允许自定义 LLM 包装器。同样,您可以使用Python SDK (其中包括 LangChain 集成)在 LangChain 中构建应用程序,这些应用程序使用您已经使用WatsonxLLM类(以及该模型的特定项目 ID )针对特定需求进行过训练或微调的模型。

        Langchain 的工作流程可以概括为以下几个步骤:

        提问:用户提出问题。

        向语言模型查询:问题被转换成向量表示,用于在向量数据库中进行相似性搜索。

        获取相关信息:从向量数据库中提取相关信息块,并将其输入给语言模型。

        生成答案或执行操作:语言模型现在拥有了初始问题和相关信息,能够提供答案或执行操作。

        如上图所示展示了一个智能问答系统的工作流程,它从用户提出的问题(Question)开始,然后通过相似性搜索(Similarity Search)在一个大型数据库或向量空间中找到与之相关的信息。 得到的信息与原始问题结合后,由一个处理模型分析,以产生一个答案(Answer)。 这个答案接着被用来指导一个代理采取行动(Action),这个代理可能会执行一个API调用或与外部系统交互以完成任务。 整个流程反映了数据驱动的决策过程,其中包含了从信息检索到处理,再到最终行动的自动化步骤。

四、Langchain 核心概念

        Langchain 由几个核心概念组成。

1、LLM Wrappers

        这些包装器允许你连接到大型语言模型,如 GPT-4 或 Hugging Face 提供的模型。Prompt Templates:这些模板让你避免硬编码文本输入。你可以动态地将用户输入插入到模板中,并发送给语言模型。Indexes:索引帮助你从语言模型中提取相关信息。Chains:链允许你将多个组件组合在一起,解决特定的任务,并构建完整的语言模型应用程序。Agents:代理允许语言模型与外部API交互。

        上图展示了一个复杂的语言处理系统,其中包含模型、提示、链、代理和嵌入与向量存储。 模型 Models 负责理解和生成语言,提示用于引导模型输出; 链条 Chains 代表将多个步骤串联起来完成复杂任务的过程; 代理 Agents 则用于让模型与外部环境互动,比如执行API调用。 Embedding 嵌入与向量存储 VectorStore 是数据表示和检索的手段,为模型提供必要的语言理解基础。

2、索引

        为了完成某些任务,LLM 需要访问其训练数据集中未包含的特定外部数据源,例如内部文档、电子邮件或数据集。LangChain 将此类外部文档统称为“索引”。

        文档加载器

        LangChain为第三方应用程序提供各种文档加载器。这样可以轻松从文件存储服务(云存储)、Web 内容(视频网站、web url)、协作工具、数据库(如 Pandas、MongoDB)等来源导入数据。

        向量数据库

        与“传统”结构化数据库不同,向量数据库通过将数据点转换为向量嵌入来表示数据点:以具有固定维数的向量形式的数值表示,通常使用无监督学习方法对相关数据点进行聚类。这使得即使对于海量数据集也能实现低延迟查询,从而大大提高效率。向量嵌入还存储每个向量的元数据,进一步增强了搜索可能性。 LangChain 提供超过 25 种不同嵌入方法的集成,以及超过 50 种不同的向量存储(云托管和本地)。

        文本分割器

        为了提高速度并减少计算需求,将大型文本文档分割成较小的部分通常是明智之举。LangChain 的TextSplitters将文本分割成小的、语义上有意义的块,然后可以使用您选择的方法和参数将它们组合在一起。

        检索

        一旦连接了外部知识源,模型必须能够根据需要快速检索和集成相关信息。与 watsonx 一样,LangChain 提供检索增强生成 (RAG):其检索器模块接受字符串查询作为输入,并返回Document列表作为输出。

3、记忆

        默认情况下,LLM 不具有任何先前对话的长期记忆(除非该聊天记录用作查询的输入)。LangChain 使用简单的实用程序为系统添加内存来解决此问题,选项范围从保留所有对话的全部内容到保留迄今为止的对话摘要,再到保留最近的n次交流。

4、代理

        LangChain 代理可以使用给定的语言模型作为“推理引擎”来确定要采取哪些行动。在为代理构建链时,输入包括:

  • 可以利用的可用工具列表。
  • 用户输入(如提示和查询)。
  • 任何相关的先前执行的步骤。

五、LangChain 用例

        使用 LangChain 制作的应用程序为各种用例提供​​了极大的实用性,从简单的问答和文本生成任务到使用 LLM 作为“推理引擎”的更复杂的解决方案。

        聊天机器人:聊天机器人是 LLM 最直观的用途之一。LangChain 可用于为聊天机器人的具体用途提供适当的上下文,并使用自己的 API 将聊天机器人集成到现有的通信渠道和工作流程中。

        总结:语言模型可以负责总结多种类型的文本,从分解复杂的学术文章和成绩单到提供收到的电子邮件的摘要。

        问答:使用特定文档或专门的知识库(如 Wolfram、arXiv 或 PubMed),LLM 可以从存储中检索相关信息并给出有用的答案。如果经过微调或适当提示,一些 LLM 甚至无需外部信息就能回答许多问题。

        数据增强: LLM 可用于生成用于机器学习的合成数据。例如,可以训练 LLM 来生成与训练数据集中的数据点非常相似的其他数据样本。

        虚拟代理:与正确的工作流程集成,LangChain 的代理模块可以使用 LLM 自主确定后续步骤并使用机器人流程自动化 (RPA) 采取行动。

广告一刻

为您即时展示最新活动产品广告消息,让您随时掌握产品活动新动态!