链是对一组功能的封装
| 链 | 类 | 说明 |
|---|---|---|
| LLM 链 | LLMChain | 最简单、基本的链,集成提示模板、模型访问、输出解析的完整 LLM 访问流程,广泛应用于整个 LangChain 中 |
| 顺序链 | SequentialChain,包括 SimpleSequentialChain | 用于将上一个调用的输出作为下一个调用的输入 SimpleSequentialChain 每个步骤有单一的输入输出,且上一步输出是下一步的输入 SequentialChain 是更通用的顺序链,允许多个输入输出 |
| 转换链 | TransformChain | 通过设置转换函数,将输入文本进行格式转换,类似于 map 函数,如将很长的文档分割成多个句子,只保留前几句以满足 LLM 令牌数量限制 |
| 路由链 | RouterChain | 包含条件判断和目标链,在正式调用之前先通过调用 LLM 动态判断调用条件,选择最接近的目标链, |
| 工具链 | APIChain,LLMMathChain,RetrievalQA 等 | APIChain:允许 LLM 与 API 交互以检索相关信息,利用提供的 API 相关问题构建链 LLMMathChain:允许调用大模型作为数学工具,解决数学问题 RetrievalQA:通过嵌入向量检索进行查询,构建问答系统 |
调用方法
通过以下几种方法调用 LangChain 链:
- 像函数一样直接调用,参数为一个
dict,等价于使用run方法 run(dict)方法,直接调用其内部的_call_函数predict(**kvarg)方法,函数使用具名参数而不是dictapply(list[dict])方法,接收一个列表,一次执行多个查询,返回结果列表generate(dict)方法 :返回一个LLResult对象而不是字符串,包含调用的相关信息
LLMChain
整合请求模板和输出解析的 LLM 调用过程
SequentialChain
链式调用
chains:所有调用链,按列表顺序依次调用input_variables:所有请求模板的参数,应包含链中每个请求模板涉及的参数output_variables:前面请求的输出将以此列表对应值为键组合到下一个链的输入中
RouterChain
带有分支选择能力的 Chain,选择更相关的链
- 初始化语言模型,创建多条目标链和默认链。这里将目标链组合成一个 dict 用于后面选择
- 创建路由模板,创建
LLMRouterChain路由链。该链作用是向 LLM 查询问题更贴近哪组调用链
- 使用多路选择链
MultiPromptChain将路由链、目标链和默认链整合。调用时先调用路由链,请求 LLM 决定使用哪个链。如果每一个链都不符合,则使用默认链