Skip to content

LangChain 简介:为什么需要它?

目录

现在的 AI 大模型能够回答问题、写文章、编写程序、生成图片、生成视频等。自 2022年底 OpenAI 推出 ChatGPT 以来,大模型激发起产业界和公众对 AI 的巨大热情。所谓大模型,通常指的是生成式 AI(Generative AI)这一类别的预训练深度学习模型。

生成式 AI 主要包括两大类:一类是基于文本训练的 大语言模型(LLM),一类是图像生成模型如稳定扩散模型(Stable Diffusion)。值得注意的是,它们背后采用的是同一种人工智能神经网络架构,即2017年由谷歌的八名研究人员提出的Transformer 架构

当下,众多公司或研究机构纷纷推出开源或闭源模型,它们可用于问答、写作、翻译、客服等众多场景。通常认为,这些 AI 模型将能够大幅度提升管理学家彼得·德鲁克所说的知识工作者的工作效能。我们将主要关注大语言模型。

但仅有模型是不够的,要能用上 AI 大模型的能力,普通人还需要有直观界面和良好体验的 AI 应用。对话机器人 ChatGPT 即是 OpenAI 依托自己的大语言模型(GPT-3.5、GPT-4等)开发的 AI 应用。

协助开发者基于大语言模型开发 AI 应用的「AI 应用开发框架」应运而生,有 LangChain、LlamaIndex、Coze/Dify 等。在这一系列教程中,我们将重点介绍 LangChain 的核心设计,讨论如何使用它以及如何用它更高效地开发 AI 应用。

在首篇教程中,我们将先暂不涉及具体的代码开发与功能实现,而先总体上回答两个方面的问题:

  • 大语言模型、提示语、AI应用分别是什么?
  • LangChain 是什么?为什么需要使用它?

如果你已经很熟悉相关的内容,而希望立刻探索 LangChain 框架的使用,你可以直接进入下一篇教程:LangChain 快速启动:安装与使用

AI 应用与调用链

在本系列教程中,AI 应用通常能协助用户利用模型完成特定的生成型任务,比如文档问答、文章修改、生成代码等。其核心业务逻辑是包括一次或多次调用大语言模型的工作流(Workflow)。

在 LangChain 中,这个工作流被称作 Chain(预设的工作流) 或 Agent(大语言模型参与执行步骤与工具的选择)。在这里简化起见,我们将 AI 应用的业务逻辑统称为“调用链”,即它包括了 Chain 与 Agent。

请注意,与之前主要进行数据预测的判别型 AI 模型及其应用不同,生成式 AI 应用的 工作流的最终目标通常是生成新的内容。

在下面的讨论中,我们主要使用的是大语言模型,接下来,我们将使用 AI 模型、AI 大模型、AI 大语言模型、LLM、或简单地说模型来指代它们。

1. AI 大语言模型与 AI 应用简介

普通人对 AI 大语言模型的第一反应是:它很神奇,当我们向它提问时,它能够以通顺的语言、正确的信息进行回答。

它拥有至少普通人水准的语言水平,也至少拥有普通人水准的知识水平。你要注意,它所给出的回应可能有错。当模型信心十足地给出错误的回应时,我们称模型出现了幻觉(hallucination)。

我们将从如下五个方面逐步深入去理解 AI 大语言模型和 AI 应用:

  1. AI 大语言模型的训练与推理
  2. AI 大语言模型的使用原理
  3. AI 应用:ChatGPT 对话机器人
  4. AI 应用开发框架:如 LangChain
  5. RAG,Chain 与 Agent

1.1 AI 大语言模型的训练与推理

图:大模型包括训练与推理两个阶段

我们使用的 AI 大模型是预训练后的人工神经网络模型。如图所示,大模型的生命周期包括两大阶段:

  • 第一阶段:预训练(pre-train)。通过海量文本数据对深度学习人工神经网络模型进行训练,直到获得理想的模型参数(权重)。通常,只有大型机构才有实力从头开始进行模型的预训练。
  • 第二阶段:推理(inference)。在服务器上运行模型,针对用户的查询,模型给出回应。我们既可以通过 API (比如 OpenAI 的 API)访问别人运行的模型,也可以采用开源模型的权重自行搭建推理服务。

1.2 AI 大语言模型的使用原理

作为用户使用 AI 大语言模型时,我们的使用过程可拆解为直观的「一问一答」两步:

  • 第一步:我们向模型发起查询。通俗地说,我们向模型「提问」。
  • 第二步:模型用文本补全或对话补全处理查询,然后给出回应。这是模型在「回答」。

