【LangChain 核心原理-核心组件&应用开发类型 01】
一、LangChain到底是什么
LangChain是一个开源框架,用于开发由大语言模型(LLMs)驱动的应用程序,比如,搭建智能体(Agent)、问答系统(QA)、对话机器人、文档搜索系统、企业私有化知识库等
简单概括:
- LangChain ≠ LLMs
- LangChain 之于LLMs,类似Spring之于Java
- LangChain 之于LLMs,类似Django、Flask之于Python
LangChain中的Lang指language,即大预言模型,Chain 即 链,也就是将大模型与外部数据&各种组件链接成链,以此构建AI应用程序
1、LangChain的使用场景
| 项目名称 | 技术点 | 难度 |
| 文档问答助手 |
Prompt + Embedding +RetrievalQA
|
⭐⭐
|
| 智能日程助手 |
Agent + Tool + Memory
|
⭐⭐⭐ |
| LLM+数据库问答 |
SQLDatabaseToolkit + Agent
|
⭐⭐⭐⭐ |
| 多模型路由对话系统 |
RouterChain + 多 LLM
|
⭐⭐⭐⭐ |
| 互联网智能客服 |
ConversationChain + RAG +Agent
|
⭐⭐⭐⭐⭐ |
| 企业知识助手(RAG+本地模型) |
VectorDB + LLM + Streamlit
|
⭐⭐⭐⭐⭐ |
比如:知识库的架构

2、LangChain的资料介绍
- 官网地址:https://www.langchain.com/langchain
- 官网文档:https://python.langchain.com/docs/introduction/
- API文档:https://python.langchain.com/api_reference/
- github地址:https://github.com/langchain-ai/langchain
3、LangChain内部结构

图中展示了LangChain生态系统的主要组件及其分类,分为三个层次:架构(Architecture)、组件(Components)和部署(Deployment)。
结构1:LangChain --就是AI应用组装套件,封装了一堆API。整体框架不大,但是内部琐碎的知识点特别多
- langchain:构成应用程序认知架构的Chains、Agent、Retrieval strategies等。构成应用程序的链、智能体、RAG
- langchain-community:第三方集成,比如:Model I/O、Retrieval、Tool & Toolkit;合作伙伴包 langchain-openai,langchain-anthropic等
- langchain-Core:基础抽象和表达式语言(LCEL)
结构2:LangGraph --基于langchain的api进一步的封装,能够协调多个Chain、Agent、Tools完成更复杂的任务,实现更高级的功能
结构3:LangSmith ---链路追踪;提供了6大功能,与langchain无缝对接,帮组从原型阶段过度到生成阶段
- Debugging 调试
- Playground 沙盒
- Prompt Management 提供管理
- Annotation 注释
- Testing 测试
- Monitoring 监控
结构4:LangServe -- 将langchain的可运行项和链部署为REST API,使得它们可以通过网络进行调用;java怎么调用langchain呢?就通过langserve,将langchain应用包装成一个rest api,对外暴露服务。同时支持更高的并发,稳定性更好。
总结:langchain当中,最有前途的两个模块是:LangGraph、LangSmith
二、LangChain安装
1、相关环境安装
官网下载python进行安装,或者使用包管理工具(Anaconda)进行安装,通过Anaconda创建和管理虚拟环境,为项目提供独立的依赖空间,避免不同项目之间的依赖关系
1)conda的安装 --
conda -help # 查看帮助 conda info # 查看 conda 信息 conda --version # 查看 conda 版本 conda update conda # 更新 Conda (慎用) conda clean -all # 清理不再需要的包 conda <指令> --help # 查看某一个指令的详细帮助 conda config --show # 查看 conda 的环境配置 conda clean -p # 清理没有用, 没有安装的包 conda clean -t # 清理 tarball conda clean --all # 清理所有包和 conda 的缓存文件
4)环境管理
|-- 创建conda环境
使用conda可以在电脑上创建很多套相互隔离的python环境,命令:
# 创建一个名为 myenv 的环境, python 版本为3.10 conda create --name myenv python=3.10 # --name 可以简写为 -n
|-- 切换conda环境
#语法 可以切换不同的环境 conda activate env_name #样例 切换到 my_env环境 conda activate my_env
|-- 如果要退出当前环境
conda deactivate
当电脑上安装了很多台 Conda环境的时候,可以使用 conda env list 命令查看所有已创建的 Conda环境。
# 查看当前电脑上所有的 conda环境
conda env list
|-- 删除某个 Conda 环境
# 语法
conda remove --name <env_name> --all
# 样例
conda remove --name learn --all
|-- 克隆环境
# 语法
conda create --name <new_evn_name> --clone <old_env_name>#样例
conda create --name myclone --clone myenv
5)包管理
一旦激活了环境,你就可以使用 conda和 pip在当前环境下安装你所需要的包。在conda环境中, 不建议使用 pip。
|-- 安装包
在激活的环境中安装包,例如安装NumPy:
conda install numpy
可以使用以下命令安装特定版本的包:
conda install numpy=1.18
|-- 更新包
更新某个包到最新版本:
conda update numpy
#更新所有包到最新版本 (慎用)
conda update --all
执行命令后,conda将会对版本进行比较并列出可以升级的版本。同时,也会告知用户其他相关包也会升级到相应版本。当较新的版本可以用于升级时,终端会显示Proceed([y]/n)? , 此时输入y 即可进行升级。
|-- 卸载包
如果不再需要某个包,可以将其卸载:
conda remove numpy
|-- 列出环境中的所有包
查看当前环境中已安装的所有包:
conda list
查看当前虚拟环境中已安装的某个包的信息
conda list pip
|-- 搜索包
搜索可用的包及其版本信息:
conda search package-name
2、安装langchain包
可以使用pip进行安装 -->pip install langchain
也可以使用conda进行安装
# 安装包(默认仓库) conda install langchain # 指定频道(如 conda-forge) conda install -c conda-forge langchain==0.3.7 # 更新包 conda update langchain # 卸载包 conda uninstall langchain # 查看已安装包 conda 安装的包显示频道,pip安装的显示 pypi conda list -c :是 --channel 的缩写,conda⽤于指定包的安装来源渠道。 conda-forge :该源⽐官⽅默认渠道更新更快、包更全 #建议: 二者最好不好混用,推荐先conda装基础包,后 pip补充的顺序。
二、大模型RAG&Agent开发知识
1、基于RAG架构的开发
RAG主要是为了解决大模型幻觉和知识冻结
何为RAG? Retrieval-Augmented Generation(检索增强生成)

