LangChain概述

107 阅读11分钟

介绍LangChain

LangChain是一个开源框架,用于开发由大语言模型(LLMs)驱动的应用程序。 比如搭建智能体(agent),问答系统(QA),对话机器人,文档搜索系统,企业私有知识库等。

简单概括

LangChain ≠ LLMs

LangChain 之于 LLMs,类似 Spring 之于 Java

LangChain 之于 LLMs,类似 Django、Flask 之于 Python

顾名思义,LangChain中的“Lang”是指language,即大语言模型,“Chain”即“链”,也就 是将大模型与外部数据&各种组件连接成链,以此构建AI应用程序。

为什么需要LangChain

Q1:LLMs好好的,为什么还要LangChain

在大语言模型(LLMs)如ChatGPT,Claude,DeepSeek快速发展的今天,开发者不仅希望能”使用“这些模型,还希望能 将他们灵活集成到自己的应用中, 实现更强大的对话能力,检索增强生成(RAG)、工具调用(Tool Calling)、多轮推论等功能。

LangChain为更方便解决这些问题而生。

Q2:我们可以使用大模型的API进行开发,为什么需要LangChain这样的框架

不使用LangChain,确实可以使GPT或GLM4等模型的API进行开发。比如搭建智能体,问答系统,对话机器人等复杂的LLM应用。

但使用LangChain的好处:

  • 简化开发难度:更简单,更高效,效果更好。
  • 学习成本更低:不同模型的API不同,调用方式也有区别,切换模型时学习成本高。使用LangChain,可以以同一、规范的方式进行调用,有更好的移植性。
  • 线程的链式组装:LangChain提供了一些现成的链式组装,用于完成特定的高级任务。让复杂的鲁普基变得结构化、易组合、易扩展

Q3:LangChain提供了那些功能呢

LangChain是一个帮助你构建LLM应用的全套工具集。这里涉及到prompt构建,LLM接入、记忆管理、工具调用、RAG、智能体开发等模块。

LangChain的使用场景

项目名称技术点难度
文档问答助手Prompt + Embedding + RetrievalQA⭐⭐
只能日程规划助手Agent + Tool + Memory⭐⭐⭐
LLM+数据库问答SQLDatabaseToolkit + Agent⭐⭐⭐⭐
多模型路由对话系统RouterChain + 多LLM⭐⭐⭐⭐
互联网智能客服Conversation + RAG + Agent⭐⭐⭐⭐⭐
企业知识库助手(RAG + 本地模型)VectorDB + LLM + Streamlit⭐⭐⭐⭐⭐

架构设计

总体架构图

v0.1 版本

Introduction | 🦜️🔗 LangChain

v0.2/0.3 版本

Introduction | 🦜️🔗 LangChain

图中展示了LangChain生态系统的主要组件及其分类,分为三个层次:架构(Architecture)、组件(Components)和部署(Deployment)。

版本的升级,v0.2 相较于v0.1,修改了大概10%-15%。功能性上差不多,主要是往稳定性(或兼容性)、安全性上使劲了,支持更多的大模型,更安全。

内部架构详情

结构1:LangChain

LangChain:构成应用程序认知架构的Chains,Agents,Retrieval strategies等

构成应用程序的链、智能体、RAG

langchain-community:第三方集成

比如Model I/O、Retrieval、Tool & Toolkit;合作伙伴包langchain-openai,langchain-anthropic等。

langchain-Core:基础抽象和LangChain表达式语言(LCEL)

小结:LangChain,就是AI应用组装套件,封装了一堆的API。langchain框架不大,但是里面琐碎的知识点特别多。就像玩乐高,提供了很多标准化的乐高零件(比如,连接器、轮子等)

结构2:LangGraph

LangGraph可以看做基于LangChain的api的进一步封装,能够协调多个Chain、Agent、Tools完成更复杂的任务,实现更高级的功能。

结构3:LangSmith

Get started with LangSmith - Docs by LangChain

链路追踪。 提供了6大功能,涉及Debugging (调试)、Playground (沙盒)、Prompt Management (提示管理)、Annotation (注释)、Testing (测试)、Monitoring (监控)等。与LangChain无缝集成,帮助你从原型阶段过渡到生产阶段。

结构4:LangServe

