LLM之LangChain(一)| LangChain六大核心模块简要汇总

news2024/11/25 2:47:47

声明:本文主要内容来自以下书籍《LangChain入门指南:构建高可复用、可扩展的LLM应用程序》和LangChain官网,非常感谢作者的贡献,由于作者有版权限制,因此在这里声明,如果涉及侵权,请联系我删除此文章。

【LangChain中文网出品】《LangChain入门指南:构建高可复用、可扩展的LLM应用程序》

5折粉丝优惠:https://u.jd.com/JisePtB

💡全面介绍LangChain技术,学会逐步构建自己的LLM应用程序

💡实用案例和示例代码助你快速上手

💡LangChain中文网出品,与社区互动,共享经验与解决难题

💡从基本模型到链式编程再到最佳实践等提供了细致、深入的指导和案例演示

       2023年是LLM(大语言模型)的元年,在这一年底座大模型,微调大模型,部署大模型并驾齐驱,发展的如火如荼。然而,目前的大模型并非完美,上下文窗口有限,幻觉问题等等问题,而各大厂商的大模型的API接口、数据格式和工具难以统一,而像LangChain和LlamaIndex这样的大模型应用框架解决了大模型“最后1公里”。

       之前我对LangChain比较零散的使用过,本文将对LangChain的六大核心模块中重要概念进行罗列,希望可以给读者一个更清晰更全面的应用指导。六大核心模块,如下图所示:

PS:由于LangChain社区发展快,所以此思维导图持续更新中......

LangChain六大模块

一、Model I/O

1.1 模型包装器

       LLM主要分为续写(Completion)聊天(Chat Completion)两种模式,LangChain也同样适配。

- 01 LLM模型包装器

       LangChain已经实现了50种不同大语言模型的Completion类型API的包装器,包括OpenAI、Llama.cpp、Cohere、Anthropic等。OpenAI的Text Completion类型API在2023年7月进行最后一次更新,2020-2022年的模型text-davinci-003、text-davinci-002、Davinci、Curie、Babbage、Ada等只能通过Completion接口访问,而像GPT-3.5-Turbo、GPT-4等模型的访问可以通过Chat Completion来访问。

- 02 聊天模型包装器

- 01 ChatOpenAI:用于包装OpenAI Chat大语言模型(如GPT-4和GPT-3.5-Turbo)

- 02 AzureChatOpenAI:用于包装Azure平台上的OpenAI模型

- 03 PromptLayerChatOpenAI:用于包装PromptLayer平台上的OpenAI模型

- 04 ChatAnthropic:用于包装Anthropic平台上的大语言模型

- 05 ChatGooglePalm:用于包装Google Palm平台上的大语言模型

- 06 Chat Vertex AI:用于包装Vertex AI平台上的大语言模型,如Vertex AI的PaLM API中包含了Google的PaLM2的端点

1.2 提示词模板管理

       Prompt对于LLM来说非常重要,而LangChain为复杂的Prompt预置了很多模板,常见的如下所示:

- 01 PromptTemplate包装器

- 02 ChatPromptTemplate包装器

- 03 FewShotPrompt Template模板

- 04 多功能提示词模板

1.3 输出解析器

        LLM的输出经常会被应用于下游任务,比如在Prompt中添加“请输出JSON格式”,但模型返回的字符串形式JSON还需要进行转换为JSON对象,但在实际使用中,常常会遇到异常,因此LangChain退出了输出解析器来解决上述问题,常见的输出解析器如下所示:

- 01 BooleanOutputParser:用于解析布尔值类型的输出

- 02 CommaSeparatedList OutputParser:用于解析以逗号分隔的列表类型的输出

- 03 DatetimeOutputParser:用于解析日期时间类型的输出

- 04 EnumOutputParser:用于解析枚举类型的输出

- 05 ListOutputParser:用于解析列表类型的输出

- 06 PydanticOutputParser:用于解析符合Pydantic大语言模型需求的输出

- 07 StructuredOutputParser:用于解析具有特定结构的输出

二、Retrieval

