声明:本文主要内容来自以下书籍《Lan gChain入门指南:构建高可复用、可扩展的LLM应用程序》和LangCh ain官网, 非常感谢作者的贡献 ,由于作者有版权限制,因此在这里声明,如果涉及侵权,请联系我删除此文章。
【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更新快,尽量展示出更多的内容,但缺少更多介绍细节,也难免有遗漏,敬请期待后续更新更多内容......
参考文献:
