LangChain


LangChain」 是一套面向大模型的开发框架,是 AGI 时代软件工程的一个探索和原型。

LangChain 并不完美,还在不断迭代中,学习 LangChain 更多的是借鉴其思想,具体的接口和模块可能很快就会改变。

模型 I/O 封装

  • LLMs:大语言模型
  • Chat Models:一般基于 LLMs,但按对话结构重新封装
  • PromptTemple:提示词模板
  • OutputParser:解析输出

数据连接封装

  • Document Loaders:各种格式文件的加载器
  • Document Transformers:对文档的常用操作,如:split, filter, translate, extract metadata, etc
  • Text Embedding Models:文本向量化表示,用于检索等操作(啥意思?别急,后面详细讲)
  • Verctorstores: (面向检索的)向量的存储
  • Retrievers: 向量的检索

记忆封装

  • Memory:这里不是物理内存,从文本的角度,可以理解为“上文”、“历史记录”或者说“记忆力”的管理

架构封装

  • Chain:实现一个功能或者一系列顺序功能组合
  • Agent:根据用户输入,自动规划执行步骤,自动选择每步需要的工具,最终完成用户指定的功能
    • Tools:调用外部功能的函数,例如:调 google 搜索、文件 I/O、Linux Shell 等等
    • Toolkits:操作某软件的一组工具集,例如:操作 DB、操作 Gmail 等等

Callbacks 封装

  • Callbacks:在 Agent 的执行过程中,可以插入一些回调函数,用于实现一些特殊的功能,例如:记录日志、调用外部服务、调用外部工具等等。

model-io

1)生成模型封装

收起

2)对话模型封装

3)多轮对话 Session 封装

收起

1)Prompt 模板封装

收起

1)Pydantic (JSON) Parser

自动根据 Pydantic 类的定义,生成输出的格式说明。

收起

2)Auto-Fixing Parser

利用LLM自动根据解析异常修复并重新解析

收起

data-connection

这里用 llama2 的论文作为文档文件。

收起

1)TextSplitter

收起

2)Doctran

收起

收起

收起

提示Embedding:将目标物体(词、句子、文章)表示成向量的方法

收起

vector_stores

收起

向量数据库功能对比

Name Web GUI GPU Support Remote Support(HTTP/gRPC) Cloud Native Opensource Metadata(hybrid search)
FAISS N Y N N Y N
Pinecone Y N/A Y Y N Y
Milvus Y Y Y Y Y Y
Weaviate N N Y Y Y Y
Qdrant N Y Y Y Y Y
PGVector N N Y Y Y Y
RediSearch N N Y Y Y Y

收起

1)Parent Document Retriever

从相关段落召回整个文档

收起

2)Reranker(可选)

sbert-rerank

LangChain 里目前没有,但是实际生产中会碰到需要 rerank 的情况!

支持Retrieval+Rerank的开源框架,参考:https://docs.jina.ai/

LangChain 自带的机制:

收起

收起

收起

以下是摘自官网的描述:

Chains allow us to combine multiple components together to create a single, coherent application. For example, we can create a chain that takes user input, formats it with a PromptTemplate, and then passes the formatted response to an LLM. We can build more complex chains by combining multiple chains together, or by combining chains with other components.


「Chains」允许我们将多个组件组合在一起以创建一个单一的、连贯的应用程序。 例如,我们可以创建一个链,它接受用户输入,使用 PromptTemplate 对其进行格式化,然后将格式化的响应传递给 LLM。 我们可以通过将多个链组合在一起,或者将链与其他组件组合来构建更复杂的链。
—— 官网

  • Chain 封装了一个既定的流程
  • 类比于函数封装了过程
  • 建造者模式(Builder Pattern), 解耦各种复杂的组件,每个组件都可替换。

收起

收起

stuffdocchain

收起

收起

收起

收起

收起

stuff
refine
map-reduce
map-rerank

收起

将大语言模型作为一个推理引擎。给定一个任务,智能体自动生成完成任务所需的步骤,执行相应动作(例如选择并调用工具),直到任务完成。

agent-overview

工具可以是:

  • 一个函数或第三方 API
  • 也可以把一个 Chain 或者 Agent 的 run() 作为一个 Tool

收起

react

收起

收起

收起

plan-exec

收起

回调函数,用于监测、记录调用过程中的信息。

收起

从形式逻辑向思维逻辑过渡

agent-sofware-trend

从单智能体到多智能体协作

agent-sofware-trend

以拖拽的形式编排 LangChain 逻辑,详细介绍见官网

langflow-demo