将LangChain的可运行项和链部署为REST API,使得它们可以通过网络进行调用。

Java怎么调用langchain呢?就通过这个langserve。将langchain应用包装成一个rest api,对外暴露服务。同时,支持更高的并发,稳定性更好。

总结:LangChain当中,最有前途的两个模块就是:LangGraph,LangSmith

LangChain能做RAG,其它的⼀些框架也能做,而且做的也不错,比如LlamaIndex。所以这时候LangChain要在Agent这块发力,那就需要LangGraph。而LangSmith,做运维、监控。故,二者是LangChain里最有前途的。

大模型应用开发

基于RAG架构的开发

背景

  • 大模型的知识冻结
  • 大模型欢幻觉

RAG可以非常精准的解决这两个问题

举例

LLM在考试的时候面对陌生的领域,答复能力有限,然后就准备放飞自我了,容易造成幻觉。而此时RAG给了一些提示和思路,让LLM懂了开始往这个提示的方向做,最终考试的正确率从60%到90%!

何为RAG

Retrieval-Augmented Generation(检索增强生成)

检索-增强-生成过程:检索可以理解为第10步,增强理解为第12步(这⾥的提示词包含检索到的数据),生成理解为第15步。

细节图

难点步骤:

这些过程中的难点:文件解析、文件切割、知识检索、知识重排序

Reranker的使用场景

  • 适合:最求回答高精度高相关性的场景中特别适合使用 Reranker,例如专业知识库或客服系统等应用。
  • 不适合:引入Reranker会增加召回时间,增加检索延迟。服务对相应时间要求高时,使用Reranker可能不合适。

这里有三个位置设计到大模型的使用

  • 第三步向量化时,需要使用EmbeddingModels。
  • 第七步重排序时,需要使用RerankModels。
  • 第九步生成答案时,需要使用LLM。

基于Agent架构的开发

充分利用LLM的推理决策能力,通过增加规划记忆工具调用的能力,构造一个能够独立思考、逐步完成给定目标的智能体。

OpenAI的元老翁丽莲(Lilian Weng)于2023年6月在个人博客首次提出了现代AI Agent架构。

Agent = LLM + Memory + Tools + Planning + Action

智能体核心要素被细化为以下模块:

1.大模型(LLM)作为大脑:提供推理,规划和知识理解能力,是AI Agent的决策中枢

大脑主要由一个大语言模型LLM组成,承担着梳理和决策等功能,并可以呈现推理和规划的构成,能很好地应对未知任务。

2.记忆(Memory):

记忆机制能让智能体在处理重复工作时调用以前的经验,从而避免用户进行大量重复交互。

  • 短期记忆:存储单词对话周期的上下文信息,属于临时信息存储机制。受限于模型的上下文窗口长度。
  • 长期记忆:可以横跨多个任务或时间周期,可存储并调用核心知识,非即时任务。

3.工具使用(Tool Use) :调用外部工具(如API,数据库)扩展能力边界。

4.规划决策(Planning) :通过任务分解,反思与自省框架实现复杂任务处理。例如,利用思维链(Chain of Thought)将目标拆解为子问题,并通过反馈优化策略。

5.行动(Action) :实际执行决策的模块,涵盖软件接口操作(如自动订票)和物理交互(如机器人执行搬运)。比如:检索,推理,编程等。

智能体会形成完整的计划流程。例如先读取以前的工作经验和记忆,之后规划子目标并使用相应功能去处理问题,最后输出给用户并完成反思。

大模型应用开发的四个场景

场景一:纯Prompt

  • Prompt是操作大模型的唯一接口

场景2:Agent + Function Calling

  • Agent:AI主动提出要求
  • Function Calling:需要对接外部系统时,AI要求执行某个函数

场景三:RAG(Retrieval-Augmented Generation)

RAG:需要补充领域知识时使用

  • Embeddings:把文字转换为更易于相似度计算的编码。这种编码叫向量
  • 向量数据库:把向量存起来,方便查找
  • 向量搜索:更具输入向量,找到最相似的向量

场景4:Fine-tuning(精调/微调)

  • 长期记忆,活学活用
  • 成本最高,在前面的方式解决不了问题的情况下再使用

如何使用

面对一个需求,如何开始,如何选择技术方案:

LangChain的核心组件

