跳到内容

工作流介绍#

什么是工作流?#

工作流是一种事件驱动、基于步骤的方式,用于控制应用程序的执行流程。

您的应用程序被划分为称为“步骤”(Steps)的部分,这些步骤由“事件”(Events)触发,并且本身也会发出事件,从而触发进一步的步骤。通过组合步骤和事件,您可以创建任意复杂、封装逻辑的流程,使您的应用程序更易于维护和理解。一个步骤可以是单行代码,也可以是复杂的智能体。它们可以具有任意输入和输出,这些输入和输出通过事件传递。

一个示例#

在此可视化中,您可以看到一个中等复杂程度的工作流,其设计目的是接收查询,选择性地改进查询,然后使用三种不同的 RAG 策略尝试回答该查询。LLM 从所有这三种策略中获取答案,判断哪个是“最佳”答案,并返回该答案。我们可以将此流程分解如下

  • 它由一个 StartEvent 触发
  • 一个名为 judge_query 的步骤判断查询是否高质量。如果不是,则生成一个 BadQueryEvent
  • 一个 BadQueryEvent 将触发一个名为 improve_query 的步骤,该步骤将尝试改进查询,然后触发一个 JudgeEvent
  • 一个 JudgeEvent 将再次触发 judge_query,创建一个循环,该循环可以持续到查询被判断为足够高质量为止。这被称为“反思”(Reflection),是 Workflows 使其易于实现的智能体应用的关键部分。
  • 如果查询质量足够高,将同时生成 3 个事件:一个 NaiveRAGEvent、一个 HighTopKEvent 和一个 RerankEvent。这三个事件并行触发 3 个相关步骤,每个步骤运行不同的 RAG 策略。
  • 每个查询步骤都会生成一个 ResponseEvent。一个 ResponseEvent 触发一个名为 judge_response 的步骤,该步骤将等待直到接收到所有 3 个响应。
  • judge_response 然后将选择“最佳”响应并通过 StopEvent 将其返回给用户。

A complex workflow

为什么使用工作流?#

随着生成式 AI 应用变得越来越复杂,管理数据流和控制应用程序执行变得越来越困难。工作流提供了一种管理此复杂性的方法,将应用程序分解为更小、更易于管理的部分。

其他框架和 LlamaIndex 本身之前曾尝试使用有向无环图(DAG)解决此问题,但这些方法存在一些工作流没有的限制:

  • 循环和分支等逻辑需要编码到图的边缘中,这使得它们难以阅读和理解。
  • 在 DAG 的节点之间传递数据会产生可选值和默认值以及应传递哪些参数的复杂性。
  • 对于尝试开发复杂、循环、分支 AI 应用的开发者来说,DAG 并不自然。

工作流的事件驱动模式和纯 Python 方法解决了这些问题。

对于简单的 RAG 管道和线性演示,我们不认为您需要 Workflows,但随着您的应用程序变得越来越复杂,我们希望您会选择使用它们。

后续步骤#

让我们构建一个基本工作流。请按照教程步骤逐步学习核心概念。

完成后,请查看我们的工作流组件指南,作为参考指南和构建 RAG/智能体的更多实用示例。

如果您已完成构建并想将工作流部署到生产环境,请查看我们的llama_deploy 指南仓库)。