14.langchain 入门到放弃(七)Chains
链指的是调用序列--无论是调用 LLM、工具还是数据预处理步骤。主要的支持方式是使用 LangChain Expression Language (LCEL)
LCEL 是构建链条的好帮手,但使用现成的链条也很不错。LangChain 支持两种现成的链:
1、使用 LCEL 构建的链。在这种情况下,LangChain 提供了更高级的构造方法。不过,在引擎盖下所做的只是用 LCEL 构建链。
2、从传统 Chain 类子类构建的链。这些链在引擎盖下不使用 LCEL,而是独立的类。
下面介绍下使用最多的chains。
| 场景 | chains | 描述 |
|---|---|---|
| 当你有大量文件,想让 LLM 对所有文件进行处理,并且可以并行处理时 | ReduceDocumentsChain | 该链通过迭代缩减的方式来组合文档。它将文档分成若干块(小于某个上下文长度),然后将它们传入 LLM。然后,它接收响应并继续这样做,直到能将所有内容都放入最后一次 LLM 调用中。 |
| 用于生成问题/答案对 | QAGenerationChain | 从文件中创建问题和答案。用于生成问题/答案对,以便对检索项目进行评估。 |
| 首先执行检索步骤,获取相关文件,然后将这些文件传入 LLM | RetrievalQA | 这个链条首先执行检索步骤,获取相关文件,然后将这些文件传入 LLM,生成响应。 |
| 根据文档进行总结 | load_summarize_chain | chain_type:要使用的文档组合链的类型。应该是“stuff”、“map_reduce”和“refine”。 stuff: 这种最简单粗暴,会把所有的 document 一次全部传给 llm 模型进行总结,极大可能会导致token超限 map_reduce: 这个方式会先将每个 document 进行总结,最后将所有 document 总结出的结果再进行一次总结。 refine: 这种方式会先总结第一个 document,然后在将第一个 document 总结出的内容和第二个 document 一起发给 llm 模型在进行总结,以此类推,增加了总结内容的连贯性。 verbose=true表示打印明细 |