1、什么是LangChain?
LangChain 是一个由大型语言模型(LLM)驱动的应用程序开发框架。提供模块化组件用以连接LLM、外部数据源和工具
LangChain 简化了LLM应用程序生命周期的每个阶段:
开发:使用LangChain 的开源组件和第三方集成构建应用程序。使用LangGraph构建具有一流流媒体和人机加护支持的状态代理;
生产化:使用LangSmith检查、监控和评估应用程序,以便于持续优化和部署;
部署:使用LangGraph平台将LangGraph应用程序转变为可用于生产的API和助手;
2、LangChain、LangGraph、LangSmith的功能与区别?
LangChain的核心功能:
LLM 集成:支持多种 LLM(如 OpenAI、Hugging Face)。
提示管理:动态创建和管理提示模板(Prompt Templates)。
链(Chains):将 LLM 调用、API 请求、数据处理等任务链接成工作流。
代理(Agents):支持 LLM 与外部工具(如搜索、数据库)交互,动态决策。
记忆(Memory):维护对话历史或上下文。
检索增强生成(RAG):结合向量数据库(如 FAISS、Chroma)实现文档检索。
LangChain的主要作用:
快速构建LLM应用原型,如聊天机器人、问答系统。
提供标准化的开发接口,简化复杂工作流。
LangChain的框架组成:
主要由以下部分组成:
- LangChain库:Python和JavaScript库。包含接口和集成多种组件的运行时基础,以及现成的链和代理的实现。
- LangChain模板:Langchain官方提供的一些AI任务模板。
- LangServe:基于FastAPI可以将Langchain定义的链(Chain),发布成为REST API。
- LangSmith:开发平台,是个云服务,支持Langchain debug、任务监控。
LangChain库本身由几个不同的包组成。
langchain-core
:基础抽象和LangChain表达语言。langchain-community
:第三方集成,主要包括langchain集成的第三方组件。langchain
:主要包括链(chain)、代理(agent)和检索策略。
langchain任务处理流程
如上图,langChain提供一套提示词模板(prompt template)管理工具,负责处理提示词,然后传递给大模型处理,最后处理大模型返回的结果,
LangChain对大模型的封装主要包括LLM和Chat Model两种类型。
- LLM - 问答模型,模型接收一个文本输入,然后返回一个文本结果。
- Chat Model - 对话模型,接收一组对话消息,然后返回对话消息,类似聊天消息一样。
示例场景:
开发一个客服机器人,结合企业知识库回答用户问题。
LangGraph:
LangChain的拓展模块,专注于构建复杂的、有状态的、多代理工作流,通过图结构实现循环和条件逻辑。
LangGraph核心功能:
图结构工作流:使用节点(Nodes)和边(Edges)定义任务依赖,支持循环(Cyclical Graphs)。
状态管理:维护跨节点的共享状态(如对话历史、任务进度)。
多代理协作:支持多个 AI 代理协同工作(如路由器代理分配任务给专家代理)。
持久化:支持工作流暂停、恢复和错误恢复。
人机交互:支持人机协同(Human-in-the-Loop)。
LangGraph的主要作用:
解决LangChain Chains的局限性,适合复杂、动态的工作流。
用于多代理系统、自动化任务编排、循环决策场景。
示例场景:
构建一个股票分析平台,多个代理分别处理新闻检索、财务数据分析和报告生成,动态调整策略。
LangSmith:
LangSmith是一个统一的观测与评估平台,用于调试、测试和监控LLM应用性能,适用于LangChan、LangGraph或其他框架。
LangSmith的核心功能:
追踪(Tracing):记录应用的每一步输入输出,分析代理行为。
评估(Evaluation):运行自动化评估(如 LLM-as-Judge)或收集人工反馈。
调试:可视化复杂代理的执行路径,定位性能瓶颈。
提示优化:通过 Playground 比较不同提示的效果。
性能监控:跟踪生产环境的延迟、成本、错误率等指标。
LangSmith的主要作用:
提升LLM应用的透明度和可靠性。
加速从原型到生产部署的迭代过程。
示例场景:
监控一个客服代理,分析响应延迟和错误模式,优化提示以提高回答质量。
三者的关系:
LangChain、LangGraph 和 LangSmith 是 LangChain 生态系统的三个互补组件,各自专注于开发、编排和监控,共同支持 LLM 应用的整个生命周期:
-
LangChain 是基础:
-
提供核心组件(如 Chains、Agents、Memory),用于快速构建 LLM 应用。
-
适合简单的线性工作流或 RAG 场景。
-
例如,LangChain 可用于构建一个基于 OpenStack 文档的问答系统,结合 Java 调用 OpenStack API 获取虚拟机信息。
-
-
LangGraph 扩展 LangChain:
-
在 LangChain 基础上引入图结构,解决复杂、循环或多代理场景。
-
完全兼容 LangChain 的组件(如 Prompt Templates、Tools)。
-
例如,LangGraph 可用于管理一个多代理系统,动态调用 Java 开发的 OpenStack 虚拟机创建服务。
-
-
LangSmith 增强观测:
-
为 LangChain 和 LangGraph 提供调试和监控支持,也可独立用于非 LangChain 应用。
-
通过 API(如 Python SDK、OpenTelemetry)记录执行轨迹,集成到 LangGraph 工作流。
-
例如,LangSmith 可监控 Java 应用中 LangChain 代理的性能,分析 OpenStack API 调用的延迟。
-
类比:
-
LangChain 像工具箱,提供螺丝刀、锤子等基本工具。
-
LangGraph 像流水线,组织工具形成复杂生产线。
-
LangSmith 像监控仪表,检查生产线效率并优化。
具体作用与应用场景
工具 |
主要作用 |
典型应用场景 |
---|---|---|
LangChain |
提供模块化组件,简化 LLM 应用开发,适合线性任务和 RAG。 |
聊天机器人、文档问答、API 集成(如 Java 调用 OpenStack)。 |
LangGraph |
构建复杂、有状态、多代理工作流,支持循环逻辑和人机协同。 |
多代理协作(如股票分析平台)、自动化任务编排(如虚拟机管理)。 |
LangSmith |
调试、评估和监控 LLM 应用,提升生产环境可靠性。 |
性能监控(分析 Java 应用延迟)、提示优化、错误追踪。 |
3、构建LangChain Agent 应用时的模块及作用
1)提示模版
提示模板负责将用户输入格式化为可以传递给语言模型的格式。主要用于解决以下问题:
如何使用少量示例?
如何在聊天模型中使用少量示例?
如何部分格式化提示模版?
如何组合提示?
2)示例选择器
示例选择器负责选择正确的少量示例以传递给提示。主要解决以下问题:
如何使用示例选择器?
如何按长度选择示例?
如何按语义相似性选择示例?
如何按语义n-gram重叠选择示例?
如何按最大边际相关性选择示例?
3)聊天模型
聊天模型是较新的语言模型形式,接收消息并输出消息。主要有以下功能:
函数/工具调用
使模型返回结构化输出
缓存模型响应
获取日志概率
创建自定义聊天模型类
流式返回响应
跟踪令牌使用情况
跨供应商跟踪响应元数据
让最终用户选择他们的模型
4)LLMS
LangChain所称的LLM是较旧的语言模型形式,接收字符串输入并输出字符串。主要有以下功能:
缓存模型响应
创建自定义LLM类
流式返回响应
跟踪令牌使用情况
使用本地LLMs
5)输出解释器
输出解析器负责将LLM的输出解析为更结构化的格式。主要解决以下问题:
使用输出解析器将LLM响应解析为结构化格式
解析JSON输出
解析XML输出
解析YAML输出
在输出解析错误时重试
尝试修复输出解析中的错误
编写自定义输出解析器类
6)文档加载器
文档加载器负责从各种来源加载文档。主要有以下功能:
加载CSV数据
从目录加载数据
加载HTML数据
加载JSON数据
加载Markdown数据
加载Microsoft Office数据
加载PDF文件
编写自定义文档加载器
7)文本拆分器
文本拆分器将文档拆分为可用于检索的块。主要有以下功能:
递归拆分文本
按HTML标题拆分
按HTML部分拆分
按字符拆分
拆分代码
按Markdown标题拆分
递归拆分JSON
将文本拆分为语义块
按令牌拆分
8)嵌入模型
嵌入模型将一段文本转换为数值表示:
嵌入文本数据
缓存嵌入结果
9)向量存储
向量存储是可以有效存储和检索嵌入的数据库。
使用向量存储检索数据
10)检索器
检索器负责接收查询并返回相关文档。主要包含以下功能:
使用向量存储检索数据
生成多个查询以检索数据
使用上下文压缩来压缩检索到的数据
编写自定义检索器类
向检索结果添加相似度分数
结合多个检索器的结果
重新排序检索到的结果以减轻“中间丢失”效应
为文档生成多个嵌入
为块检索整个文档
生成元数据过滤器
创建时间加权检索器
使用混合向量和关键词检索
11)索引
索引是使向量存储与基础数据源保持同步的过程。
12)工具
LangChain工具包含工具的描述(传递给语言模型)以及要调用的函数的实现。主要包含以下功能:
创建自定义工具
使用内置工具和内置工具包
使用聊天模型调用工具
向LLMs和聊天模型添加临时工具调用功能
将运行时值传递给工具
向工具使用添加人类参与
处理调用工具时的错误
13)多模态
将多模态数据直接传递给模型
使用多模态提示
14)代理
使用传统LangChain代理
从传统LangChain代理迁移到LangGraph
15)回调
回调允许你在LLM应用程序的各个阶段进行挂钩。主要有以下功能:
在运行时传递回调
将回调附加到模块
在模块构造函数中传递回调
创建自定义回调处理程序
在异步环境中使用回调
16)自定义
所有LangChain组件都可以轻松扩展以支持你自己的版本。
创建自定义聊天模型类
创建自定义LLM类
编写自定义检索器类
编写自定义文档加载器
编写自定义输出解析器类
创建自定义回调处理程序
定义自定义工具