细节图:

强调一下难点的步骤:

整体在开发过程中蓝色部分是难点:1、文件解析 2、文件切割 3、知识检索 4、知识重排序(Reranker)
Reranker的使用场景:
- 适合:追求回答高精度和高相关性的场景中特别适合使用Reranker,例如专业知识库或者客服系统等应用
- 不适合:引入后会增加召回时间,增加检索延迟。对响应要求高的服务就不太适合
RAG有三处涉及到大模型的使用:
- 第3步向量化时,需要使用切入模型(EmbeddingModels)
- 第7步重排序时,需要使用排序模型(RerankerModels)
- 第9步生成答案时,需要使用LLM
2、基于Agent架构的开发
利用LLM的推理决策能力,通过增强规划、记忆和工具调用的能力,构造一个能够独立思考逐步完成给定目标的智能体
Agent的架构:Agent = LLM +Memory+Tools+Planning+Action

智能体的核心要素:
- LLM:作为大脑,主要提供推理、规划、知识理解能力、是AI Agent的决策中枢
- 记忆(Memory):记忆机制能让智能体在处理重复工作时调用以前的经验,从而避免用户进行大量重复交互
- 短期记忆:存储单次对话周期的上下文信息,属于临时信息存储机制。受限于模型上下文窗口长度
- 长期记忆:可以横跨多个任务或时间周期,可存储并调用核心知识,非即时任务;可以通过模型参数微调(固话知识)、知识图谱(结构化语义网络)或向量数据库(相似性检索)方式实现
- 工具使用(Tool Use):调用外部工具,扩展能力边界
- 规划决策(Planning):通过任务分解、反思与自省框架实现复杂任务处理。例如:把一个任务拆解成多个子任务,并通过与用户反馈随时优化策略
- 行动(Action):实际执行策略的模块,涵盖软件接口操作和物理交互 。比如:检索、推理、变成等
3、大模型应用开发的四个场景
场景1:纯Prompt
- Prompt是操作大模型的唯一接口,当用户说一句,ta回一句,在说一句,ta在回一句
场景2:Agent+Function Calling
- Agent:AI主动提要求
- Function Calling:需要对接外部系统时,AI要求执行某个函数
- 当人看:你问ta[ 十一要去新疆旅游需要穿什么衣服],ta会让你查看天气预报,你看了告诉ta,ta在告诉你要穿什么衣服
场景3:RAG(Retrieval-Augmented Generation)
RAG:需要补充领域知识时使用
- Embeddings:把文字转换成更易于相似度计算的编码。这种编码叫向量
- 向量数据库:把向量存起来,方便查找
- 向量搜索:根据输入量,找到最相似的向量
举例:考试答题时,到书上找相关内容,在结合题目组成答案

