基于文档的问答 Question Answering Over Documents
虽然LLM非常强大,但它们对于它们未经训练的信息一无所知。如果您想使用LLM来回答它未经训练的文档相关问题,您需要向其提供这些文档的信息。最常用的方法是通过"检索增强生成"( retrieval augmented generation )。
检索增强生成的思想是,在给定一个问题时,首先进行检索步骤以获取任何相关文档。然后将这些文档与原始问题一起传递给语言模型,并让它生成一个回答。然而,为了做到这一点,首先需要将文档以适合进行此类查询的格式呈现。
本页介绍了这两个步骤的高级思想:
(1) 将文档摄入到可查询格式中,然后
(2) 进行检索增强生成链。
摄入 Ingestion
为了使用语言模型与数据进行交互,您首先需要将其转换为适合的格式。这种格式可以是索引( Index )。通过将数据放入索引中,可以使后续的步骤更容易与之交互。
有几种类型的索引,但最常见的是向量存储( Vectorstore )。将文档摄入到向量存储中可以按照以下步骤完成:
- 加载文档(使用文档加载器)
- 分割文档(使用文本分割器)
- 为文档创建嵌入(使用文本嵌入模型)
- 将文档和嵌入存储到向量存储中
生成 Generation
现在我们有了一个索引,如何使用它进行生成呢?可以将此过程分为以下步骤:
- 接收用户提问
- 在索引中查找与问题相关的文档
- 使用问题和任何相关文档构建一个 PromptValue(使用 PromptTemplate )
- 将PromptValue传递给模型
- 获取结果并返回给用户。