Haystack 是一个开源框架,专为构建问答 (QA) 系统而设计。它通过将流程分解为模块化组件来处理问答任务:文档存储、检索和答案提取。首先,文档存储在针对快速搜索优化的数据库(如 Elasticsearch 或 FAISS)中。接下来,检索器组件使用基于关键词的方法 (BM25) 或神经网络模型 (DPR) 从数据库中识别相关的文本段落。最后,读取器模型(例如基于 BERT 的模型)处理检索到的文本以提取或生成答案。这种模块化方法允许开发人员根据自身需求混合搭配组件,以平衡速度和准确性。
开发人员可以针对特定的用例定制 Haystack 的流程。例如,如果低延迟至关重要,可以将 BM25 与 MiniLM 等较小的读取器模型配对。对于需要语义理解的复杂查询,DPR 检索器与 RoBERTa 等较大的模型结合可以提高准确性。Haystack 还支持混合检索,融合关键词和神经网络搜索的结果以覆盖不同的查询类型。流程可以通过添加额外的组件进行扩展,例如摘要器或翻译模块。例如,医疗问答系统可能首先检索研究论文,然后使用在生物医学文本上训练的特定领域读取器来提取精确答案。该框架的灵活性使其能够适应从企业搜索到客户支持自动化等各种场景。
Haystack 同时支持抽取式问答(直接从文本中提取答案)和生成式问答(创建新答案)。对于抽取任务,读取器在检索到的文档中识别答案片段。对于生成任务,可以集成 GPT 等模型从多个来源合成答案。它还支持“闭卷”问答,生成器无需检索即可产生答案,适用于事实性查询。为了优化性能,Haystack 允许将文档预处理成更小的块,从而提高检索精度。开发人员可以在自定义数据集上微调检索器和读取器,确保系统适应特定领域的语言。为了实现可扩展性,分布式数据库和近似最近邻索引(例如 FAISS)支持在数百万文档上进行高效搜索。通过解耦检索和读取阶段,Haystack 简化了调试和升级——例如,更换检索器而无需修改流程的其余部分。