2.1 数据加载器

       LLM并不完美,比如训练数据是有时间限制的,GPT-4训练数据日期截止到2023年4月,也就是说GPT-4并不能回答2023年4月之后世界发生的事情。LangChain通过支持RAG功能来添加辅助数据来缓减LLM知识更新的问题,一定程度上可以缓减幻觉。LangChain支持的数据源格式,如下所示:

- 01 CSV:CSVLoader

- 02 文件目录:DirectoryLoader

- 03 HTML:HTMLLoader

- 04 JSON:JSONLoader

- 05 Markdown:MarkdownLoader

- 06 PDF文档加载:

  • PyPDF文档加载器
  • 在线PDF文档加载器
  • PyPDFium2文档加载器
  • PDFMiner文档加载器
  • PyMuPDF文档加载器
  • PyPDFDirectoryLoader文档加载器
  • PDFlumberLoader文档加载器

2.2 嵌入模型包装器

- 01 自然语言模型嵌入

  • OpenAIEmbeddings
  • HuggingFaceEmbeddings
  • HuggingFaceHubEmbeddings
  • HuggingFaceInstructEmbeddings
  • SelfHostedHuggingFaceEmbeddings
  • SelfHostedHuggingFaceInstructEmbeddings

- 02 AI平台或云服务嵌入

  • Elasticsearch
  • SagemakerEndpoint
  • DeepInfra

- 03 专门的嵌入模型

  • AsymmetricSemanticEmbedding
  • SymmetricSemanticEmbedding

- 04 子托管嵌入

  • SelfHostedEmbeddings

- 05 仿真或测试嵌入

  • FakeEmbeddings

- 06 其他类型

  • Cohere
  • LlamaCpp
  • ModelScope
  • TensorflowHub
  • MosaicMLInstructor
  • MiniMax
  • Bedrock
  • DashScope
  • Embaas

2.3 文档转换器

- 01 按字符切割

- 02 代码切割:RecursiveCharacterTextSplitter

- 03 Markdown标题文本切割器:MarkdownHeaderTextSplitter

- 04 按字符递归切割

- 05 按Token切割

  • Tiktoken标记切割器
  • SpaCyTextSplitter标记切割器
  • SentenceTransformersTokenTextSplitter标记切割器
  • NLTKTextSplitter标记切割器
  • Hugging Face标记切割器

2.4 向量存储库

- 01 FAISS

- 02 Chroma

- 03 Pinecone

- 04 Zilliz

2.5 检索器

- 01 自查询检索器

- 02 时间加权向量存储检索器

- 03 向量存储支持的检索器

- 04 网络研究检索器

三、Chains

       Chain是LangChain中非常重要的组件,作用是管理应用程序中的数据流动,可以把不同组件(或者其他Chain组件)链接在一起,从而构建完整的数据处理流程。常见的Chain,如下所示:

3.1 基础链

- 01 LLMChain

- 02 路由链

- 03 顺序链

3.2 文档链

- 01 Stuff链

- 02 Refine链

- 03 MapReduce链

- 04 重排链

四、Agents

4.1 Agent类型

- 01 Action Agent

  • ZERO_SHOT_REACT_DESCRIPTION
  • REACT_DOCSTORE
  • SELF_ASK_WITH_SEARCH
  • CONVERSATIONAL_REACT_DESCRIPTION
  • CHAT_ZERO_SHOT_REACT_DESCRIPTION
  • CHAT_CONVERSATIONAL_REACT_DESCRIPTION
  • STRUCTURED_CHAT_ZERO_SHOT_REACT_DESCRIPTION

- 02 langchain.experimental

- 01 Plan and Execute Agent

- 02 Autonomous Agent

  • Baby AGI

- 03 Generative Agent

  • 模拟斯坦福小镇多智能体

4.2 Tools组件

4.3 Toolkits组件

4.4 AgentExecutor组件

五、Memory

       LLM实际上是无记忆的,在聊天机器人中,历史消息是非常重要的,LangChain使用Memory组件来存储历史信息,下面是常见的Memory类型:

  • 01 ConversationTokenBufferMemory
  • 02 ConversationBufferMemory
  • 03 ConversationBufferWindowMemory
  • 04 ConversationEntityMemory
  • 05 ConversationKGMemory
  • 06 CombinedMemory
  • 07 ReadOnlySharedMemory
  • 08 SQLChatMessageHistory
  • 09 MongoDBChatMessageHistory
  • 10 DynamoDBChatMessageHistory

