链式语法
链式语法是另一个我们希望提前向您介绍的 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")