要在 Haystack 中设置管道,首先创建一个 Pipeline
对象并向其中添加组件(称为“节点”)。Haystack 管道定义了处理文档或回答问题的一系列步骤,例如检索文档和分析文档。管道中的每个节点执行特定任务——例如文本提取、检索或答案生成——您可以通过连接这些节点来控制数据如何在它们之间流动。例如,一个基本问答管道可能包括一个检索器节点用于查找相关文档,以及一个阅读器节点用于从这些文档中提取答案。您可以通过添加节点并使用管道的 add_node()
方法指定它们的连接来定义管道结构。
接下来,使用必要的参数配置管道中的每个组件。例如,检索器节点可能使用 Elasticsearch 或 DPR(稠密段落检索)等稠密向量搜索方法,需要使用文档存储和模型对其进行初始化。阅读器节点可以使用 Hugging Face Transformers 模型(例如,bert-base-uncased
)从检索到的文本中提取答案。每个组件的设置取决于您的用例:您可以调整 top_k
参数来控制检索器返回多少文档,或为阅读器设置置信度阈值。初始化通常涉及在创建组件时传递这些参数,例如 Retriever(document_store=es_store, top_k=5)
。
最后,为高级工作流定制管道。Haystack 允许您添加预处理步骤(例如,文件转换器、文本分割器)或后处理逻辑(例如,答案过滤)。例如,您可以添加一个 TextConverter
节点,用于在将 PDF 发送给检索器之前从中提取文本,或添加一个 JoinAnswers
节点,用于组合多个阅读器模型的结果。您还可以通过继承 BaseComponent
创建自定义节点来处理独特任务。管道通过调用 run()
并提供查询字符串或文件路径等输入来执行。测试和迭代管道结构——例如调整节点的顺序或替换组件——有助于优化搜索、摘要或问答等任务的性能。