核心模块(Modules)
链(Chains)

链(Chain)

链式调用指的是一系列调用序列——无论是对大型语言模型(LLM)、工具还是数据预处理步骤的调用。主要支持这种方式的是LCEL

LCEL非常适合构建自己的链式调用,但拥有一些现成的链式调用也很好。LangChain支持两种类型的现成链:

  • 使用LCEL构建的链。在这种情况下,LangChain提供了一个更高层次的构造方法。然而,幕后所做的一切都是使用LCEL构建链。

  • [遗留] 通过从遗留的Chain类继承构建的链。这些链在幕后不使用LCEL,而是作为独立的类。

我们正在创建将所有链转换为LCEL版本的方法。我们这样做有几个原因。

  1. 以这种方式构建的链很好,因为如果你想修改链的内部,你只需简单地修改LCEL即可。

  2. 这些链原生支持流式传输、异步和批处理。

  3. 这些链自动在每个步骤获得可观测性。

本页包含两个列表。首先,是所有LCEL链构造器的列表。其次,是所有遗留链的列表。

LCEL 链

下面是一个包含所有LCEL链构造器的表格。此外,我们还报告了:

链构造器

这个链的构造函数。这些都是返回LCEL可运行的方法。我们还提供了API文档的链接。

函数调用

这是否需要OpenAI函数调用。

其他工具

此链中使用(如果有)的其他工具。

何时使用

我们关于何时使用此链的评论。

链构造器函数调用其他工具何时使用
create_stuff_documents_chain此链接收一组文档,并将它们全部格式化为提示,然后将该提示传递给LLM。它传递所有文档,所以你应该确保它适合你使用的LLM的上下文窗口。
create_openai_fn_runnable如果你想使用OpenAI函数调用来选择性地结构化输出响应。你可以传入多个函数供其调用,但它不必调用。
create_structured_output_runnable如果你想使用OpenAI函数调用来强制LLM以特定函数作出响应。你只能传入一个函数,链将始终返回此响应。
load_query_constructor_runnable可用于生成查询。你必须指定一列表允许的操作,然后它将返回一个可运行的程序,将自然语言查询转换为这些允许的操作。
create_sql_query_chainSQL数据库如果你想从自然语言构建SQL数据库的查询。
create_history_aware_retriever检索器此链接收对话历史记录,然后使用该历史记录生成搜索查询,并将该查询传递给底层检索器。
create_retrieval_chain检索器此链接收用户查询,然后将其传递给检索器以获取相关文档。然后这些文档(和原始输入)被传递给LLM以生成响应。

遗留链

下面我们报告存在的遗留链类型。在我们能够创建LCEL替代品之前,我们将一直支持这些链。我们报告了:

链的名称,或构造器方法的名称。如果是构造器方法,这将返回一个Chain子类。

函数调用

这是否需要OpenAI函数调用。

其他工具

链中使用(如果有)的其他工具。

何时使用

我们关于何时使用的评论。