大语言模型通常有多种处理模式,其中常见的是这里提到的两种:

  • 文本补全。你给出一段文本,模型按你的叙述补全后续的文本。
  • 对话补全。你和AI进行对话。你提出问题或要求,AI给出回答。

当下,越来越多的 AI 大语言模型提供的主要接口是对话补全,也即对话模型(chat model)。现在,越来越多的应用是基于对话补全接口开发的。

1.3 AI 应用:ChatGPT 对话机器人

普通人能直接使用的 AI 应用多是类似 ChatGPT 这样的对话机器人,如图左图所示,右图则是 Poe 对话机器人平台,支持多种模型。

对话机器人用户界面加上它背后的应用逻辑,就构成了一个典型的 AI 应用,如下图所示包括三个部分:「模型-业务逻辑-应用界面」。它做的是,用界面接受用户的请求,将之处理成向 AI 大模型的查询。在获得模型回应后,它将回应在界面上呈现出来。

以 ChatGPT 、文心一言等对话机器人为例。当我们向它提问时,它将我们的提问和系统提示语组合起来,提交给模型去生成回应,然后将回应作为机器人的回复呈现在对话界面中。我们与它继续对话下去时,它会处理我们的对话历史,将系统提示语、对话历史以及新提问组合起来给模型。

要组织一个 AI 应用的业务逻辑,开发者需要处理多个环节:包括提示语、模型调用与返回、知识库查询,以及其他第三方工具如搜索、代码运行等。以 ChatGPT 的高级数据分析功能(原名为代码解析器)为例,它将用户的请求转变 Python 代码生成任务,模型生成代码后,它再建立一个系统环境去运行代码,最终将代码运行结果给到用户。也就是说,它调用了代码运行这个第三方工具。

1.4 AI 应用开发框架:以 LangChain 为例

由以上讨论可以看到,一个 AI 应用要处理复杂的业务逻辑,因此,类似 LangChain 这样的「AI 应用开发框架」(也称编排 orchestration)就出现了,这些 AI 应用开发框架能协助开发者快速地构建包括 AI 模型调用在内的业务逻辑。

现在的 AI 应用开发框架主要有三类:

  • 第一类是云服务平台(如微软 Azure、百度千帆)提供的从模型微调、模型推理在内的全方位服务。
  • 第二类是 LangChain、LlamaIndex、PromptFlow等开源库。
  • 第三类是 AI 应用SaaS 平台。Dify、Coze等平台甚至能让非技术人员也能通过网页界面快速搭建复杂的 AI 应用。

如上提到的几个常见 AI 应用开发框架各有特别,对比如下:

  • LangChain,主要用于应用的编排,同时提供 Python 和 JavaScript版本。
  • LlamaIndex,主要为引入资料库提供了多种便捷的索引与检索组件。
  • Dify、Coze,提供简洁的界面,让非技术人员也能处理提示语设置、引入知识库、定制工作流等。

在2023年底,OpenAI 为自己的模型推出了 Assistant 接口,这一接口现已经成为行业的事实标准。这实际上也是在提供一个易用的 AI 应用开发框架,让开发者可以方便地处理上传文档进行检索增强生成(RAG)、调用第三方工具(通过 Action 功能)。面向普通用户的 GPTs、GPT Store,则是为 Assitant 接口加上界面,让普通人也能方便地在 ChatGPT 内创建 AI 应用。

总的来说,这些 AI 应用开发框架对 AI应用 的业务逻辑进行封装,让开发者能够快速地开发应用。它们通常为应用开发者提供如下功能:

  • 连接多种 AI 模型,
  • 方便地处理提示语模板,
  • 使用知识库进行检索增强生成(RAG),
  • 将应用、模型和其他工具连接起来,
  • 以及 LLM 观测等功能模块。

1.5 RAG,Chain 与 Agent

如果关注 AI 应用,你听到频率最高的两个词可能是 RAG(检索增强生成)和 Agent(智能代理)。其实,最值得关注的反而是 LangChain 名字中的 Chain。

当我们向 AI 模型提问时,一种方式是直接运用已经通过预训练纳入到模型中的知识,另一种方式是我们额外提供资料,要求模型按提供的资料来生成。所谓检索,指的是当用户提问时,在外部知识库中进行检索,匹配出相应的资料后,交由 AI 模型去进行生成。这就是所谓的 RAG (检索增强生成)。

Agent(智能代理)所代表的设想是,将 AI 大模型看成是有智能的:我们给它一个任务和目标,它自行选择相应的工具、步骤去达成目标。Agent 是当前的热门探索方向,主要的思路是用大语言模型来作为 Agent 的「大脑」。但我们必须承认,这些探索离实际应用仍较远。

