核心模块(Modules)
链(Chains)

链(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 (opens in a new tab)这条链接收一个文档列表,把它们全部格式化进一个提示,然后把该提示传给 LLM。它会传入 所有 文档,所以你要确保它能放进你所使用 LLM 的上下文窗口。
create_openai_fn_runnable (opens in a new tab)✅如果你想用 OpenAI 函数调用来 可选地 构造输出响应。你可以为其调用传入多个函数,但它不一定要调用。
create_structured_output_runnable (opens in a new tab)✅如果你想用 OpenAI 函数调用 强制 LLM 以某个函数响应。你只能传入一个函数,链会 始终 返回该响应。
load_query_constructor_runnable (opens in a new tab)可用于生成查询。你必须指定一组合法的操作,然后它会返回一个 runnable,把自然语言查询转换为这些合法操作。
create_sql_query_chain (opens in a new tab)SQL Database如果你想从自然语言构造一条针对 SQL 数据库的查询。
create_history_aware_retriever (opens in a new tab)Retriever这条链接收对话历史,然后用它生成一个搜索查询,传给底层检索器。
create_retrieval_chain (opens in a new tab)Retriever这条链接收用户查询,然后把它传给检索器以获取相关文档。这些文档(以及原始输入)随后被传给 LLM 以生成响应。

旧版链

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

表格各列含义:

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