Haystack 处理非文本数据的方式是先将其转换为可搜索的文本表示或数值嵌入(embeddings),以兼容其以文本为中心的架构。对于图像、音频或 PDF 等数据,Haystack 依靠预处理步骤和机器学习模型来提取有意义的特征或元数据。这些转换后的表示随后在 Haystack 框架内被视为“文档”,可以使用与文本数据相同的管道组件进行索引、存储和查询。
该框架通过专门的文档类型以及与机器学习模型的集成来支持非文本数据。例如,Haystack 的 Document
对象可以存储二进制文件(例如图像、音频)及其元数据,而像 OCR(光学字符识别)这样的预处理工具可以从扫描的 PDF 中提取文本。对于音频,Whisper 等语音转文本模型可以将语音转录为可搜索的文本。对于图像或视频,CLIP 等预训练视觉模型可以生成捕捉视觉语义的向量嵌入(vector embeddings)。这些嵌入存储在与 Haystack 集成的向量数据库(例如 FAISS、Milvus)中,从而实现相似性搜索。开发人员可以使用 Haystack 的 Pipeline
类将这些步骤链接到管道(pipelines)中,从而在统一的工作流程中结合预处理、嵌入生成和检索。
定制化是关键:Haystack 允许开发人员针对特定数据类型插入自己的模型或第三方 API。例如,医学影像管道可以使用微调的 ResNet 模型从 X 光片生成嵌入,而播客搜索系统可以将语音识别与关键词提取相结合。Haystack 在元数据过滤方面的灵活性也允许用户结合文本和非文本标准——例如搜索标记为“日落”并按创建日期过滤的图像。虽然 Haystack 本身不直接处理原始非文本数据,但其可扩展的设计确保开发人员可以在无需重建整个搜索基础设施的情况下集成特定领域工具。