链式语法

链式语法是另一个我们希望提前向您介绍的 Agently Workflow 框架特性。

绘制工作流连接关系图的示例代码中可能您已经注意到了,我们在表达工作流连接方式的时候,使用了一种看起来很特别的表达方式:

链式语法示意
# 使用()对将需要进行链式语法表达的代码段进行包裹
(
    workflow
        # 在完成一次连接关系表达后,连接关系表达方法将返回被指向的工作块对象
        # 而这个工作块对象又携带了所有以它为起点的连接关系表达方法,这就是链式表达成立的基础
        # 你可以使用这个特性快速地接续书写下一个连接关系
        # 这和绘制工作流程图中的某一个线性分支时,我们脑内的思考方式是高度一致的
        .connect_to("user_input")
        # 而对于条件连接而言,使用链式表达的体验
        # 非常接近于我们在正常编程时使用if语法进行流程控制的体验
        # 这样的直觉性设计,将进一步降低开发过程中的思考理解成本
        .if_condition(lambda return_value, storage: return_value=="#exit")
            .connect_to("END")
        .else_condition()
            .connect_to("assistant_reply")
            .connect_to("user_input")
)

🙋‍♂️:我不喜欢()对这种表达方式怎么办?

不使用()包裹的链式语法示意
# 当然也是可以的,在Python语法中,如果需要使用多行表达需要在原本一行内执行的代码
# 可以使用"\"符号进行连接,您可以自由选择自己喜欢的表达风格
workflow\
    .connect_to("user_input")\
    .if_condition(lambda return_value, storage: return_value=="#exit")\
        .connect_to("END")\
    .else_condition()\
        .connect_to("assistant_reply")\
        .connect_to("user_input")

🙋‍♀️:不使用链式语法来表达连接关系会怎么样?

不使用链式语法示意
# 也可以,如果我们需要编写复杂流程图的时候,也有可能将连接过程拆成一段一段进行编写
# 根据我们具体的开发情况,灵活选择表达方式和风格即可
# 下面的写法就是根据流程图中的连接关系,一段一段进行编写的效果
workflow.connect_to("user_input")
workflow.chunks["user_input"].if_condition(lambda return_value, storage: return_value=="#exit").connect_to("END")
workflow.chunks["user_input"].else_condition().connect_to("assistant_reply")
workflow.chunks["assistant_reply"].connect_to("user_input")