用例(User Case)
问答(Question Answering)

LangChain

问答(Question Answering)

概念指南 (opens in a new tab)

在此上下文中,问答指的是在文档数据上进行的问答。 对于其他类型数据的问答,请参考其他来源的文档,如 SQL 数据库问答与 API 交互

对于许多文档的问答,您几乎总是希望在数据上创建索引。 这可以用于智能地访问给定问题的最相关文档,从而避免将所有文档传递给 LLM(节省时间和金钱)。

有关更详细的介绍,请参见 此教程, 但对于超级快速启动,步骤涉及:加载文档

from langchain.document_loaders import TextLoader
loader = TextLoader('../state_of_the_union.txt')

在这里查看更多有关如何开始文档加载的信息。

创建索引

from langchain.indexes import VectorstoreIndexCreator
index = VectorstoreIndexCreator().from_loaders([loader])

目前最好、最流行的索引是VectorStore索引。

查询您的索引

query = "What did the president say about Ketanji Brown Jackson"
index.query(query)

或者,使用query_with_sources也可以返回所涉及的来源。

query = "What did the president say about Ketanji Brown Jackson"
index.query_with_sources(query)

同样,这些高级接口掩盖了许多在幕后发生的事情,请参见这里,以获取有关如何开始的更多信息,降低纬度理解它。

文档问答

文档问答涉及获取多个文档,然后对它们提出问题。LLM响应将根据文档内容包含您问题的答案。

使用问答链的推荐方法是:

from langchain.chains.question_answering import load_qa_chain
chain = load_qa_chain(llm, chain_type="stuff")
chain.run(input_documents=docs, question=query)
 

以下资源可用:

  • 问答教程:演示如何完成此任务的教程。
  • VectorDB问答教程:演示如何对VectorDB执行问答的教程。一个向量数据库。当你有大量文档时,这通常很有用,你不想将它们全部传递给LLM,而是想先对嵌入进行一些语义搜索。

添加来源

还有一种变体,除了回答之外,语言模型还会引用它的来源(比如使用了哪些传递给它的文档)。

使用带有来源的问答链进行起步的推荐方法是:

from langchain.chains.qa_with_sources import load_qa_with_sources_chain
chain = load_qa_with_sources_chain(llm, chain_type="stuff")
chain({"input_documents": docs, "question": query}, return_only_outputs=True)
 

以下资源可用:

  • 带来源的问答教程:一个演示如何使用带有来源的问答链的教程。成此任务的方法。

  • VectorDB QA With Sources Notebook:一份教程,介绍如何在向量数据库上使用源进行问答。当您有大量文档时,您可能不想将它们全部传递给LLM,而是想先对嵌入进行一些语义搜索,这时候这个方法通常非常有用。

其他相关资源 #

其他相关资源包括:

  • 用于处理文档的实用工具:指南介绍了几个实用的工具,对于此任务非常有帮助,包括文本分割器(用于分割长文档)和嵌入和向量存储(对上述向量数据库示例非常有用)。

  • CombineDocuments Chains:介绍了特定类型的链的概念概述,您可以使用这些链完成此任务。端到端示例 #

要查看以端到端方式完成的示例

请参阅以下资源: