所有WIKI > L字母 > 什么是 LangChain?

什么是 LangChain?

LangChain 是一个开源编排框架,用于使用大语言模型 (LLM) 开发应用程序。LangChain 的工具和 API 在基于 Python 和 Javascript 的库中使用,可以简化构建聊天机器人(Chatbot) 和虚拟代理(AI Agent)等 LLM 驱动型应用程序的过程。

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

LangChain 由 Harrison Chase 于 2022 年 10 月推出,推出后迅速脱颖而出:截至 2023 年 6 月,它是 Github 上增长最快的开源项目。恰逢接下来的一个月隆重推出 OpenAI 的 ChatGPT,在生成式 AI 受到广泛欢迎之后,LangChain 在让发烧友更容易使用生成式 AI 方面发挥了重要作用。

LangChain 的工作原理

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

抽象是日常生活和语言的常见元素。 例如,“π”允许我们表示圆的周长与其直径的比值,而无需写出它的无限位数。同样,恒温器使我们能够控制家中的温度,而无需了解所需的复杂电路 — 我们只需要知道不同的恒温器设置如何转化为不同的温度。

LangChain 本质上是一个 Python 和 Javascript 的抽象库,代表使用语言模型所需的常见步骤和概念。这些模块化组件(如函数和对象类)充当生成式 AI 程序的构建块。它们可以“链接”在一起来创建应用程序,最大限度地减少执行复杂 NLP 任务所需的代码量和深入理解。尽管 LangChain 的抽象方法可能会限制专家程序员精细定制应用程序的程度,但 LangChain 使专家和新手能够快速进行实验和原型设计。

与 LLM 集成

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

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

此外,尽管基础模型(例如为 LLM 提供支持的模型)是在大量数据集上进行预训练,但它们并不是无所不知的。如果特定任务需要访问特定的上下文信息,例如内部文档或领域专业知识,则 LLM 必须连接到这些外部数据源。即使您只是希望模型能够反映对当前事件的实时感知,它也需要外部信息:模型的内部数据仅在预训练的时间段内是最新的。

同样,如果给定的生成式 AI 任务需要访问外部软件工作流程(例如,如果您希望虚拟代理与 Slack 集成),那么您将需要一种方法将 LLM 与该软件的 API 集成。

提示模板

提示是向 LLM 发出的指令。编写提示的“艺术”通常被称为提示工程,它能有效提供必要的上下文,让 LLM 以对您最有用的方式解读输入和结构输出。

LangChain 中的 PromptTemplate 类可以设置提示组成的格式,无需手动硬编码上下文和查询。提示的重要元素也同样作为正式类输入,如 input_variables。因此,提示模板可以包含并重现上下文、说明(例如“不要使用技术术语”)、指导响应的一组示例(即所谓的“少样本提示”)、指定的输出格式或标准化的待回答问题。您可以保存并命名一个有效的结构化提示模板,并根据需要轻松地重复使用。

顾名思义,是 LangChain 工作流程的核心。它们将 LLM 与其他组件结合起来,通过执行一系列功能创建应用程序。

最基本的链是 LLMChain。它只是调用一个模型和该模型的提示模板。例如,假设您将提示保存为“ExamplePrompt”并希望基于 Flan-T5 运行。您可以从 langchain.chains 导入 LLMChain,然后定义 chain_example = LLMChain(llm = flan-t5, prompt = ExamplePrompt)。要为给定输入运行链,只需调用 chain_example.run(“input”)

要将一个函数的输出作为下一个函数的输入,可以使用 SimpleSequentialChain。每个功能可以使用不同的提示、不同的工具、不同的参数甚至不同的模型,取决于您的具体需求。

索引

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

文档加载器
LangChain 为第三方应用程序提供多种文档加载器。这样可以轻松地从文件存储服务(例如 Dropbox、Google Drive 和 Microsoft OneDrive)、网络内容(例如 YouTube、PubMed 或特定 URL)、协作工具(例如 Airtable、Trello、Figma 和 Notion)、数据库(如 Pandas、MongoDB 和 Microsoft)等来源导入数据。

矢量数据库
与“传统的”结构化数据库不同,矢量数据库通过将数据点转换为矢量嵌入来表示数据点:以具有固定维数的矢量形式进行的数字表示,通常使用无监督学习方法对相关数据点进行集群处理。即使对于海量数据集,这也可以实现低延迟查询,从而大大提高效率。矢量嵌入还能存储每个矢量的元数据,进一步提高搜索可能性。

LangChain 提供超过 25 种不同嵌入方法以及超过 50 种不同矢量存储(云托管和本地)的集成。

文本分割器
为了提高速度和减少计算需求,通常明智的做法是将大型文本文档分割成较小的部分。LangChain 的 TextSplitters 将文本分割成具有语义意义的较小部分,然后可以使用您选择的方法和参数进行组合。

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

内存

默认情况下,LLM 对之前的会话没有任何长期记忆(除非将聊天历史记录用作查询的输入)。LangChain 可以通过向系统添加内存的简单实用程序解决这个问题,其选项范围从保留所有会话的全部内容到保留迄今为止的会话总结,再到保留最近的 个会话。

代理

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

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

工具

尽管 LLM 拥有强大的功能和广泛用途,但它们也有重要的局限性:即缺乏最新信息、缺乏特定领域的专业知识以及数学方面的普遍困难。

LangChain 工具是一组功能,使 LangChain 代理能够与现实世界的信息进行交互,以扩展或改进可以提供的服务。著名的 LangChain 工具示例包括:

  • Wolfram Alpha:提供强大的计算和数据可视化功能,实现复杂的数学功能。
  • Google 搜索:提供 Google 搜索访问权限,为应用程序和代理提供实时信息。
  • OpenWeatherMap:获取天气信息。
  • 维基百科:支持对维基百科文章信息进行高效访问。

总结

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

  • 聊天机器人:聊天机器人是 LLM 最直观的用途之一。LangChain 可用于为聊天机器人的特定使用提供适当的上下文,并通过聊天机器人自己的 API 将聊天机器人集成到现有的通信渠道和工作流程中。
  • 总结:语言模型的任务是总结多种类型的文本,从分解复杂的学术文章和成绩单到提供传入电子邮件的摘要。
  • 问题解答:使用特定文档或专业知识库(如 Wolfram、arXiv 或 PubMed),LLM 可以从存储中检索相关信息并阐明有用的答案。如果经过微调或适当提示,一些 LLM 即使没有外部信息也可以回答许多问题。
  • 数据增强:LLM 可用于生成合成数据,供机器学习使用。例如,可以训练 LLM 来生成与训练数据集中的数据点非常相似的附加数据样本。
  • 虚拟代理:LangChain 的代理模块与正确的工作流程集成,可以使用 LLM 自主确定后续步骤,并使用机器人流程自动化 (RPA) 采取行动。

转载自: https://www.ibm.com/cn-zh/topics/langchain

搜索、试用、集成国内外API!
幂简集成API平台已有 4671种API!
API大全