LangChain 核心模块学习:Chains
对于简单的大模型应用,单独使用语言模型(LLMs)是可以的。
但更复杂的大模型应用需要将 LLMs
和 Chat Models
链接在一起。 要么彼此链接,要么与其他组件链接。
LangChain 为这种“链式”应用程序提供了 Chain
接口。
LangChain 以通用方式定义了 Chain
,它是对组件进行调用序列的集合,其中可以包含其他链。
Chain Class 基类
类继承关系:
Chain --> <name>Chain # Examples: LLMChain, MapReduceChain, RouterChain
# 定义一个名为Chain的基础类
class Chain(Serializable, Runnable[Dict[str, Any], Dict[str, Any]], ABC):
"""为创建结构化的组件调用序列的抽象基类。
链应该用来编码对组件的一系列调用,如模型、文档检索器、其他链等,并为此序列提供一个简单的接口。
Chain接口使创建应用程序变得容易,这些应用程序是:
- 有状态的:给任何Chain添加Memory可以使它具有状态,
- 可观察的:向Chain传递Callbacks来执行额外的功能,如记录,这在主要的组件调用序列之外,
- 可组合的:Chain API足够灵活,可以轻松地将Chains与其他组件结合起来,包括其他Chains。
链公开的主要方法是:
- `__call__`:链是可以调用的。`__call__`方法是执行Chain的主要方式。它将输入作为一个字典接收,并返回一个字典输出。
- `run`:一个方便的方法,它以args/kwargs的形式接收输入,并将输出作为字符串或对象返回。这种方法只能用于一部分链,不能像`__call__`那样返回丰富的输出。
"""
# 调用链
def invoke(
self, input: Dict[str, Any], config: Optional[runnableConfig] = None