当前的主要 AI 应用实际更多是由一系列流程组成的工作流,比如:

  1. 通过用户界面,用户发起提问请求;
  2. AI 应用将用户提问和系统提示语结合,形成向模型的提问;
  3. AI 应用接收模型的回应,将它转换成便于用户查阅的形式呈现在界面上。

在 LangChain 的语境中,Agent 则比上述智能代理要简单得多:它能够自行选择工具。在 LangChain 中,Chain 是预先设定并编程固定下来的流程;而 Agent 中,我们调用 AI 大模型来决定选择何种工具。

比如,一个简单的能够让 AI 模型按需选择工具与路径的 Agent 如下:

  1. 通过用户界面,用户发起提问;

  2. AI 应用将用户提问和系统提示语结合,形成向模型的提问;

  3. AI 模型来回答时,自行判断是否需要调用搜索工具

3.1 需要,则 AI 应用调用搜索工具,用搜索结果作为上下文再次向模型提问;

3.2 不需要,AI 模型直接给出回应

  1. AI 应用接收到模型的回应,将它转换成便于用户查阅的形式呈现在界面上。

此外,在开发 AI 应用时,我们还可以针对特定任务去对 AI 大模型进行精调(fine-tune),即采用一组数据集去微调它的参数,让它能够比原模型更好地适应这一特定任务。在这一组教程中,我们将不涉及精调的话题。

至此,我们从五个方面完成一个简单的 AI 大语言模型和 AI应用的简介。相信你对 AI 大模型、AI 应用已经有了必要的认识。

接下来,我们将开始介绍 LangChain 的基本原理,并探讨一个重要的问题:我们为什么需要使用它?

2. LangChain 是什么?为什么需要它?

简言之,LangChain 是一个 AI 应用开发框架。它同时提供 Python 和 Javascript 版本的开源库,让开发者能够:

  • 方便地连接多种 AI 大语言模型,
  • 组织自己的提示语模板,
  • 连接其他组件如加载文档或搜索、连接向量库
  • 最终编排形成自己的 AI 应用的业务逻辑。

2.1 LangChain 的整体架构

在2023年生成式 AI 的快速发展中,LangChain 也迅速扩张。在2024年初,它的整体架构如下图所示,其中深色部分是狭义的 LangChain 开源库。它现在包括三大部分:

  • LangChain 库,包括:LangChain-Core, LangChain-Community, LangChain。
  • LangServe 与Template 模板。其社区现在提供一系列易复用的 AI 应用模板,这些知识之前主要用 Jupyter Notebook 形式的 Cookbook 形式提供。开发者可以用 LangServe 来运行一个 AI 应用业务逻辑的 API 服务,供前台界面调用。
  • LangSmith,其公司提供的商业服务,让开发者可以记录 AI 应用的运行情况,包括测试、评估、监控等。现在,它的角色相当于机器学习领域的另一个监测服务 Weights & Biases

LangSmith 提供了运行 AI 应用需要的多种重要监测功能:

  • 可视化查看每次 LLM 调用,比如提示语、回应及其他参数;
  • 可视化查看包括模型调用在内的调用链(Chain)的具体调用情况;
  • 管理 AI 应用的评测,包括数据集、运行记录及人工进行结果标注;
  • 提示语模板的多版本管理及运行,它提供了便捷的测试运行网页界面(即Playground)。