六、Callbacks

       在IT领域中,回调是一个非常重要的概念。回调处理器允许开发者在特定事件发生时执行自定义操作,在许多场景中非常有用,比如日志记录、性能监控、流式处理等。下面是设置Callback的一些事件:

6.1 LLM事件

- 01 on_llm_start

- 02 on_llm_new_token

- 03 on_llm_end

- 04 on_llm_error

6.2 聊天模型事件

- 01 on_chat_model_start

6.3 链事件

- 01 on_chain_start

- 02 on_chain_end

- 03 on_chain_error

6.4 工具事件

- 01 on_tool_start

- 02 on_tool_end

- 03 on_tool_error

6.5 其他事件

- 01 on_text

- 02 on_agent_action

- 03 on_agent_finish

总结:

       本文主要是对LangChain六大核心组件基本概念以及列出重要组件的介绍,但是由于内容多,而且LangChain更新快,尽量展示出更多的内容,但缺少更多介绍细节,也难免有遗漏,敬请期待后续更新更多内容......

参考文献:

[1] https://python.langchain.com/docs

[2] https://u.jd.com/JisePtB

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1366610.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

java 创建一个可执行的jar包小程序

第1步:写好代码 public class Main {public static void main(String[] args) {String str "hahah";if (StringUtils.isBlank(str)) {System.out.println(str);}System.out.println("Hello world!");} }第2步:设置 Artifact 选择入…

HTTPS网站被攻击的原理,网站被攻击应该如何进行防护吗,新手必知

网站是通过独特的一个端口来进行加密传输,防止传输中的内容被窃取,一般用HTTPS协议做网站的,一般是大型网站,以及支付网站,用户数据比较重要的一些网站,证书要单独购买,HTTPS超文本传输安全协议…

无人地磅系统|内蒙古中兴首创无人地磅和远程高效管理的突破

走进标杆企业,感受名企力量,探寻学习优秀企业领先之道。 本期要跟砼行们推介的标杆企业是内蒙古赤峰市砼行业的龙头企业:赤峰中兴首创混凝土搅拌有限责任公司(以下简称为中兴首创)。 中兴首创成立于2011年初&#xff…

OpenFeign学习思维导图

参考: 1、OpenFeign如何为FeignClient生成动态代理类 2、Feign底层原理分析-自动装载&动态代理 3、FactoryBean和普通Bean的区别

gephi——graphviz插件设置

gephi_graphviz插件设置 以下是我总结出来的一点经验 1. 安装graphviz软件,请见作者其他博客 2. 安装gephi 插件,并激活 3. 运行graphviz布局,会遇到找不到dot问题 问题描述:Graphviz process error X There was an error launc…

Wi-Fi 6 超值畅享|乐鑫发布 ESP32-C61 SoC

乐鑫信息科技 (688018.SH) 宣布推出全新的 Wi-Fi 6 Bluetooth 5 (LE) SoC ESP32-C61。这款芯片作为 ESP32-C 系列的新成员,旨在满足对 Wi-Fi 6 技术不断增长的市场需求。ESP32-C61 在继承 ESP32-C2 和 ESP32-C3 成功经验的基础上,显著优化了外设、强化了…

使用flet创建todo应用

使用 Flet 在 Python 中创建待办事项应用 Create To-Do app in Python with Flet 翻译官网教程https://flet.dev/docs/tutorials/python-todo,对一些地方进行了注释和修改。 安装flet Python版本需要3.8及以上,使用pip安装: pip install…

怎么批量在文件名前面加编号?

怎么批量在文件名前面加编号?我们时常需要给文件的名称进行编号,通过给文件名进行编号,可以使文件按照编号的顺序进行排序,方便进行查找和整理。特别是在处理大量文件时,编号可以提供一种有序的方式来组织文件&#xf…

【redis】Redis中的字典类型:数据结构与使用方法

