promptflow 更好的流程条件逻辑

3j86kqsm  于 3个月前  发布在  其他
关注(0)|答案(7)|浏览(50)

您的功能请求是否与问题相关?请描述。

在使用prompt flow进行实践时,我发现由于非常有限的"激活配置"功能,存在巨大的限制。即使是简单的切换流程(如prompt flow示例所示),也必须过度工程化,将输出传递给多个节点。在许多情况下,我认为能够根据前一个节点执行简单的if/else会很有帮助。例如,如果不继续,则输出false;如果继续,则输出下一个节点的对象。不幸的是,您只能在激活配置中检查Bool(或其他类型),因此我只能将True或False传递给下一个节点,而不能传递所需的True情况下的输出。如果您的流程或逻辑具有任何复杂性,最终会导致到处都是尝试绕过有限条件功能的行。目前,每个可能的路径都需要从前一个节点获取输入,然后每个节点都需要单独检查,并且它只能检查一个“类型”值。

描述您希望的解决方案

允许在激活配置部分中使用更灵活的条件逻辑(包括和/或),而不是像bool或int等硬编码状态。即使只是一个Python if语句也是改进。例如,Intercom(聊天软件)允许您过滤用户的方式是一个简单UI但强大条件逻辑的好例子。也许还有“路由”节点会很好,它的整个工作就是检查输入值,然后根据需要将流程路由到其他任意数量的其他路径。

描述您考虑过的替代方案

由于所有隐藏的激活配置状态和各种输出在周围传递,创建高度复杂且难以跟踪的流程。或者在Python节点中执行所有逻辑,但这就放弃了拥有漂亮的拖放UI/流程的目的,我还不如直接托管一个Python文件而不使用prompt flow。也许可以创建一些自定义工具来路由,但我认为这仍然受限于激活配置的功能。

附加上下文

在我看来,这是Promptflow最大的限制因素。即使在最简单的流程中,条件逻辑也非常重要,我很难看到使用Promptflow的价值,因为这个限制。

sqxo8psd

sqxo8psd1#

你好,iceman3000,感谢你联系我们。你描述的关于流程中条件的情况是正确的。目前我们不支持条件部分中的复杂表达式,这需要对表达式进行更详细的设计。我们将把这个问题标记为“长期”问题,并在决定扩展我们的条件能力后在这里更新。谢谢。

mfpqipee

mfpqipee2#

你好,@iceman3000 ,感谢你的反馈。我们想了解更多关于这些需求的细节。
如果我理解正确的话,你是在询问类似以下内容吗?

activate:
    when: ${node.output} is not None
activate:
    when: ${node.output} != False

还是你有其他典型的场景?

zfciruhq

zfciruhq3#

我认为TLDR是我们需要在条件上增加更多的灵活性,以便甚至构建简单的流程,甚至是自己的复杂流程。通常情况下,你希望流程根据LLM的输出运行不同的方式或走不同的路径。当你只能明确检查单个案例时,这是相当困难的。目前解决方案是构建一堆节点,对于你的每个案例,然后将输出传递给它们,只有匹配的那个才会执行。如果你在这之后还有任何逻辑,那么这是毫无意义的,因为你必须然后在每个案例下复制所有的节点,或者你最终会在后续节点上留下占位符输入,只是为了让流程继续通过这一点。

qacovj5a

qacovj5a4#

我认为理想情况下,节点输出上的路径路由是最灵活且可维护的解决方案。也就是说,而不是将输出传递给所有节点,你可以在输出上设置条件。例如:如果输出为false,则转到节点a;如果output.value等于abc,则转到节点b;如果output.value等于xyz,则转到节点c。

jjjwad0x

jjjwad0x5#

@iceman3000 Can you explain more details about your proposal? It seems that you want to change the condition check from the input from output, using something like "goto"? Could you provide some examples how will you write such conditions in a DAG based yaml file?

dpiehjr4

dpiehjr46#

对不起,我对YAML不熟悉。

最近一个我想使用条件但无法使用的例子是检查来自openai调用的响应,以查看工具数组是否已填充(请注意,我必须使用Python节点进行此调用,因为promptflow中的openai工具不支持tools)。如果工具数组已填充,我需要触发相关工具在流程中运行。如果没有填充,我需要触发用户响应(因为现在所有工具调用都已完成)。

我在promptflow中找不到一种无缝的方法来实现这一点,所以我选择使用单个Python节点,并在那里执行所有工具调用和open AI函数,这有点让我觉得promptflow的意义不大哈哈。

请注意,我提出的路由思路更像是替代功能/方法,而不是最初的问题,即在当前状态下,条件激活在实际应用中可能没什么用处。

jv2fixgn

jv2fixgn7#

我同意需要改进条件逻辑。激活配置功能相当有限,无法测试多个条件。一个常见的用例可能是根据变量是否匹配多个值来执行节点。当我使用LLM节点对用户意图进行分类时,遇到了这个限制,我的意图是然后根据分类运行一个或多个节点。由于激活配置字段只接受一个值,无法实现期望的流程。我想回退的方法是像OP建议的那样,将所有代码放在一个单独的Python脚本中。

相关问题