场景4:Fine-tuning(精调/微调)
举例:努力学习考试内容,长期记住,活学活用

特点:成本最高;在前面的方式解决不了问题的情况下,在使用
如何选择:
面对一个需求,如何开始,如何选择技术方案?下面是个常用思路:

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

核心组件1:Model I/O
model I/O:标准化各个大模型的输入和输出,包含输入模版,模型本身和格式化输出。 --->这个模块使用最多,也最简单

- Format(格式化):指代Prompts Template,通过模版管理大模型的输入。将原始数据格式化成模型可以处理的形式,插入到一个模版问题中,然后送入模型进行处理
- Predict(预测):指代Models,使用通用接口调用不同得到大语言模型。接收被送进来的问题,然后基于这个问题进行预测或生成回答
- Parse(生成):指代Output Parser部分,用来从模型的推理中提取信息,并按照预先设定好得到模版来规范化输出。比如:格式化成一个结构化的JSON对象
核心组件2:Chains
Chain:“链条”,用于将对个模块串联起来组成一个完整的流程,是langchain框架中最重要的模块。-->例如:一个Chain可能包括一个Prompt模版、一个语言模型和一个输出解析器,他们一起工作以处理用户输入,生成响应并处理输出。
常见的Chain类型:
- LLMChain:最基础的模型调用链
- SequentialChain:多个链串联执行
- RouterChain:自动分析用户的需求,引导到最适合的链
- RetrievalQA:结合向量数据库进行过问答的链
核心组件3:Memory
Memory:记忆模块,用户保存对话历史或上下文信息,以便在后续对话中使用
常见的Memory类型:
- ConversationBufferMemory:保存完整的对话历史
- ConversationSummaryMemory:保存对话内容的精简摘要(适合长对话)
- ConversationSummaryBufferMemory:混合型记忆机制,兼具上面两个类型的特点
- VectorStoreRetrieverMemory:保存对话历史存储在向量数据库中
核心组件4:Agent
Agents对应智能体,是langchain的高阶能力,ta可以自主选择工具并规划执行步骤
关键组成部分:
- AgentType:定义决策逻辑的工作流模式
- Tool:是有一些内置的功能模块,如API调用、搜索引擎、文本处理、数据查询等工具。Agents通过这些工具来执行特定的功能
- AgentExecutor:用来运行智能体并执行其决策的工具,负责
核心组件5:Retrieval
Retrieval:对应着RAG,检索外部数据,然后在执行生成步骤时将其传递到LLM。步骤包括文档加载、切割、Embedding等

上图绿色部分是让入库存储前的操作
- source:数据源,即大模型可以识别的多种类型的数据:视频、图片、文本、代码、文档等
- load:负责将来自不同数据源的非结构化数据,加载为文档(Document)对象
- Transform:负责对加载的文档进行转换和处理,比如讲过文本拆分为具有语义意义的 小块
- Embed:将文本编码为向量的能力,一种用于嵌入文档,另一种用于嵌入查询
- store:将向量化的数据进行存储
- Retrieve:从大规模文本库中检索和查询相关的文本段落
核心组件6:Callbacks
Callbacks:回调机制,允许连接到LLM应用程序的各个阶段,可以监控和分析LangChain的运行情况,比如日志记录、监控、流传输等等,以优化性能
回调函数允许我们在LLM的各个阶段使用各种各样的“钩子”,从而达实现日志的记录、监控以及流式传输等功能
小结:
- Model I/O模块:使用最多,也最简单
- Chains模块:最重要的模块
- Retrieval、Agent模块:大模型的主要落地场

在这个基础上,其它组件要么是它们的辅助(比如:向量数据库的分块和嵌入),要么只是完成常规应用程序的任务