笔者在langchain刚出的那段时间体验过一段时间,然后被复杂和不灵活的封装劝退,时隔三秋,如果需要迅速开发,那么langchain的了解还是有必要的。

此处对langchain的基础模块进行介绍,方便需要使用某些模块时进行快速定位。

langchain可以分为6大模块:

  • 1 Model I/O
  • 2 Retrieval
  • 3 Chain
  • 4 Agent
  • 5 Memory
  • 6 Callback

1 Model I/O

该模型实现了模型的载入和Prompt输入和输出解析。

1.1 Model

langchain实现了对巨量LLM的封装,使用这些model很方便。

  • 1 ChatOpenAI:用于包装OpenAI Chat大语言模型(如GPT-4和GPT-3.5-Turbo)
  • 2 AzureChatOpenAI:用于包装Azure平台上的OpenAI模型
  • 3 PromptLayerChatOpenAI:用于包装PromptLayer平台上的OpenAI模型
  • 4 ChatAnthropic:用于包装Anthropic平台上的大语言模型
  • 5 ChatGooglePalm:用于包装Google Palm平台上的大语言模型
  • 6 Chat Vertex AI:用于包装Vertex AI平台上的大语言模型,如Vertex AI的PaLM API中包含了Google的PaLM2的端

1.2 Prompt

  • 1 PromptTemplate包装器

  • 2 ChatPromptTemplate包装器

  • 3 FewShotPrompt Template模板

  • 4 多功能提示词模板

1.3 Parser

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

  • 1 BooleanOutputParser:用于解析布尔值类型的输出
  • 2 CommaSeparatedList OutputParser:用于解析以逗号分隔的列表类型的输
  • 3 DatetimeOutputParser:用于解析日期时间类型的输出
  • 4 EnumOutputParser:用于解析枚举类型的输出
  • 5 ListOutputParser:用于解析列表类型的输出
  • 6 PydanticOutputParser:用于解析符合Pydantic大语言模型需求的输出
  • 7 StructuredOutputParser:用于解析具有特定结构的输出

2 Retrieval

该模块完整的实现了RAG的过程,加载数据 -> 文档转换(切分merge文档) -> 编码(Embedding) -> 向量库存储 -> 检索

2.1 数据加载器

数据载入类型:

  • CSV:CSVLoader
  • JSON:JSONLoader
  • HTML:HTMLLoader
  • MarkDown:MarkdownLoader
  • PDF:PyPDF文档加载器

2.2 文档转换器

  • 1 按字符切割
  • 2 代码切割:RecursiveCharacterTextSplitter
  • 3 Markdown标题文本切割器:MarkdownHeaderTextSplitter
  • 4 按字符递归切割
  • 5 按Token切割

2.2 Embedding模型

  • OPENAI Embedding Model
  • Other Embedding Model

2.4 向量库

  • 1 FAISS
  • 2 Chroma
  • 3 Pinecone
  • 4 Zilliz
  • 5 Mivus

2.5 检索器

  • 1 自查询检索器
  • 2 时间加权向量存储检索器
  • 3 向量存储支持的检索器
  • 4 网络研究检索器

3 Chain

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

3.1 Basic Chain

  • 1 LLMChain
  • 2 路由链
  • 3 顺序链

3.2 Document Chain

  • 1 Stuff链
  • 2 Refine链
  • 3 MapReduce链
  • 4 重排链

4 Agent

4.1 Bacis Agent

  • 1ZERO_SHOT_REACT_DESCRIPTION
  • 2 REACT_DOCSTORE
  • 3 SELF_ASK_WITH_SEARCH
  • 4 CONVERSATIONAL_REACT_DESCRIPTION
  • 5 CHAT_ZERO_SHOT_REACT_DESCRIPTION
  • 6 CHAT_CONVERSATIONAL_REACT_DESCRIPTION
  • 7 STRUCTURED_CHAT_ZERO_SHOT_REACT_DESCRIPTION

4.2 Plan and Execute Agent

  • Plan and Execute Agent

4.3 Tool / Toolkits / AgentExecutor

  • Tool / Toolkits / AgentExecutor

5 Memory

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

  • 1 ConversationTokenBufferMemory
  • 2 ConversationBufferMemory
  • 3 ConversationBufferWindowMemory
  • 4 ConversationEntityMemory
  • 5 ConversationKGMemory
  • 6 CombinedMemory
  • 7 ReadOnlySharedMemory
  • 8 SQLChatMessageHistory
  • 9 MongoDBChatMessageHistory
  • 10 DynamoDBChatMessageHistory

6 Callback

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

LLM事件:

  • 1 on_llm_start

  • 2 on_llm_new_token

  • 3 on_llm_end

  • 4 on_llm_error

  • 5 on_chat_model_start

Chain事件:

  • 1 on_chain_start
  • 2 on_chain_end
  • 3 on_chain_error

Tool事件:

  • 1 on_tool_start
  • 2 on_tool_end
  • 3 on_tool_error

Agent事件:

  • 1 on_agent_action
  • 2 on_agent_finish

7 参考文献