📘 **TELUS Agriculture & Consumer Goods** 如何通过 **Haystack Agents** 转变促销交易

Haystack 2.3.0

在 Github 上查看

🧑‍🔬 Haystack 实验包

随着此版本的发布,我们推出一个新的仓库和包:haystack-experimental。此包将与 haystack-ai 一同安装,并为您提供实验性组件的访问权限。顾名思义,这些组件将高度探索性,并且可能会或可能不会被集成到 Haystack 的主包中。

  • haystack-experimental 仓库中的每个实验组件的生命周期为 3 个月
  • 3 个月结束标志着实验的结束。届时,该组件将被移至 Haystack 核心包,或被淘汰

要了解有关实验包的更多信息,请查看实验包文档[链接]和 API 参考[链接]。要使用实验包中的组件,只需使用 from haystack_experimental.component_type import Component。目前有哪些内容?

  • OpenAIFunctionCaller:在 Chat Generators 之后使用此组件来调用 LLM 返回的函数。
  • OpenAPITool:OpenAPITool 是一个旨在与 OpenAPI 服务的 RESTful 端点进行交互的组件。其主要功能是根据用户提供的指令生成并发送适当的有效负载到这些端点。OpenAPITool 弥合了自然语言输入与结构化 API 调用之间的差距,使用户能够更轻松地与复杂的 API 进行交互,从而将 OpenAPI 指定服务的结构化世界与 LLM 应用集成。
  • EvaluationHarness - 一个工具,可以将管道包装起来进行评估,以及将复杂的评估任务打包成一个简单的可运行组件。

有关更多信息,请访问 https://github.com/deepset-ai/haystack-experimental 或 haystack_experimental 参考 API https://docs.haystack.com.cn/v2.3/reference/(左下角面板)。

📝 新的转换器

  • 新的 DocxToDocument 组件,用于将 Docx 文件转换为 Documents。

⬆️ 升级说明

  • 现在必须手动安装 trafilatura(使用 pip install trafilatura)才能使用 HTMLToDocument 组件。

  • 已从 PyPDFToDocument 中移除了已弃用的 converter_name 参数。

    要为 PyPDFToDocument 指定自定义转换器,请使用 converter 初始化参数,并传入实现 PyPDFConverter 协议的类的实例。

    PyPDFConverter 协议定义了 convertto_dictfrom_dict 方法。DefaultConverter 类中提供了 PyPDFConverter 的默认实现。

  • 已移除已弃用的 HuggingFaceTEITextEmbedderHuggingFaceTEIDocumentEmbedder。请改用 HuggingFaceAPITextEmbedderHuggingFaceAPIDocumentEmbedder

  • 已移除已弃用的 HuggingFaceTGIGeneratorHuggingFaceTGIChatGenerator。请改用 HuggingFaceAPIGeneratorHuggingFaceAPIChatGenerator

