允许Haystack 2.x管道简化输入插槽解析

niwlg2el  于 5个月前  发布在  其他
关注(0)|答案(4)|浏览(71)

描述:

目前,在运行Haystack 2.x管道时,我们必须明确指定具有特定输入插槽的组件。例如:

query_dict = {"query": "What's the meaning of it all?"}
result = pipe.run(data={"search": query_dict, "prompt_builder": {"query": query, "messages": messages}, "similarity_ranker": query_dict})

这可能会变得很繁琐,尤其是当组件数量增加或管道复杂性增长时。

描述你希望的解决方案:

我们能否仅提供键值对而不使用组件?然后管道应该足够智能地解析所有可以用这些键值对填充的输入插槽。因此,理想情况下,以下情况应该是可能的:

result = pipe.run(data= {"query": "What's the meaning of it all?", "messages": messages})

在这种情况下,管道应该能够自动确定哪些组件可以分别用"query"和"messages"输入填充。

yqhsw0fo

yqhsw0fo1#

我对此也有同感。每次都必须指定组件名称,这确实令人沮丧。

yqhsw0fo

yqhsw0fo2#

嘿,虽然传递扁平字典的功能是存在的,但我希望RAG管道(包括embedder、prompt_builder和answer_builder)也能正常工作。
但是它不能😞,因为prompt_builder需要一个question参数,而embedder需要一个text参数,你必须使用:
rag_pipeline.run(data = {"query": "What are?", "text": "What are?", "question": "What are?"})
这仍然需要修复,否则输入槽位解析将无法正确解决。
现在重新打开。

nlejzf6q

nlejzf6q3#

我不明白我们如何解决这个问题,除非我们在命名上更加一致,尽可能地使用@Timoeller。

hxzsmxv2

hxzsmxv24#

关于RAG管道,我们唯一可以调整的名称是在提示符内 question ,应该是 query 。其他名称遵循组件的语义,例如 AnswerBuilder 输出一个 GeneratedAnswer ,该字段称为 query -这与期望输入为 AnswerBuilderquery 一致。同样, TextEmbedder 接受一个 text 输入(以及 DocumentEmbedder 接受 documents )是有意义的。

当前的设计对用户来说也更安全:目前,如果你没有将所有必需的输入传递给 run ,你将得到一个有意义的错误,解释如何修复它。现在想象一下,我们将每个组件统一为接受一个超级术语 haystack-input ,那么很容易 pipeline.run(data={"haystack-input": "What are superlinear returns?"}) ,管道会很高兴地将字符串转发到任何可能的组件,只是后来发现这不是预期的行为。

总之:让我们在整个代码库中整合同义词(例如,用 query 替换任何 question ,用 paths 替换 files )并关闭此问题。在离线同步后,我们同意需要以某种方式解决这个问题,我们将保持此问题开放以讨论想法。

相关问题