文章目录 Redis中的字典类型:数据结构与使用方法简介如何提高哈希表性能如何使用 Redis中的字典类型:数据结构与使用方法 简介 Redis中的字典类型的底层实现是哈希表(Hash Table)。 Redis的字典使用哈希表作为底层实现&#xf…

软件测试|MySQL主键约束详解:保障数据完整性与性能优化

简介 主键(PRIMARY KEY)的完整称呼是“主键约束”,是 MySQL 中使用最为频繁的约束。一般情况下,为了便于 DBMS 更快的查找到表中的记录,都会在表中设置一个主键。 MySQL是一种广泛使用的开源关系型数据库管理系统&am…

海豚²来了丨DolphinDB 集成 DolphinScheduler,任务调度更轻松

DolphinDB 是一款高性能时序数据库。DolphinDB 集成了功能强大的编程语言和高容量高速度的批流一体数据分析系统,为海量数据(特别是时间序列数据)的快速存储、检索、计算及分析提供一站式解决方案。在实际生产环境中,经常存在数据…

LeetCode刷题12:贪心算法解决1402.做菜顺序

一个厨师收集了他 n 道菜的满意程度 satisfaction ,这个厨师做出每道菜的时间都是 1 单位时间。 一道菜的 「 like-time 系数 」定义为烹饪这道菜结束的时间(包含之前每道菜所花费的时间)乘以这道菜的满意程度,也就是 time[i]*sa…

决策树--CART回归树算法详解

1、介绍 (1)简介 CART(Classification and Regression Trees)回归树是一种基于决策树的机器学习算法,用于预 测连续型目标变量而不是离散型类别变量。 (2)生成过程 ① 选择一个特征和相应的…

安达发APS|PDM产品数据管理可以帮助企业实现的价值

在实际运用中,APS系统的PDM产品数据管理功能可以帮助企业实现以下价值: 1. 提高产品设计和制造的效率:通过对产品结构和文档的统一管理,可以实现对产品信息的快速查询和检索,提高产品设计和制造的效率。 2. 保证产品数…

软件测试|测试平台开发-Flask入门:Flask动态路由

前言 之前我们介绍了flask发送http请求,以及flaskURL的详解,我们使用的路由都是固定的,一个路径和一个视图函数绑定,当访问这条路径时会触发相应的处理函数。但是当我们要处理更为复杂的情况时,比如我们有多个用户&am…

PyTorch|保存与加载自己的模型

训练好一个模型之后,我们往往要对其进行保存,除非下次用时想再次训练一遍。 下面以一个简单的回归任务来详细讲解模型的保存和加载。 来看这样一组数据: xtorch.linspace(-1,1,50)xx.view(50,1)yx.pow(2)0.3*torch.rand(50).view(50,1) 画…

SpringBoot + Mybatis 实现多数据源原来如此简单

1、为什么需要整合多数据源 在开发的过程中,我们可能会遇到一个工程使用多个数据源的情况,总体而言分为以下几个原因 a、数据隔离:将不同的数据存储在不同的数据库中,如多租户场景 b、性能优化:将数据分散到多个数据库…

【项目实战】Cadence工具的使用2

代码覆盖率的收集 双击total,打开imc工具。total 下的文件是代码覆盖率文件 找到DUT模块!从图中可以看到代码的覆盖率已经是94.43% 添加exclude文件,注意和Synopsys的后缀不同。 导入.vRefine文件 代码覆盖率为100%。 原因是我们添加了exclu…

大学生如何当一个程序员——第三篇:热门专业学习之路5

第三篇:热门专业学习之路5 1.WEB前端快速入门2.JavaScript基础与深入解析3.jQuery应用与项目开发4.PHP、数据库编程与设计5. Http服务于Ajax编程6. 做一个阶段项目7. H5新特性与移动端开发8.高级框架9.微信小程序 各位小伙伴想要博客相关资料的话关注公众号&#xf…

LabVIEW在设备状态监测与故障诊断中的应用

在现代工业自动化领域,LabVIEW的系统设计平台在设备状态监测与故障诊断中扮演着举足轻重的角色。通过提供一个可视化和数据流编程语言,LabVIEW大大提升了设备安全监测的效率,减少了系统维护成本,同时增强了设备的可靠性和可维护性…