promptflow [功能请求]允许在运行时选择任意组合的变体

lvjbypge  于 3个月前  发布在  其他
关注(0)|答案(8)|浏览(36)

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

当流程中有多个节点,每个节点有多个变体时,每次运行只能指定一个变体。当使用选定的节点变体运行时,具有变体的其他节点将使用其指定的默认值运行。由于此功能,无法在不更新默认值的情况下运行所有变体组合。
为了说明,请考虑以下流程:我有两个LLM节点,每个节点都有2个变体。在每个节点中,有一个变体会在提示中添加一条语句以限制字符数,另一个变体则不会。在这种情况下,我想实验性地运行所有提示组合。
为了说明,我将把节点一和二分别称为N1和N2,并将变体一称为V1,变体二称为V2。
| 可能的组合总数 |
| ------------ |
| N1V1*, N2V1* |
| N1V1*, N2V2 |
| N1V2, N2V1* |
| N1V2, N2V2 |

  • 表示默认变体

鉴于节点变体只能针对另一个节点的默认变体运行,在具有多个节点和多个变体的场景下,将存在一些不可达的节点。在上面的示例中,如果我们为每个节点指定了V1作为默认变体。在这种情况下,无法执行非默认变体的Node 1与非默认变体的Node 2的组合。

描述您希望的解决方案

我认为这可能不是件简单的事情,但我认为也许可以:

  • 在流程级别提供定义变体的能力
  • 提供指定哪个变体将用于哪个节点的能力(这似乎可能会变得复杂)
    描述您考虑过的替代方案

除了在运行实验之前更改默认值之外,我还没有找到解决方法。

附加上下文

上面流程的示例可以在此处找到:
https://github.com/pragmatical/llmops-promptflow-template/blob/main/web_classification/flows/experiment/flow.dag.yaml

5lwkijsr

5lwkijsr2#

你好,这个问题有什么进展吗?

hujrc8aj

hujrc8aj3#

你好,这个问题有什么进展吗?我认为这不是一个长期目标。
对于熟悉机器学习中的网格搜索的人来说,缺乏运行所有变体组合的能力是一个明显的需要。参考微软学习:https://learn.microsoft.com/zh-cn/azure/machine-learning/prompt-flow/how-to-tune-prompts-using-variants?view=azureml-api-2#run-all-variants-with-a-single-row-of-data-and-check-outputs

ee7vknir

ee7vknir4#

你好@ZhiliangWu,我可以在这个功能周围开始进行原型设计吗?
除了简单地在argparse中添加一个列表,然后按照列表中的指定加载每个节点变体之外,这种更改还涉及到哪些潜在的变化?

yzckvree

yzckvree5#

你好,@ZhiliangWu,如果我围绕这个功能开始进行原型设计,可以吗?
除了简单地在argparse中添加一个列表,然后按照该列表中的指定加载每个节点变体之外,这种更改还涉及哪些潜在的变化?

你好,@sashokbg,感谢你接手这个问题!这取决于你的设计。对我来说,如果我们能够有意识地选择具有多个节点和变体的变体(而不仅仅是只能覆盖一个),那就太好了。

--variant ${node_name1.variant_name_1} --variant ${node_name2.variant_name_1}

你怎么看?

inkz8wg9

inkz8wg96#

你好@ZhiliangWu,我可以在这个功能周围开始进行原型设计吗?
除了简单地在argparse中添加一个列表,然后按照列表中的说明加载每个节点变体之外,这种更改可能涉及哪些潜在的更改?

你好@sashokbg,感谢你接手这个问题!这取决于你的设计。对我来说,如果我们可以有意识地选择具有多个变体的节点(而不仅仅是覆盖一个),那就太好了。

--variant ${node_name1.variant_name_1} --variant ${node_name2.variant_name_1}

你怎么看?

你好@ZhiliangWu,是的,输入似乎足够清晰。我的担忧是我们在代码中引用了一个带有其变体的运行示例。目前变体只是一个字符串。
因此,为了添加多参数变体,我们应该更改运行示例的主键等,这可能会产生一些我尚未了解的影响。
(我对项目内部的部分只有非常有限的了解,我不是Python开发者)
我会做一些计算,然后回来告诉你。
@crazygao,@YingChen1996,@wangchao1230对这个主题有什么想法或建议吗?

uqzxnwby

uqzxnwby7#

我建议现在不要这样做。因为我们还没有明确定义签名。pf.runs.create的返回类型应该是单个运行。这里的SDK API推荐是什么?

yfjy0ee7

yfjy0ee78#

你好,wangchao1230。API仍然是相同的。pf.runs.create将返回一个单一的运行,但是args.variant将变成一个列表。
这个想法是,一个变体(我们称之为Flow Variant)应该是节点覆盖的列表。
我们可以将其建模为一个新的类,例如:

class FlowVariant:
    _name: str  # 允许给变体一个有意义的名称,例如:mistral_with_vector_search
    _overrides: list[str]  # 例如:[${node_chat.mistral}, ${node_rag.vector}]

相关问题