(图片获取于2024.1, LangChain Docs

早期,开发者使用 LangChain 的原因是,用它能够快速地构建 AI 应用原型,方便地连接多种模型,快速上线产品。在其 Javascript 版本推出后,这更成为一个重要的理由。比如,你要让自己的应用能够方便地支持多模型,比起自行完成适配,LangChain 是更好的选择。

现在,LangSmith 提供的服务开始成为很多开发者选择 LangChain 的重要理由之一。这是因为,AI 应用的开发从早期的多模型支持到了注重自身业务运行质量的阶段。通过它,我们可以观测自己创建的业务逻辑的实际运行情况。

2.2 LangChain 库介绍:以 Python 版本为例

在 2023 年,LangChain 以小版本号快速迭代,几乎每日推出新版。在2023年底,它正式升级到0.1.0版,其中一个重要变化是确保内核的相对稳定,这是通过将 LangChain 库拆分为三个部分来实现的。它现在由三个库组成:

  • langchain-core,这个库的关键是 LangChain 表达式语言(LangChain Expression Language,LCEL),它让我们可以更方便地编排 AI 应用的工作流 。
  • langchain-community,提供与LLM、检索、向量库、工具等的集成组件。
  • langchain,包括 Chain、Agent、检索等创建 AI 应用的工作流所需的组件。

另外,其还为少数主流的 LLM 服务商提供了独立的库,比如 **langchain-openai**等。

LangChain 也将 AI 应用的业务逻辑称为应用的「认知架构」(cognitive architecture)。它等同于在本系列教程中说的业务逻辑、调用链或工作流。

总之,以开发一个 AI 应用为例,LangChain 库提供了全流程的支持:

  1. 「Model I/O」部分:连接某个或几个模型;
  2. 「Model I/O」部分:按需组织自己的提示语(prompt);
  3. 「Retrieval」部分:加载文档、进行文本嵌入、存入向量库;
  4. 「Retrieval」部分:根据用户的提问,匹配文档片段,交由 AI 模型去处理;
  5. 「Model I/O」部分:对模型的输出进行分析,形成 AI 应用的输出。

LangChain 提供的 LangChain Expression Language(LCEL) 让开发可以很方便地将多个组件连接成 AI 工作流。如下是一个简单的工作流:

python
chain = prompt | chatmodel | outputparser
chain.invoke({"input":"What's your name?")

其中,通过由|管道操作符连接而成的 LangChain 表达式,我们方便地将三个组件 prompt chatmodel outparser 按顺序连接起来,这就形成了一个 AI 工作流。 invoke()则是实际运行这个工作流。

我们还可以组织较为复杂的 AI 工作流,如下所示,其中进行两次模型调用,并且示例中用的两个不同的模型。

python
chain = (
        prompt | chatmodel | outputparser |
        second_prompt | model2 | finalparser
        )
chain.invoke("input":"waht's AI?")

将大任务拆解分成小步,并选择合适的模型,我们能更好地利用 AI 的能力。

2.3 为什么使用 LangChain 框架?

为什么用 LangChain?为什么不用 LangChain?

无论是从开发项目的选型,还是开发者的个人偏好,都有很多不用 LangChain 的理由:

  • 它逻辑复杂和代码复杂,且过度封装。比如,你调用一个 Chain 时,它隐含了一系列缺省参数、预设的提示语模板。相比之下,直接调用如 OpenAI 的 API 接口要透明得多。
  • 它代码变化过快、缺少文档。它在快速跟上 LLM 领域的发展但这也导致了一个附带效应:它的版本迭代过快,缺少文档。我们经常需要直接去查看源码,以了解某个组件的工作原理、调用方法。
  • 它规模庞大、模块化不足。将这样的大型库引入项目工程,可能带来不必要的复杂性。在出现问题时,难以快速定位,更难以调试。

另一方面,又有很多 AI 应用开发者选择 LangChain,理由也有很多:

  • 它已证明能够快速跟进模型与 API 的变化。比如,在2023年,OpenAI 推出 Chat Model、Function Calling、Assistant API等已经成为行业事实标准的 API 接口,而 LangChain 均快速、高质量地提供了相应的功能。
  • 它能够快速跟进 AI 研究领域、AI 模型领域、AI 开源领域的变化。当前,大量论文被发表出来,很多研究结论可以用于改进 AI 应用的效果。LangChain 社区能够有效地识别这些研究成果,并将之纳入框架之中。新模型、开源领域的新变化也是如此,均被快速纳入。
  • 它在活跃的社区方面有着领先优势。身处这一社区,开发者可以借鉴和学习其他人的最佳实践。实际上,正是LangChain「大而全」的特点促使其社区异常活跃。因此,要提升 LangChain 的可用性,出路不是改变它的大而全定位,而是加强其模块化,这也正是它正在做的。
  • 其公司提供了多种产品,包括 LangSmith(观测平台)、LangServe(将 Chain 提供为API 服务)、LangGraph(Agent 框架)等,在 LangChain 库之外为 AI 应用开发者提供全方位的支撑与服务,帮我们更高效地进行开发。

3. 小结

总而言之,当你关注 AI 应用开发时,LangChain 既是一个强大的 AI 应用快速搭建框架,又是一个高质量的的学习资源。AI 应用开发者持续跟踪它总能有所收获。


参考链接:

LangChain: https://www.langchain.com

LangChain Python docs: https://python.langchain.com

LangChain.js: https://js.langchain.com/

LangChain Github: https://github.com/langchain-ai/langchain

LangChain Cookbook: https://github.com/langchain-ai/langchain/blob/master/cookbook/README.md

附录:LangChain 于2024.2展示于其首页的产品架构

Alang.AI - Make Great AI Applications