⭐️ Highlights
更快的导入
借助延迟导入,现在导入单个组件平均需要少 50% 的 CPU 时间。整体导入性能也得到了显著提升:例如,import haystack 现在消耗的 CPU 时间仅为之前的 2-5%。
扩展的异步运行支持
从本次发布开始,核心包中的所有聊天生成器和检索器都包含 run_async 方法,从而支持组件级别的异步执行。当在 AsyncPipeline 中使用时,此方法会自动运行,提供原生的异步功能。
新的 MSGToDocument 组件
使用 MSGToDocument 将 Microsoft Outlook .msg 文件转换为 Haystack 文档。此组件提取电子邮件元数据(如发件人、收件人、抄送、密送、主题)和正文内容,并将任何文件附件转换为 ByteStream 对象。
关闭管道连接的验证
在初始化 Pipeline 时将 connection_type_validation 设置为 false,以禁用管道连接的类型验证。这将允许您连接任何边并绕过可能遇到的错误,例如,当您将 Optional[str] 输出连接到 str 输入时。
⬆️ 升级说明
-
ExtractedTableAnswer数据类和Document数据类中的dataframe字段已在 Haystack 2.10.0 中弃用,现在已被移除。pandas不再是 Haystack 的必需依赖项,这使得安装更轻便。如果您使用的组件需要pandas,则会引发信息性错误,提示您安装它。有关详细信息和动机,请参阅 GitHub 讨论 #8688。 -
从 Haystack 2.11.0 开始,不再支持 Python 3.8。Python 3.8 已于 2024 年 10 月结束生命周期。
-
AzureOCRDocumentConverter不再生成带有已弃用dataframe字段的Document对象。我受影响吗?
- 如果您的工作流依赖于 AzureOCRDocumentConverter 生成的
Document对象中的dataframe字段,那么您受影响。 - 如果您在 Haystack 2.10 中初始化带有
dataframe的Document时看到DeprecationWarning,那么此更改将完全移除该字段。
如何处理此更改
AzureOCRDocumentConverter不再将检测到的表格存储为dataframe,而是将表格表示为Document的content字段中的 CSV 格式文本。- 更新您的处理逻辑,以处理 CSV 格式的表格而不是
dataframe。如果需要,您可以使用pandas.read_csv()将 CSV 文本转换回dataframe。
- 如果您的工作流依赖于 AzureOCRDocumentConverter 生成的
🚀 新功能
- 添加新的 MSGToDocument 组件,将 .msg 文件转换为 Haystack Document 对象。
- 将电子邮件元数据(例如发件人、收件人、抄送、密送、主题)和正文内容提取到 Document 中。
- 将附件转换为 ByteStream 对象,然后可以传递给 FileTypeRouter + 相关转换器。
- 我们引入了一个新的 type_validation 参数来控制管道连接中的类型兼容性检查。它可以设置为 True(默认)或 False,表示不执行类型检查,一切都允许。
- 向 HuggingFaceAPIChatGenerator 添加
run_async方法。此方法在内部依赖于 huggingface 的AsyncInferenceClient来生成聊天补全,并支持与run方法相同的参数。它返回一个可以 await 的协程。 - 向 OpenAIChatGenerator 添加
run_async方法。此方法在内部使用 OpenAI 客户端的异步版本来生成聊天补全,并支持与run方法相同的参数。它返回一个可以 await 的协程。 InMemoryDocumentStore以及相关的 InMemoryBM25Retriever 和 InMemoryEmbeddingRetriever 检索器现在支持异步模式。- 向 DocumentWriter 添加
run_async方法。此方法支持与run方法相同的参数,并依赖 DocumentStore 来实现write_documents_async。它返回一个可以 await 的协程。 - 向 AzureOpenAIChatGenerator 添加
run_async方法。此方法使用AsyncAzureOpenAI来生成聊天补全,并支持与run方法相同的参数。它返回一个可以 await 的协程。 - Sentence Transformers 组件现在通过“backend”参数支持 ONNX 和 OpenVINO 后端。支持的后端是 torch(默认)、onnx 和 openvino。有关更多信息,请参阅 Sentence Transformers 文档。
- 向 HuggingFaceLocalChatGenerator 添加
run_async方法。此方法在内部使用 ThreadPoolExecutor 返回可以 await 的协程。
⚡️ 增强说明
- 改进了 AzureDocumentEmbedder,以优雅地处理嵌入生成失败。错误将被记录,并继续处理剩余的批次。
- 在 FileTypeRouter 中,添加了对使用 mimetype “application/vnd.ms-outlook” 分类 .msg 文件的显式支持,因为 mimetypes 模块默认返回 None 来处理 .msg 文件。
- 添加了 XLSXToDocument 的 store_full_path 初始化变量,以允许用户切换是否在 Document 的 meta 中存储源文件的完整路径。默认设置为 False 以提高隐私性。
- 将 Mermaid 服务器的默认超时时间增加到 30 秒。Mermaid 服务器用于绘制管道。将超时时间暴露为
Pipeline.show和Pipeline.draw方法的参数。这允许用户根据需要自定义超时时间。 - 通过广泛使用跨包的延迟导入来优化导入时间。导入某个包的一个组件不再会导致导入该包的所有组件。例如,导入 OpenAIChatGenerator 不再导入 AzureOpenAIChatGenerator。
- Haystack 现在正式支持 Python 3.13。某些组件和集成可能尚未兼容。具体来说,在使用
spacy后端时,NamedEntityExtractor 无法在 Python 3.13 上正常工作。此外,如果您使用uv或poetry进行安装,可能会在安装 LocalWhisperTranscriber 组件所需的openai-whisper时遇到问题。在这种情况下,我们建议使用pip进行安装。 EvaluationRunResult现在可以将结果输出为 JSON、pandas Dataframe 或 CSV 文件。- 更新 ListJoiner,使其仅选择性地需要传入 list_type。默认情况下,它使用 List 类型,其行为类似于 List[Any]。
- 这使得 ListJoiner 能够将任何传入的列表合并成一个展平的列表。
- 用户仍然可以传入 list_type,如果他们希望在管道中进行更严格的类型验证。
- 添加了 PDFMinerToDocument 功能,用于检测和报告 PDF 文本提取中未解码的 CID 字符,帮助用户在处理带有非标准字体的 PDF 时识别潜在的文本提取质量问题。
- 简化了序列化代码,以提高可读性和可维护性。
- 更新了反序列化,允许用户省略标准类型库类型的
typing.前缀(例如,List[str]而不是typing.List[str])。
- 更新了反序列化,允许用户省略标准类型库类型的
⚠️ 弃用说明
EvaluationRunResult中 pandas DataFrame 的使用现在是可选的,并且score_report、to_pandas和comparative_individual_scores_report方法已被弃用,将在下一个 Haystack 版本中移除。
🐛 Bug 修复
- 在
ChatMessage.to_openai_dict_format实用方法中,如果存在name字段,则将其包含在返回的字典中。以前,name字段被错误地跳过了。 - 返回纯 pandas 数据帧的管道组件失败。套接字值的比较现在是“is not”而不是“!=”,以避免与数据帧的错误。
- 确保当
tool_strict设置为True时,OpenAIChatGenerator 在工具架构中设置additionalProperties: False。 - 修复了一个错误,其中 ConditionalRouter 的
output_type没有被正确序列化。这会导致路由器在序列化和反序列化后工作不正常。 - 修复了使用 OpenAIChatGenerator 进行流式传输时工具参数的累积。
- 添加了一个针对管道组件调度算法的修复,以减少组件同时等待输入时的执行顺序影响管道输出的边缘情况。我们首先查看拓扑顺序,以确定哪些等待的组件应该首先运行,当两个组件位于同一拓扑级别时,则回退到字母顺序。在循环管道中,如果等待的组件位于同一个循环中,我们立即回退到字母顺序。
- 修复使用
serialize_type实用程序时typing.Any的序列化。 - 修复了管道运行逻辑中的一个边缘情况,其中如果同一组件从多个输出套接字连接到套接字,则现有输入可能会被覆盖。
-
ComponentTool 不再截断
description。 - 更新了类型提示的导入路径,以使 ddtrace 3.0.0 能够与我们的 datadog 跟踪器一起工作。
- 在
haystack/utils/type_serialization.py中改进了序列化和反序列化,以正确处理Optional类型。
