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

Haystack 2.6.0

在 Github 上查看

发布说明

⬆️ 升级说明

  • gpt-3.5-turbo 已被 gpt-4o-mini 取代,后者是所有依赖 OpenAI API 的组件的默认模型。
  • 源自 Haystack v1 的旧版过滤器语法和运算符(例如,“$and”、“$or”、“$eq”、“$lt”等)已完全移除。用户现在必须仅使用新的过滤器语法。有关更多详细信息,请参阅文档

🚀 新功能

  • 添加了一个新组件 DocumentNDCGEvaluator,它类似于 DocumentMRREvaluator,对检索评估非常有用。它计算归一化折损累积增益,这是一种在有多个真实相关文档且检索顺序很重要时有用的评估指标。

  • 添加了新的 CSVToDocument 组件。它以字节对象形式加载文件。加载的字符串将作为新文档添加,可供 Document Splitter 进行进一步处理。

  • 通过新的 TransformersZeroShotDocumentClassifier 组件添加了对零样本文档分类的支持。这允许您使用 Hugging Face 的预训练模型将文档分类到用户定义的类(二元和多标签分类)。

  • DocumentSplitter 中添加了使用自定义拆分函数选项。该函数必须接受一个字符串作为输入,并返回一个字符串列表,代表拆分单元。要使用此功能,请使用 split_by="function" 初始化 DocumentSplitter,并将自定义拆分函数提供为 splitting_function=custom_function

  • 添加了新的 JSONConverter 组件,用于将 JSON 文件转换为 Document。它还可以选择使用 jq 来过滤源 JSON 文件并仅提取特定部分。

import json  
from haystack.components.converters import JSONConverter 
from haystack.dataclasses import ByteStream  
data = {
  "laureates": [
    {
      "firstname": "Enrico",
      "surname": "Fermi",
      "motivation": "for his demonstrations of the existence of new radioactive elements produced "
      "by neutron irradiation, and for his related discovery of nuclear reactions brought about by slow neutrons",
    },
    {
      "firstname": "Rita",
      "surname": "Levi-Montalcini",
      "motivation": "for their discoveries of growth factors",
    },
  ],
} 
source = ByteStream.from_string(json.dumps(data)) 
converter = JSONConverter(jq_schema=".laureates[]", content_key="motivation", extra_meta_fields=["firstname", "surname"])  
results = converter.run(sources=[source]) 
documents = results["documents"] print(documents[0].content) 
# 'for his demonstrations of the existence of new radioactive elements produced by 
# neutron irradiation, and for his related discovery of nuclear reactions brought 
# about by slow neutrons' 
print(documents[0].meta)
# {'firstname': 'Enrico', 'surname': 'Fermi'} 
print(documents[1].content)
# 'for their discoveries of growth factors'  print(documents[1].meta) # {'firstname': 'Rita', 'surname': 'Levi-Montalcini'}
  • 添加了新的 NLTKDocumentSplitter,这是一个增强了 NLTK 文档预处理功能的组件。此功能允许根据可配置的条件(如字数、句子边界和分页符)对文档进行精细拆分。它支持多种语言,并提供处理句子边界和缩略语的选项,便于更好地处理各种文档类型以供进一步处理。

  • 更新了 SentenceTransformersDocumentEmbedderSentenceTransformersTextEmbedder,以便通过 tokenizer_kwargs 传递的 model_max_length 也能更新底层 SentenceTransformer 模型的 max_seq_length

⚡️ 增强说明

  • 调整了 ChatPromptBuilder 创建 ChatMessages 的方式。现在对消息进行深度复制,以确保所有元字段都被正确复制。

  • 暴露了 default_headers,以便将自定义标头传递给 Azure API,包括 APIM 订阅密钥。

  • 添加了可选的 azure_kwargs 字典参数,用于传递 Haystack 中未定义但 AzureOpenAI 支持的参数。

  • 允许在 PromptBuilder 的模板中使用以下语法添加当前日期:

    • {% now 'UTC' %}:获取 UTC 时区的当前日期。
    • {% now 'America/Chicago' + 'hours=2' %}:在芝加哥时区添加当前日期的两小时。
    • {% now 'Europe/Berlin' - 'weeks=2' %}:在柏林时区减去当前日期的两周。
    • {% now 'Pacific/Fiji' + 'hours=2', '%H' %}:添加斐济时区的两小时后,仅显示小时数。
    • {% now 'Etc/GMT-4', '%I:%M %p' %}:将 GMT-4 时区的日期格式更改为 AM/PM。

    请注意,如果未提供日期格式,则默认格式为 %Y-%m-%d %H:%M:%S。请参阅时区数据库列表以获取时区列表。

  • HuggingFaceAPIChatGenerator 添加了 usage 元字段,其中包含 prompt_tokenscompletion_tokens 键。

  • 添加了新的 GreedyVariadic 输入类型。它的行为类似于 Variadic 输入类型,因为它可以连接到多个输出插槽,但 Pipeline 会在接收到输入后立即运行它,而不会等待其他输入。这取代了 @component 装饰器中的 is_greedy 参数。如果您的 Component 具有 Variadic 输入类型和 @component(is_greedy=True),您需要将其类型更改为 GreedyVariadic 并从 @component 中删除 is_greedy=true

  • 添加了新的 Pipeline init 参数 max_runs_per_component,其行为与现有的 max_loops_allowed 参数完全相同,但更清晰地描述了其实际效果。

  • 添加了新的 PipelineMaxLoops 以反映新的 max_runs_per_component init 参数。

  • 我们在 TransformerSimilarityRanker 中增加了推理时的批量处理,以帮助防止在排序大量文档时出现 OOM 错误。

⚠️ 弃用说明

  • PyPDFToDocument 组件使用的 DefaultConverter 类已被弃用。其功能将在 2.7.0 版本中合并到该组件中。
  • Pipeline init 参数 debug_path 已被弃用,将在 2.7.0 版本中移除。
  • @component 装饰器的 is_greedy 参数已被弃用,将在 2.7.0 版本中移除。请改用 GreedyVariadic 类型。
  • 弃用了在调用 Pipeline.connect() 时将 Component 连接到自身的操作,从 2.7.0 版本开始将引发错误。
  • Pipeline init 参数 max_loops_allowed 已被弃用,将在 2.7.0 版本中移除。请改用 max_runs_per_component
  • PipelineMaxLoops 异常已被弃用,将在 2.7.0 版本中移除。请改用 PipelineMaxComponentRuns

🐛 Bug 修复

  • 修复了 PyPDFToDocument 组件的序列化,以防止不必要地序列化默认转换器。
  • component.set_input_typecomponent.set_input_types 添加了约束,以防止在 run 方法不包含可变关键字参数时出现未定义行为。
  • 在使用了 output_types 装饰器时,阻止调用 set_output_types
  • 更新了 CHAT_WITH_WEBSITE Pipeline 模板,以反映 HTMLToDocument 转换器组件的变化。
  • 修复了由于 Mermaid 新版本更改导致的 Pipeline 可视化问题。
  • 修复了 SentenceWindowRetriever 中的过滤器,现在支持另外三个 DocumentStores:Astra、PGVector、Qdrant。
  • 修复了 Pipeline 在收到部分发送者输入时,无法运行带有 Variadic 输入的 Component 的问题。
  • ConditionalRouterfrom_dict 方法现在可以正确处理传递给它的 dict 明确包含 custom_filters 且其值为 None 的情况。之前这会导致 AttributeError
  • 使 PyPDFToDocumentfrom_dict 方法对于未在字典中提供转换器的情况更加健壮。