发布说明
⬆️ 升级说明
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 文档预处理功能的组件。此功能允许根据可配置的条件(如字数、句子边界和分页符)对文档进行精细拆分。它支持多种语言,并提供处理句子边界和缩略语的选项,便于更好地处理各种文档类型以供进一步处理。 -
更新了
SentenceTransformersDocumentEmbedder和SentenceTransformersTextEmbedder,以便通过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_tokens和completion_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_componentinit 参数。 -
我们在
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_type和component.set_input_types添加了约束,以防止在run方法不包含可变关键字参数时出现未定义行为。 - 在使用了
output_types装饰器时,阻止调用set_output_types。 - 更新了
CHAT_WITH_WEBSITEPipeline 模板,以反映HTMLToDocument转换器组件的变化。 - 修复了由于 Mermaid 新版本更改导致的 Pipeline 可视化问题。
- 修复了
SentenceWindowRetriever中的过滤器,现在支持另外三个 DocumentStores:Astra、PGVector、Qdrant。 - 修复了 Pipeline 在收到部分发送者输入时,无法运行带有 Variadic 输入的 Component 的问题。
ConditionalRouter的from_dict方法现在可以正确处理传递给它的dict明确包含custom_filters且其值为None的情况。之前这会导致AttributeError。- 使
PyPDFToDocument的from_dict方法对于未在字典中提供转换器的情况更加健壮。
