Skip to content

工作流简介#

什么是工作流?#

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

您的应用程序被划分为称为"步骤"的模块,这些步骤由事件触发,并自身发出事件来触发后续步骤。通过组合步骤和事件,您可以创建任意复杂的流程来封装逻辑,使应用程序更易维护和理解。一个步骤可以是从单行代码到复杂智能体的任何内容,它们可以具有任意输入和输出,这些数据通过事件传递。

示例#

在这个可视化流程中,您可以看到一个中等复杂度的工作流设计:它接收查询,可选地优化查询,然后尝试使用三种不同的RAG策略回答问题。LLM获取所有三种策略的答案并判断哪个是"最佳"结果返回。我们可以分解这个流程:

  • StartEvent触发
  • 名为judge_query的步骤判断查询质量。如果质量不佳,则生成BadQueryEvent
  • BadQueryEvent会触发improve_query步骤尝试改进查询,随后触发JudgeEvent
  • JudgeEvent会再次触发judge_query,形成循环直到查询达到足够质量。这称为"反思",是工作流能轻松实现的智能体应用关键部分
  • 当查询达标时,同时生成三个事件:NaiveRAGEventHighTopKEventRerankEvent,并行触发三个关联步骤执行不同RAG策略
  • 每个查询步骤生成ResponseEvent,触发judge_response步骤等待收集全部三个响应
  • judge_response选择"最佳"响应并通过StopEvent返回给用户

复杂工作流示意图

为什么选择工作流?#

随着生成式AI应用日益复杂,管理数据流和控制执行变得困难。工作流通过将应用分解为更小、更易管理的模块来解决这个问题。

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

  • 循环和分支等逻辑需要编码到图边缘中,导致可读性差
  • DAG节点间数据传递会带来可选参数、默认值和参数传递的复杂性
  • 对于开发具有复杂循环分支的AI应用,DAG模式不够自然

工作流基于事件的模式和原生Python方法完美解决了这些问题。

对于简单RAG管道和线性演示,您可能不需要工作流。但随着应用复杂度提升,工作流将成为得力工具。

后续步骤#

让我们开始构建基础工作流,通过分步教程学习核心概念。

完成后,请查阅工作流组件指南作为参考手册,获取更多构建RAG/智能体的实用示例。

如需将工作流部署到生产环境,请查看llama_deploy指南代码库)。