14.langchain 入门到放弃(七)Chains

87 阅读2分钟

14.langchain 入门到放弃(七)Chains

  链指的是调用序列--无论是调用 LLM、工具还是数据预处理步骤。主要的支持方式是使用 LangChain Expression Language (LCEL)

  LCEL 是构建链条的好帮手,但使用现成的链条也很不错。LangChain 支持两种现成的链:
1、使用 LCEL 构建的链。在这种情况下,LangChain 提供了更高级的构造方法。不过,在引擎盖下所做的只是用 LCEL 构建链。
2、从传统 Chain 类子类构建的链。这些链在引擎盖下不使用 LCEL,而是独立的类。

image

image

  下面介绍下使用最多的chains。

场景chains描述
当你有大量文件,想让 LLM 对所有文件进行处理,并且可以并行处理时ReduceDocumentsChain该链通过迭代缩减的方式来组合文档。它将文档分成若干块(小于某个上下文长度),然后将它们传入 LLM。然后,它接收响应并继续这样做,直到能将所有内容都放入最后一次 LLM 调用中。
用于生成问题/答案对QAGenerationChain从文件中创建问题和答案。用于生成问题/答案对,以便对检索项目进行评估。
首先执行检索步骤,获取相关文件,然后将这些文件传入 LLMRetrievalQA这个链条首先执行检索步骤,获取相关文件,然后将这些文件传入 LLM,生成响应。
根据文档进行总结load_summarize_chainchain_type:要使用的文档组合链的类型。应该是“stuff”、“map_reduce”和“refine”。
stuff: 这种最简单粗暴,会把所有的 document 一次全部传给 llm 模型进行总结,极大可能会导致token超限
map_reduce: 这个方式会先将每个 document 进行总结,最后将所有 document 总结出的结果再进行一次总结。
refine: 这种方式会先总结第一个 document,然后在将第一个 document 总结出的内容和第二个 document 一起发给 llm 模型在进行总结,以此类推,增加了总结内容的连贯性。
verbose=true表示打印明细

  ‍

  ‍

  ‍

  ‍

  ‍