Haystack 是一个用于构建搜索和问答系统的开源框架。其核心组件包括 Document Stores、Retrievers、Readers 和 Pipelines,它们协同工作以处理、检索和分析文本数据。每个组件都有其独特的作用,使开发人员能够构建可扩展和可定制的搜索管道。该框架强调模块化,允许用户根据需要替换工具或模型,同时保持一致的工作流程。
Document Stores 和 Retrievers 构成了 Haystack 数据处理的基础。Document Stores,例如 Elasticsearch、FAISS 或 Milvus,将非结构化文本(例如 PDF、网页)存储为结构化格式,以优化快速检索。然后,Retrievers 查询这些存储以获取相关文档。例如,像 BM25 这样的稀疏检索器使用关键字匹配,而像 DensePassageRetriever 这样的密集检索器使用神经嵌入来查找语义相似的文本。混合检索器结合了这两种方法以提高准确性。开发人员可以根据其用例选择合适的检索器——侧重关键字的任务可能更倾向于 BM25,而语义搜索则受益于密集检索器。
Readers 和 Pipelines 处理下游流程。Readers 从检索到的文档中提取答案,通常使用 BERT 或 RoBERTa 等 transformer 模型。例如,FARMReader
在自定义数据集上微调模型以提高答案精度。Pipelines 将组件连接在一起,定义诸如问答系统的“先检索后阅读”等工作流程。典型的 ExtractiveQAPipeline
连接检索器和阅读器,首先获取文档,然后扫描文档查找答案。对于生成任务,Pipelines 可以包含一个 PromptNode
,使用 GPT-3.5 等模型生成响应。Haystack 还提供用于部署的 REST API 以及用于标注数据的 LabelingUI
等工具。这种模块化设计使开发人员能够将框架应用于从文档搜索到聊天机器人等多种场景,而无需重新构建核心基础设施。