所有文章 > AI驱动 > 大模型开发 - 一文搞懂 LangChain(一):总体介绍

大模型开发 - 一文搞懂 LangChain(一):总体介绍

一、LangChain的本质

LangChain是什么?LangChain是一个用于开发由 LLM 支持的应用程序的框架。它使应用程序能够:

  • 具有上下文感知能力:将语言模型连接到上下文源(提示说明、few shot examples、响应的内容等)
  • Reason:依靠语言模型进行推理(关于如何根据提供的上下文回答、采取什么操作等)

该框架由几个部分组成。

  • LangChain 库:Python 和 JavaScript 库。包含无数组件的接口和集成、将这些组件组合成链和代理的基本运行时,以及链和代理的现成实现。
  • LangChain 模板:一系列易于部署的参考架构,适用于各种任务。
  • LangServe:用于将 LangChain 链部署为 REST API 的库。
  • LangSmith:一个开发者平台,可让您调试、测试、评估和监控基于任何 LLM 框架构建的链,并与 LangChain 无缝集成。

LangChain能干什么?

LangChain的产品共同简化了整个应用程序生命周期:

  • 开发:在 LangChain/LangChain.js 中编写您的应用程序。使用模板作为参考开始运行。
  • Productionize:使用 LangSmith 检查、测试和监控您的链,以便您可以充满信心地不断改进和部署。
  • 部署:使用 LangServe 将任何链转换为 API。

LangChain 几乎可以作为所有 LLM 的通用接口,为构建 LLM 应用程序并将其与外部数据源和软件工作流程集成提供集中式开发环境。LangChain可以简单理解为是 LLM 领域的 Spring。

LangChain的主要价值:

  • 组件(Components):用于处理语言模型的可组合工具和集成。无论您是否使用 LangChain 框架的其余部分,组件都是模块化且易于使用的。
  • 现成的链(Off-the-shelf chains):用于完成更高级别任务的内置组件组合,约定大于配置,让您可以轻松上手。

二、LangChain的原理

LangChain的工作流程:通过分块和向量化数据源,优化LLM的检索与生成过程,实现高效、智能的文本处理。

  1. 数据分块与向量化
    • LangChain首先将大型数据源(如50页的PDF文件)分解成小块信息。
    • 这些信息块随后被转换成向量形式,并存储在一个向量存储(Vector Store)中。这个过程称为向量化,它允许信息以数学上可比较和检索的形式存在。
  2. 与LLM的集成
    • 当用户向基于LangChain的聊天机器人输入提示(prompt)时,系统会在向量存储中查询与提示相关的信息块。
    • 这个查询过程类似于在搜索引擎中搜索关键词,但在这里,它是基于向量的相似度来进行的。
  3. 生成答案
    • 一旦找到相关信息块,LangChain会将这些信息与原始提示一起提供给LLM。
    • LLM随后利用这些信息来生成针对用户输入的回答或完成文本。

LangChain的核心组件:LangChain提供标准的、可扩展的接口和外部集成。

主要包括以下六个部分:

  • 模型I/O(Model I/O):负责与语言模型进行交互,处理输入和输出数据。
  • 检索(Retrieval):从特定数据源检索信息,如数据库或API,为应用提供所需内容。
  • 代理(Agents):根据高级指令决定使用哪些工具或组件,协调应用内的操作和信息流。
  • 链(Chains):定义一系列有序步骤以完成特定任务。
  • 内存(Memory):在LangChain运行间保持应用状态。
  • 回调(Callbacks):在LangChain的特定步骤触发额外动作,如日志记录或中间步骤的流式传输。

三、LangChain的应用

工具使用(Tool use):LLM 的一个令人兴奋的应用是为其他“工具”构建自然语言接口,无论是 API、函数、数据库等。

LangChain 非常适合构建此类接口,因为它具有:

  • 良好的模型输出解析,可以轻松从模型输出中提取 JSON、XML、OpenAI 函数调用等。
  • 大量内置工具
  • 为您如何调用这些工具提供了很大的灵活性。

工具的使用方式主要有两种:chains 和 agents。

方式一:chains 创建预定义的工具使用顺序。

方式二:agents 让模型循环使用工具,这样它就可以决定使用工具的次数。

萃取(Extraction):LLM 的另一个令人兴奋的应用是从原始的 LLM 生成中获得结构化的输出。

假设需要 LLM 使用特定架构进行结构化输出:

  • 提取结构化行以插入数据库
  • 提取API参数
  • 提取用户查询的不同部分(例如,语义搜索与关键字搜索)

文章转自微信公众号@架构师带你玩转AI