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

声明:本文主要内容来自以下书籍《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

<think>好的,我现在要回答用户关于LangChain六大模块的问题。首先,我需要回忆LangChain的基本架构和各个模块的功能。LangChain个用于开发语言模型应用的框架,它通过模块化的方式帮助开发者构建复杂的应用。根据之前的了解,LangChain主要包含几个核心模块,比如模型输入/输出、数据连接、链式结构、记忆、代理和回调等部分。 不过,用户提到的“六大模块”可能是指官方的分类,我需要确认具体是哪六个。可能用户指的是官方文档中的核心模块划分。这时候需要确保我的记忆准确,或者是否需要查阅资料确认。不过,根据我的知识截止日期是2023年10月,LangChain的主要模块通常被分为以下几个部分: 1. **模型(Models)**:支持不同种类的模型,比如LLMs、聊天模型以及嵌入模型。 2. **提示(Prompts)**:管理提示模板,优化输入结构。 3. **索引(Indexes)**:处理外部数据的结合,如文档加载器、向量存储等。 4. **记忆(Memory)**:管理对话或交互中的状态记忆。 5. **链(Chains)**:将多个组件组合成工作流,执行复杂任务。 6. **代理(Agents)**:动态调用工具和模型以完成特定任务。 不过,有时候可能不同的资料会有不同的归类方式,比如是否将回调(Callbacks)单独作为模块。但根据常见的分类,六大模块通常是上述的模型、提示、索引、记忆、链和代理。需要确保这些信息正确,并且每个模块的功能描述准确。 接下来,我需要用中文清晰地分点介绍这六大模块,每个模块需要简明扼要地解释其作用和组成部分。要注意用户提到的系统级指令,比如行内数学表达式用$...$,但在这个问题中可能涉及较少数学内容,但如果有相关的例子需要符合格式。例如,在索引模块中可能提到向量嵌入的数学表示,如$v = \text{embed}(text)$,但需要确认是否有必要插入这样的例子。 另外,回答的结构要清晰,逐步介绍每个模块,帮助用户理解它们如何协同工作。需要检查是否有遗漏或错误,比如是否将“数据增强”或“回调”作为独立模块,但根据主流资料,六大模块应该如上述所列。最后,确保语言通顺,符合中文表达习惯,并且每个模块的解释准确无误。</think>LangChain个用于构建大语言模型(LLM)应用的开发框架,其核心设计通过 **模块化** 帮助开发者灵活组合各类组件。以下是其六大核心模块的详细介绍: --- ### 1. **模型(Models)** - **作用**:对接多种类型的语言模型,提供统接口。 - **分类**: - **大语言模型(LLMs)**:处理文本输入/输出,例如 GPT-3、Llama。 - **聊天模型(Chat Models)**:专为对话设计,如 ChatGPT,输入为结构化消息(`SystemMessage`, `HumanMessage`)。 - **嵌入模型(Embedding Models)**:将文本转换为向量,例如 $v = \text{embed}(\text{"hello"})$,用于语义检索。 --- ### 2. **提示(Prompts)** - **作用**:优化模型输入的构建方式,提升响应质量。 - **关键功能**: - **模板管理**:通过 `PromptTemplate` 动态生成提示(如 `"请用{style}风格解释{concept}"`)。 - **示例选择器(Example Selectors)**:根据输入动态选择示例,增强上下文学习能力。 --- ### 3. **索引(Indexes)** - **作用**:将外部数据与模型结合,解决 LLM 的“知识局限性”。 - **核心组件**: - **文档加载器**:从文本、PDF、网页等来源加载数据。 - **文本分割器**:按长度或语义切分文档。 - **向量存储**:存储嵌入向量,支持相似性检索(如 FAISS、Pinecone)。 --- ### 4. **记忆(Memory)** - **作用**:管理对话或交互中的历史状态,实现多轮上下文关联。 - **实现方式**: - **短期记忆**:保存单次对话的上下文(如 `ConversationBufferMemory`)。 - **长期记忆**:结合数据库存储历史记录,支持长期个性化交互。 --- ### 5. **链(Chains)** - **作用**:将多个模块组合成“工作流”,完成复杂任务。 - **类型**: - **简单链(Simple Chains)**:线性串联模型和功能(如模型A的输出作为模型B的输入)。 - **复杂链(Sequential Chains)**:支持分支、循环等逻辑,例如: $$ \text{用户输入} \rightarrow \text{意图识别} \rightarrow \text{数据库查询} \rightarrow \text{生成回答} $$ --- ### 6. **代理(Agents)** - **作用**:让模型动态调用工具(如搜索、计算、API),实现“自主决策”。 - **工作机制**: - **规划**:根据输入决定需要使用的工具序列。 - **执行**:调用工具并整合结果,例如: ``` 用户问:“北京今天的天气如何?” → 代理调用天气API → 获取数据 → 生成回答 ``` --- ### 模块协同示例 假设构建个 **文献问答系统**,流程可能为: 1. **索引模块** 加载并向量化论文库。 2. **提示模块** 生成查询模板。 3. **代理模块** 根据用户问题检索相关段落。 4. **模型模块** 生成最终回答,并通过 **记忆模块** 记录对话历史。 通过这六大模块LangChain 显著降低了开发 LLM 应用的门槛,同时保持了高度的灵活性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

wshzd

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值