链(Chains)
链(Chains)指一系列调用——无论是对 LLM、工具还是数据预处理步骤的调用。主要支持的实现方式是使用 LCEL。
LCEL 非常适合构造你的链,但开箱即用的链也很好用。LangChain 支持两种类型的开箱即用链:
- 用 LCEL 构建的链。在这种情况下,LangChain 提供更高层的构造函数。不过,底层所做的全部工作就是用 LCEL 构造一条链。
- [旧版] 通过继承旧版
Chain类构造的链。这些链底层不使用 LCEL,而是独立的类。
我们正在努力创建能为所有链生成 LCEL 版本的方法。这样做有几个原因。
- 以这种方式构造的链很好,因为如果你想修改链的内部,只需修改 LCEL 即可。
- 这些链原生开箱即用地支持流式输出、异步和批处理。
- 这些链在每个步骤都自动获得可观测性。
本页包含两个列表。首先是所有 LCEL 链构造函数的列表。其次是所有旧版 Chain 的列表。
LCEL 链
下面是所有 LCEL 链构造函数 的表格。
表格各列含义:
- Chain Constructor:这条链的构造函数。它们都是返回 LCEL Runnable 的方法。我们也会链接到 API 文档。
- Function Calling:是否需要 OpenAI 函数调用。
- Other Tools:这条链使用的其它工具(如果有)。
- When to Use:关于何时使用这条链的说明。
| Chain Constructor | Function Calling | Other Tools | When 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:关于何时使用的说明。
| Chain | Function Calling | Other Tools | When 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 规范,而是更通用。 |