跳至内容

链(Chains)

链(Chains)指一系列调用——无论是对 LLM、工具还是数据预处理步骤的调用。主要支持的实现方式是使用 LCEL。

LCEL 非常适合构造你的链,但开箱即用的链也很好用。LangChain 支持两种类型的开箱即用链:

  • 用 LCEL 构建的链。在这种情况下,LangChain 提供更高层的构造函数。不过,底层所做的全部工作就是用 LCEL 构造一条链。
  • [旧版] 通过继承旧版 Chain 类构造的链。这些链底层不使用 LCEL,而是独立的类。

我们正在努力创建能为所有链生成 LCEL 版本的方法。这样做有几个原因。

  1. 以这种方式构造的链很好,因为如果你想修改链的内部,只需修改 LCEL 即可。
  2. 这些链原生开箱即用地支持流式输出、异步和批处理。
  3. 这些链在每个步骤都自动获得可观测性。

本页包含两个列表。首先是所有 LCEL 链构造函数的列表。其次是所有旧版 Chain 的列表。

LCEL 链

下面是所有 LCEL 链构造函数 的表格。

表格各列含义:

  • Chain Constructor:这条链的构造函数。它们都是返回 LCEL Runnable 的方法。我们也会链接到 API 文档。
  • Function Calling:是否需要 OpenAI 函数调用。
  • Other Tools:这条链使用的其它工具(如果有)。
  • When to Use:关于何时使用这条链的说明。
Chain ConstructorFunction CallingOther ToolsWhen to Use
create_stuff_documents_chain这条链接收一个文档列表,把它们全部格式化进一个提示,然后把该提示传给 LLM。它会传入 所有 文档,所以你要确保它能放进你所使用 LLM 的上下文窗口。
create_openai_fn_runnable✅如果你想用 OpenAI 函数调用来 可选地 构造输出响应。你可以为其调用传入多个函数,但它不一定要调用。
create_structured_output_runnable✅如果你想用 OpenAI 函数调用 强制 LLM 以某个函数响应。你只能传入一个函数,链会 始终 返回该响应。
load_query_constructor_runnable可用于生成查询。你必须指定一组合法的操作,然后它会返回一个 runnable,把自然语言查询转换为这些合法操作。
create_sql_query_chainSQL Database如果你想从自然语言构造一条针对 SQL 数据库的查询。
create_history_aware_retrieverRetriever这条链接收对话历史,然后用它生成一个搜索查询,传给底层检索器。
create_retrieval_chainRetriever这条链接收用户查询,然后把它传给检索器以获取相关文档。这些文档(以及原始输入)随后被传给 LLM 以生成响应。

旧版链

下面是 旧版链。在我们创造出 LCEL 替代方案之前,我们会一直维护对它们的支持。

表格各列含义:

  • Chain:链的名称或构造函数方法的名称。如果是构造函数方法,它会返回一个 Chain 子类。
  • Function Calling:这条链是否需要 OpenAI 函数调用。
  • Other Tools:这条链使用的其它工具。
  • When to Use:关于何时使用的说明。