学习Langchain最简单直接的方法就是阅读官方文档。

Components | 🦜️🔗 LangChain

如果组织一个AI应用,开发者一般需要什么

  1. 提示词模板的构建,不仅只包含用户输入
  2. 模型调用与返回,参数设置,返回内容的格式化输出
  3. 知识库查询,这里会包含文档加载,切割,以及转化为词嵌入(Embedding)向量
  4. 其他第三方工具调用,一般包含天气查询,Google搜索,一些自定义的接口能力调用
  5. 记忆获取,每一个对话都有上下文,在开启对话之前得获取之前的上下文

核心组件概述

LangChain的核心组件涉及六大模块,这六大模块提供了一个全面且强大的框架,使开发者能够创建复杂、高效且用户友好的基于大模型的应用。

核心组件1:Model I/O

这个组件使用最多,也最简单

Model I/O:标准化各个大模型的输入和输出,包含输入模板,模板本身和格式化输出。

以下是使用语言模型从输入到输出的基本流程。

  • Fromat(格式化):即指代Prompts Template,通过模板管理大模型的输入。将原始数据格式化成模型可以处理的形式,插入到一个模板问题中,然后送入模板进行处理。
  • Predict(预测):即指代Models,使用通用接口调用不同的大语言模型。接收被送进来的问题,然后基于这个问题进行预测或生成回答。
  • Parse(生成):即指代Output Parser部分,用来从模型的推理中提取信息,并按照预先设定好的模板来规范化输出。比如,格式化成一个结构化的JSON对象。

核心组件2:Chains

Chain:“链条”,用于将多个模块串联起来组成一个完整的流程,时LangChain框架中最重要的模块。

例如,一个Chain可能包括一个Prompt模板,一个语言模型和一个输出解释器,他们一起工作以处理用户输入、生成相应并处理输出。

常见Chain类型

  • LLMChain:最基础的模型调用链
  • SequentialChain:多个链串行执行
  • RouterChain:自动分析用户需求,引导到最适合的链
  • RetrivalQA:结合向量数据库进行问答的链

核心组件3:Memory

Memory:记忆模块,用于保存对话历史或上下文信息,以便在后续对话中使用

常见Memory类型

  • ConversationBufferMemory:保存完整的历史对话
  • ConversationSummaryMemory:保存对话内容的精简摘要(适合长对话)
  • ConversationSummaryBufferMemory:混合型记忆机制,兼具上面两个类型的特点
  • VectorStoreRetrieverMemory:保存对话历史存储在向量数据库中

核心组件4:Agents

Agents,对应智能体,时LangChain的高阶能力,它可以自主选择工具并规划执行步骤。

Agent的关键组成

  • AgentType:定义决策逻辑的工作流模式
  • Tool:是一些内置的功能模块,如API调用、搜索引擎、文本处理、数据查询的工具。Agents通过这些工具来执行特定的功能
  • AgentExecutor:用来运行智能体并执行其决策的工具,负责协调智能体的决策和实际的工具执行

核心组件5:Retrieval

Retrival:对应着RAG,检索外部数据,然后再执行生成步骤时将其传递到LLM。步骤包括文档加载、切割、Embedding等。

  • Source:数据源,即大模型可以识别的多种类型的数据:视频、图片、文本、代码、文档等
  • Load:负责将来自不同数据源的非结构化数据,加载为文档(Document)对象
  • Transform:负责对加载的文档进行转换和处理,比如将文本拆分为具有语义意义的小块
  • Embed:将文本编码为向量的能力。一种用于嵌入文档,另一种用于嵌入查询
  • Store:将向量化后的数据进行存储
  • Retrieve:从大规模文本库中检索和查询相关文本段落

核心组件6:Callbacks

Callbacks:回调机制,允许连接到LLM应用程序的各个阶段,可以监控和分析LangChain的运行情况,比如日志记录、监控、流传输等,以优化性能。

小结

  • Model I/O模块:使用最多,也最简单
  • Chains模块:最重要的模块
  • Retrival模块、Agents模块:大模型主要落地场景

在这个基础上,其他组件要么是他们的辅助,要么知识完成常规应用程序的任务。

辅助:比如,向量数据库的分块和嵌入、用于追踪、观测的Callbacks

任务:比如,Tools,Memory