描述:
目前,在运行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"输入填充。
4条答案
按热度按时间yqhsw0fo1#
我对此也有同感。每次都必须指定组件名称,这确实令人沮丧。
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?"})
这仍然需要修复,否则输入槽位解析将无法正确解决。
现在重新打开。
nlejzf6q3#
我不明白我们如何解决这个问题,除非我们在命名上更加一致,尽可能地使用@Timoeller。
hxzsmxv24#
关于RAG管道,我们唯一可以调整的名称是在提示符内
question
,应该是query
。其他名称遵循组件的语义,例如AnswerBuilder
输出一个GeneratedAnswer
,该字段称为query
-这与期望输入为AnswerBuilder
的query
一致。同样,TextEmbedder
接受一个text
输入(以及DocumentEmbedder
接受documents
)是有意义的。当前的设计对用户来说也更安全:目前,如果你没有将所有必需的输入传递给
run
,你将得到一个有意义的错误,解释如何修复它。现在想象一下,我们将每个组件统一为接受一个超级术语haystack-input
,那么很容易pipeline.run(data={"haystack-input": "What are superlinear returns?"})
,管道会很高兴地将字符串转发到任何可能的组件,只是后来发现这不是预期的行为。总之:让我们在整个代码库中整合同义词(例如,用
query
替换任何question
,用paths
替换files
)并关闭此问题。在离线同步后,我们同意需要以某种方式解决这个问题,我们将保持此问题开放以讨论想法。