🚀 新功能

  • 添加了一个新的 SentenceWindowRetrieval 组件,允许执行句子窗口检索,即从文档存储中检索给定文档的周围文档。当文档被分割成多个块时,这很有用,并且您想要检索给定块的周围上下文。
  • 为 ConditionalRouter 添加了自定义过滤器支持。用户现在可以传入一个或多个自定义 Jinja2 过滤器可调用对象,并在路由中定义条件表达式时访问这些过滤器。
  • 在 JoinDocuments 中添加了一个新模式,基于分布的排名融合,如[这篇文章]( https://medium.com/plain-simple-software/distribution-based-score-fusion-dbsf-a-new-approach-to-vector-search-ranking-f87c37488b18)所述。
  • converters 类别中添加了 DocxToDocument 组件。它使用 python-docx 库将 Docx 文件转换为 haystack Documents。
  • 使用 python-pptx 库添加了一个 PPTX 到 Document 的转换器。提取每张幻灯片的所有文本。每张幻灯片都用分页符“f”分隔,以便 DocumentSplitter 可以按幻灯片进行分割。
  • DocumentSplitter 现在支持 split_idsplit_overlap,以提供对分割过程的更多控制。
  • 引入了 TransformersTextRouter!此组件使用 transformers 文本分类管道,根据所选文本分类模型的标签将文本输入路由到不同的输出连接。
  • 在 InMemoryDocumentStore 的不同实例之间添加了内存共享。设置与其他实例相同的 index 参数将确保内存被共享。例如:`python index = "my_personal_index" document_store_1 = InMemoryDocumentStore(index=index) document_store_2 = InMemoryDocumentStore(index=index) assert document_store_1.count_documents() == 0 assert document_store_2.count_documents() == 0 document_store_1.write_documents([Document(content="Hello world")]) assert document_store_1.count_documents() == 1 assert document_store_2.count_documents() == 1`
  • MetaFieldRanker 中添加了一个新的 missing_meta 参数,该参数决定了如何处理缺少排序元字段的文档。支持的值包括 “bottom”(将缺少元数据的文档放在排序列表的底部)、“top”(将它们放在顶部)和 “drop”(将它们完全从结果中移除)。

⚡️ 增强说明

  • 添加了 apply_filter_policy 函数,用于标准化所有特定于文档存储的检索器上的过滤器策略的应用,允许基于所选策略(替换或合并)一致地处理初始过滤器和运行时过滤器。
  • EvaluationRunResult.comparative_individual_scores_report() 添加了一个新参数,用于指定要在比较 DataFrame 中保留的列。
  • 在 ‘PipelineBase’ 中添加了 ‘remove_component’ 方法,用于删除组件及其连接。
  • 为 InMemoryDocumentStore 添加了序列化方法 save_to_disk 和 write_to_disk。
  • 当使用“openai”作为基于 LLM 的评估器时,来自 OpenAI 的元数据将在输出字典中,键为“meta”。
  • trafilatura 从直接依赖项移除,并使其成为惰性导入的依赖项。
  • 将 DocxToDocument 组件重命名为 DOCXToDocument,以遵循其他转换器组件的命名约定。
  • 通过将错误模板处理切换为单个用户消息,使 JSON schema 验证器与所有 LLM 兼容。还通过仅包含最后一个错误而不是完整的消息历史记录来降低成本。
  • 增强了所有相关组件中 HuggingFace API 环境变量名称的灵活性,以支持 'HF_API_TOKEN' 和 'HF_TOKEN',从而提高了与广泛使用的 HF 环境变量命名约定的兼容性。
  • 更新了 ContextRelevance 评估器的提示,明确要求对每个陈述进行评分。
  • 改进了 LinkContentFetcher,以支持更广泛的内容类型,包括文本、应用程序、音频和视频类型的 glob 模式。此更新引入了更灵活的内容处理程序解析机制,允许直接匹配和模式匹配,从而大大提高了处理程序对 Web 上遇到的各种内容类型的适应性。
  • 为 AzureOpenAIGenerator 添加 max_retries。现在可以通过设置 max_retries 来初始化 AzureOpenAIGenerator。如果未设置,它将从 OPENAI_MAX_RETRIES 环境变量推断,或设置为 5。AzureOpenAIGenerator 的超时(如果未设置)将从 OPENAI_TIMEOUT 环境变量推断,或设置为 30。
  • 为 InMemoryBM25Retriever 和 InMemoryEmbeddingRetriever 引入了 'filter_policy' 初始化参数,允许用户定义运行时过滤器如何应用,可以选择 'replace'(替换)初始过滤器或 'merge'(合并)它们,从而在过滤查询结果方面提供更大的灵活性。
  • 现在,管道序列化到 YAML 时支持将元组作为字段值。
  • 为结构化日志添加了对 [structlog 上下文变量]( https://www.structlog.org/en/24.2.0/contextvars.html) 的支持。
  • AnswerBuilder 现在可以接受 ChatMessages 作为输入,而不仅仅是字符串。使用 ChatMessages 时,元数据将自动添加到答案中。
  • 当未安装 sentence-transformers 库且使用的组件需要它时,更新了错误消息。
  • 在 AzureOpenAIChatGenerator 初始化中添加了 max_retriestimeout 参数。
  • 在 AzureOpenAITextEmbedder 初始化中添加了 max_retriestimeout 参数。
  • AzureOpenAIDocumentEmbedder 初始化中添加了 max_retriestimeout 参数。
  • 改进了反序列化错误的错误消息。

⚠️ 弃用说明

  • Haystack 1.x 旧版过滤器已弃用,将在未来的版本中移除。请使用文档中描述的新过滤器样式 - https://docs.haystack.com.cn/docs/metadata-filtering
  • ContextRelevanceEvaluator 的输出将在 Haystack 2.4.0 中发生变化。将对整个上下文进行评分,而不是对单个陈述进行评分,并且只会返回相关的句子。现在,如果找到相关句子,则返回 1 分,否则返回 0 分。

🐛 Bug 修复

  • LinkContentFetcher 中的 HTML 文件编码
  • 这更新了 TransformersSimilarityRanker、SentenceTransformersDiversityRanker、SentenceTransformersTextEmbedder、SentenceTransformersDocumentEmbedder 和 LocalWhisperTranscriber 的 from_dict 方法,以便在使用仅包含必需参数的 init_parameters 加载时能够正常工作。
  • 修复了 TransformersZeroShotTextRouter 和 TransformersTextRouter 的 from_dict 方法,使其在 init_parameters 仅包含必需变量时也能正常工作。
  • SASEvaluator 现在如果 predicted_answers 输入中包含 None 值,则会引发 ValueError
  • 如果安装了 ddtraceopentelemetry,则在导入时自动启用跟踪。
  • 已修复 Azure OCR 中字节流的元数据处理。
  • 在 CacheChecker 组件中使用新的过滤器语法,而不是旧的语法。
  • 通过在 ‘ChatMessage’ 和 ‘ChatPromptBuilder’ 上创建 ‘to_dict’ 和 ‘from_dict’ 方法,解决了 ‘ChatPromptBuilder’ 上的序列化错误。
  • 修复了运行包含具有条件输出的组件的 Pipeline 的一些错误。一些本应不运行的分支仍然会运行,即使它们没有收到任何输入。另一些分支则会导致 Pipeline 卡住,等待运行该分支,即使它们没有收到任何输入。行为将取决于未接收输入的组件是否有可选输入。
  • 修复了 MRR 和 MAP 分数的计算。
  • 修复了包含 LLMEvaluator 子类的评估器组件的管道的反序列化。
  • 修复了模式验证器中的递归 JSON 类型转换,使其不那么激进(避免无限递归)。
  • 为序列化函数添加了丢失的 'organization' 参数。
  • 正确序列化 LLMEvaluator 组件及其子类的初始化参数中的元组和类型。
  • 固定 numpy<2 以避免引起几个核心集成失败的重大更改。也固定 tenacity(8.4.0 已损坏)。