Haystack 通过模块化的流水线架构处理文档检索和搜索,该架构集成了文档存储、检索模型和可选的优化步骤。 其核心是,Haystack 使用文档存储(例如 Elasticsearch、FAISS 或内存数据库)来索引和管理文本数据。 文档经过预处理——拆分为块、嵌入到向量中(如果使用密集检索),并与元数据一起存储。 对于搜索,开发人员可以在稀疏检索器(例如,用于基于关键字匹配的 BM25)或密集检索器(例如,用于语义相似性的基于 Transformer 的模型,如 DPR 或 Sentence-BERT)之间进行选择。 这些检索器查询文档存储以获取相关结果,然后可以对这些结果进行重新排序或进一步处理。 这种灵活性使开发人员可以根据自己的用例定制系统,从而平衡速度和准确性。
例如,开发人员可能会使用 Elasticsearch 作为文档存储,并使用 BM25 进行快速关键字搜索。 他们可以通过将 PDF 分成段落并存储文档标题等元数据来索引 PDF。 当用户搜索“机器学习”时,BM25 会检索包含确切术语的段落。 为了提高相关性,他们可能会添加密集检索器,例如 SentenceTransformersRetriever
,它将查询和文档转换为嵌入,并找到语义上相似的结果——即使关键字不匹配。 Haystack 的 Pipeline
类可以轻松地链接组件:检索器提取候选结果,并且 TransformersSimilarityRanker
使用交叉编码器(例如 MiniLM-L12)重新排序它们,以获得更精细的相关性评分。 这种两阶段方法将初始检索器的广泛召回与精确的排名相结合。
高级功能包括混合搜索(结合稀疏和密集检索器)和元数据过滤。 例如,新闻应用程序可以使用 BM25 查找提及“气候变化”的文章,并使用密集检索器捕获有关“全球变暖”的文章,然后按日期或类别过滤结果。 Haystack 还支持自定义预处理(例如,使用 spaCy 进行实体提取)以及与 LLM 的集成,以执行摘要等任务。 开发人员可以通过使用 Weaviate 或 Milvus 等分布式文档存储来扩展系统,并通过 REST 或 FastAPI 部署 API。 通过解耦存储、检索和后处理,Haystack 提供了一个可组合的框架,用于构建适应特定数据和性能需求的搜索系统。