Skip to main content
Workflows 是为生产应用程序构建的确定性、有状态、多代理程序。它们经过实战检验,功能强大,并提供以下优势:
  • 纯 Python: 使用标准的 Python 构建您的工作流程逻辑。在构建了数百个代理系统后,没有任何框架或基于步骤的方法能提供纯 Python 所具有的灵活性和可靠性。想要循环?使用 while/for;想要条件?使用 if/else;想要异常处理?使用 try/except
  • 完全控制和灵活性: 因为您的工作流程逻辑是一个 Python 函数,所以您可以完全控制整个过程,例如在处理之前验证输入,生成代理并并行运行它们,根据需要缓存结果以及纠正任何中间错误。这种级别的控制对于可靠性至关重要。
  • 内置存储和缓存: Workflows 附带内置的存储和状态管理。使用 session_state 来缓存中间结果。这种方法的一大优势是,您可以在单独的进程中触发工作流程,稍后进行轮询以获取结果,这意味着您不会遇到长时间运行的工作流程中非常常见的请求超时问题。
因为工作流程逻辑是一个 Python 函数,所以 AI 代码编辑器可以为您编写工作流程。只需将 https://docs.agno.com 添加为文档源即可。

最棒的部分

无需学习新东西!您已经掌握了 Python,已经掌握了如何构建 Agents 和 Teams——现在只需使用常规的 Python 代码将它们组合起来即可。无需学习新的 DSL 或语法。 这是一个缓存输出的简单工作流程。您可以看到即使是“存储状态”发生在响应后产生,您对整个过程的控制程度。
simple_cache_workflow.py

如何构建工作流程

  1. 通过继承 Workflow 类来定义您的工作流程类。
  2. 将代理或团队添加为工作流程的属性。这不是严格要求,只是帮助我们将代理的会话 ID 映射到工作流程的会话 ID。
  3. run() 方法中实现工作流程逻辑。这是运行工作流程时将调用的主函数(工作流程入口点)。此函数使我们能够充分控制整个过程,某些代理可以流式传输,其他代理可以生成结构化输出,代理可以使用 async.gather() 并行运行,某些代理可以具有在返回响应之前运行的验证逻辑。
您也可以使用 arun 方法异步执行工作流程。这允许在调用代理时进行更高效的非阻塞操作。有关详细示例,请参阅 Async Workflows 示例

完整示例:博客文章生成器

让我们创建一个博客文章生成器,它可以搜索网络、阅读热门链接并为我们撰写博客文章。我们将缓存数据库中的中间结果以提高性能。

创建工作流程

  1. 通过继承 Workflow 类来定义您的工作流程类。
blog_post_generator.py
  1. 向工作流程添加一个或多个代理,并在 run() 方法中实现工作流程逻辑。
blog_post_generator.py

运行工作流程

安装库
运行工作流程
现在,结果已缓存到数据库中,可供将来运行重复使用。再次运行工作流程以查看缓存的结果。
查看更多与工作流程相关的用例示例

设计决策

为什么我们建议将工作流程逻辑写成 Python 函数,而不是创建自定义抽象,如 Graph、Chain 或 Flow?根据我们构建 AI 产品的经验,工作流程逻辑需要是动态的(即在运行时确定),并且需要对并行化、缓存、状态管理、错误处理和问题解决进行细粒度控制。自定义抽象(Graph、Chain、Flow)以及新的 DSL 意味着需要学习新的概念和编写更多代码。最终我们将花费更多时间学习和与 DSL 搏斗。在我们使用过的所有项目中,一个简单的 Python 函数似乎总是能奏效。我们还发现复杂的流程可能跨越多个文件,有时本身就变成了一个模块。这里什么东西效果很好?Python。我们又回到了Unix 哲学如果我们的工作流程无法用标准的 Python 编写,那么我们应该简化和重组我们的工作流程,而不是反过来。另一个关于长时间运行的工作流程的重大挑战是管理请求/响应超时。我们需要工作流程异步触发,确认启动并将响应返回给客户端,然后允许客户端稍后轮询结果。实现这种用户体验需要将工作流程运行在后台任务中,并密切管理状态,以便客户端能够获得最新的更新。基于这些原因,我们建议将工作流程构建为标准的 Python 函数,其提供的控制、灵活性和可靠性是无与伦比的。