函数调用其他工具何时使用
APIChainRequests Wrapper此链使用LLM将查询转换为API请求,然后执行该请求,得到响应,然后将该请求传递给LLM以响应
OpenAPIEndpointChainOpenAPI规范类似于APIChain,此链旨在与API交互。主要区别在于这优化了与OpenAPI端点的易用性
ConversationalRetrievalChain检索器此链可用于与文档进行对话。它接收一个问题和(可选的)先前的对话历史。如果有先前的对话历史,它使用LLM将对话重写为查询发送给检索器(否则只使用最新的用户输入)。然后它获取这些文档,并将它们(连同对话)传递给LLM以响应。
StuffDocumentsChain此链接收一组文档,并将它们全部格式化为提示,然后将该提示传递给LLM。它传递所有文档,所以你应该确保它适合你使用的LLM的上下文窗口。
ReduceDocumentsChain此链通过迭代减少它们来组合文档。它将文档分组为块(小于某个上下文长度),然后将它们传递给LLM。然后它获取响应并继续这样做,直到它可以将所有内容适应到一个最终的LLM调用中。当你有很多文档,你想让LLM运行在所有文档上,并且你可以并行执行时,这个很有用。
MapReduceDocumentsChain此链首先将每个文档传递给LLM,然后使用ReduceDocumentsChain来减少它们。在与ReduceDocumentsChain相同的情况中很有用,但在尝试减少文档之前先进行一次LLM调用。
RefineDocumentsChain此链通过基于第一文档生成初始答案,然后循环遍历其余文档来细化其答案。这是顺序操作的,所以不能并行化。它在类似MapReduceDocuments Chain的情况下很有用,但对于你想通过细化之前的答案(而不是并行化调用)来构建答案的情况。
MapRerankDocumentsChain这在每个文档上调用LLM,不仅要求它回答,还要求它产生一个它有多自信的分数。然后返回最自信的答案。当你有很多文档,但只想基于单个文档回答,而不是尝试组合答案(像Refine和Reduce方法那样)时,这个很有用。
ConstitutionalChain此链回答问题,然后尝试根据提供的宪法原则细化其答案。当你想强制执行链的答案遵循某些原则时使用这个。
LLMChain此链简单地将提示与LLM和输出解析器结合起来。做这个推荐的方式只是使用LCEL。
ElasticsearchDatabaseChainElasticSearch实例此链将自然语言问题转换为ElasticSearch查询,然后运行它,然后总结响应。这在你想用自然语言问Elastic Search数据库时很有用。
FlareChain这实现了FLARE (opens in a new tab),一种高级检索技术。它主要是作为一种探索性的高级检索方法。
ArangoGraphQAChainArango Graph此链从自然语言构建Arango查询,执行该查询对图进行操作,然后将结果传回LLM以响应。
GraphCypherQAChain使用Cypher查询语言的图此链从自然语言构建Cypher查询,执行该查询对图进行操作,然后将结果传回LLM以响应。
FalkorDBGraphQAChainFalkor数据库此链从自然语言构建FalkorDB查询,执行该查询对图进行操作,然后将结果传回LLM以响应。
HugeGraphQAChainHugeGraph此链从自然语言构建HugeGraph查询,执行该查询对图进行操作,然后将结果传回LLM以响应。
KuzuQAChainKuzu Graph此链从自然语言构建Kuzu Graph查询,执行该查询对图进行操作,然后将结果传回LLM以响应。
NebulaGraphQAChainNebula Graph此链从自然语言构建Nebula Graph查询,执行该查询对图进行操作,然后将结果传回LLM以响应。
NeptuneOpenCypherQAChainNeptune Graph此链从自然语言构建Neptune Graph查询,执行该查询对图进行操作,然后将结果传回LLM以响应。
GraphSparqlChain使用SparQL的图此链从自然语言构建SparQL查询,执行该查询对图进行操作,然后将结果传回LLM以响应。
LLMMath此链将用户问题转换为数学问题,然后执行它(使用numexpr (opens in a new tab)
LLMCheckerChain当你对初始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_chainOpenAPI规范使用OpenAI函数调用来查询OpenAPI。
create_qa_with_structure_chain使用OpenAI函数调用来以特定格式对文本进行问答。
create_qa_with_sources_chain使用OpenAI函数调来回带引用的问题。
QAGenerationChain从文档中创建问题和答案。可用于为检索项目生成问题/答案对以进行评估。
RetrievalQAWithSourcesChain检索器在检索到的文档上进行问答,并引用其来源。当你希望答案响应中包含来源文本时使用这个。当你想作为链的一部分使用检索器来获取相关文档(而不是传入它们)时,使用这个而不是load_qa_with_sources_chain
load_qa_with_sources_chain检索器对你传入的文档进行问答,并引用其来源。当你希望答案响应中包含来源文本时使用这个。当你想直接传入文档(而不是依赖检索器来获取它们)时,使用这个而不是RetrievalQAWithSources。
RetrievalQA检索器这个链首先执行检索步骤以获取相关文档,然后将这些文档传递给LLM以生成响应。
MultiPromptChain这个链在多个提示之间路由输入。当你有多个可能的提示可以使用来回答并只想路由到其中一个时使用这个。
MultiRetrievalQAChain检索器这个链在多个检索器之间路由输入。当你有多个可能的检索器可以从中获取相关文档并只想路由到其中一个时使用这个。
EmbeddingRouterChain这个链使用嵌入相似度来路由传入的查询。
LLMRouterChain这个链使用LLM在潜在选项之间进行路由。
load_summarize_chain这个链对文本进行摘要。
LLMRequestsChain这个链从用户输入构建URL,获取该URL处的数据,然后总结响应。与APIChain相比,这个链不专注于单一API规范,更加通用。