ChainFunction CallingOther ToolsWhen to Use
APIChainRequests Wrapper这条链用 LLM 把查询转换为 API 请求,然后执行该请求、取回响应,再把该请求传给 LLM 以作出响应。
OpenAPIEndpointChainOpenAPI Spec与 APIChain 类似,这条链旨在与 API 交互。主要区别是它针对 OpenAPI 端点的易用性进行了优化。
ConversationalRetrievalChainRetriever这条链可用于与文档进行 对话。它接收一个问题以及(可选的)之前的对话历史。如果存在之前的对话历史,它用 LLM 把对话改写为一个查询发给检索器(否则就直接使用最新的用户输入)。然后它获取这些文档,并连同对话一起传给 LLM 以作出响应。
StuffDocumentsChain这条链接收一个文档列表,把它们全部格式化进一个提示,然后把该提示传给 LLM。它会传入 所有 文档,所以你要确保它能放进你所使用 LLM 的上下文窗口。
ReduceDocumentsChain这条链通过迭代地归约文档来合并它们。它把文档分组为块(小于某个上下文长度),然后把它们传入 LLM。接着它取回响应并继续这样做,直到能把所有内容放进一次最终的 LLM 调用。当你有很多文档、想让 LLM 跑遍所有文档并且可以并行完成时,它很有用。
MapReduceDocumentsChain这条链先把每个文档过一遍 LLM,然后用 ReduceDocumentsChain 归约它们。它适用的场景与 ReduceDocumentsChain 相同,但在尝试归约文档之前会先做一次 LLM 调用。
RefineDocumentsChain这条链通过基于第一个文档生成初始答案,然后遍历剩余文档来 精炼 其答案,从而折叠文档。它是顺序操作的,因此无法并行化。它适用的场景与 MapReduceDocumentsChain 类似,但适用于你希望通过精炼上一个答案来逐步构建答案的情况(而不是并行调用)。
MapRerankDocumentsChain它对每个文档调用一次 LLM,要求它不仅要回答,还要给出一个置信度分数。然后返回置信度最高的答案。当你有很多文档,但只想基于单个文档来回答,而不是尝试合并答案(像 Refine 和 Reduce 方法那样)时,它很有用。
ConstitutionalChain这条链先回答,然后尝试基于所提供的宪法原则精炼其答案。用它来强制一条链的答案遵循某些原则。
LLMChain
ElasticsearchDatabaseChainElasticsearch Instance这条链把自然语言问题转换为 Elasticsearch 查询,然后运行它,再总结响应。当你想要对 Elasticsearch 数据库提出自然语言问题时,它很有用。
FlareChain它实现了 FLARE,一种高级检索技术。它主要作为一种探索性的高级检索方法。
ArangoGraphQAChainArango Graph这条链从自然语言构造一条 Arango 查询,对图执行该查询,然后把结果传回 LLM 以作出响应。
GraphCypherQAChainA graph that works with Cypher query language这条链从自然语言构造一条 Cypher 查询,对图执行该查询,然后把结果传回 LLM 以作出响应。
FalkorDBGraphQAChainFalkor Database这条链从自然语言构造一条 FalkorDB 查询,对图执行该查询,然后把结果传回 LLM 以作出响应。
HugeGraphQAChainHugeGraph这条链从自然语言构造一条 HugeGraph 查询,对图执行该查询,然后把结果传回 LLM 以作出响应。
KuzuQAChainKuzu Graph这条链从自然语言构造一条 Kuzu Graph 查询,对图执行该查询,然后把结果传回 LLM 以作出响应。
NebulaGraphQAChainNebula Graph这条链从自然语言构造一条 Nebula Graph 查询,对图执行该查询,然后把结果传回 LLM 以作出响应。
NeptuneOpenCypherQAChainNeptune Graph这条链从自然语言构造一条 Neptune Graph 查询,对图执行该查询,然后把结果传回 LLM 以作出响应。
GraphSparqlChainGraph that works with SparQL这条链从自然语言构造一条 SparQL 查询,对图执行该查询,然后把结果传回 LLM 以作出响应。
LLMMath这条链把用户问题转换为数学题,然后(使用 numexpr)执行它。
LLMCheckerChain这条链用第二次 LLM 调用来验证其初始答案。当你需要对初始 LLM 调用多加一层验证时使用它。
LLMSummarizationChecker这条链用一系列 LLM 调用生成摘要,以确保它格外准确。当你允许多次 LLM 调用(例如你更看重准确性而非速度/成本)时,用它来替代普通的摘要链。
create_citation_fuzzy_match_chain✅使用 OpenAI 函数调用来回答问题并引用来源。
create_extraction_chain✅使用 OpenAI 函数调用来从文本中抽取信息。
create_extraction_chain_pydantic✅使用 OpenAI 函数调用来把文本中的信息抽取到 Pydantic 模型中。与 create_extraction_chain 相比,它与 Pydantic 的集成更紧密。
get_openapi_chain✅OpenAPI Spec使用 OpenAI 函数调用来查询 OpenAPI。
create_qa_with_structure_chain✅使用 OpenAI 函数调用对文本进行问答,并以特定格式响应。
create_qa_with_sources_chain✅使用 OpenAI 函数调用来带引用地回答问题。
QAGenerationChain从文档创建问题和答案。用于为检索项目的评估生成问题/答案对。
RetrievalQAWithSourcesChainRetriever对检索到的文档做问答,并引用其来源。当你希望答案响应在文本中包含来源时使用它。当你希望用检索器作为链的一部分来获取相关文档(而不是直接传入它们)时,用它来替代 load_qa_with_sources_chain。
load_qa_with_sources_chainRetriever对你传入的文档做问答,并引用其来源。当你希望答案响应在文本中包含来源时使用它。当你希望直接传入文档(而不是依赖检索器获取它们)时,用它来替代 RetrievalQAWithSources。
RetrievalQARetriever这条链先做检索步骤以获取相关文档,然后把这些文档传入 LLM 以生成响应。
MultiPromptChain这条链在多个提示之间路由输入。当你有多个可用来响应的潜在提示,并希望只路由到一个时使用它。
MultiRetrievalQAChainRetriever这条链在多个检索器之间路由输入。当你有多个可从中获取相关文档的潜在检索器,并希望只路由到一个时使用它。
EmbeddingRouterChain这条链使用嵌入相似度来路由传入的查询。
LLMRouterChain这条链使用 LLM 在潜在选项之间路由。
load_summarize_chain
LLMRequestsChain这条链从用户输入构造一个 URL,获取该 URL 处的数据,然后总结响应。与 APIChain 相比,这条链不专注于单一的 API 规范,而是更通用。