工作流简介#
什么是工作流?#
工作流是一种基于事件驱动、分步骤控制应用程序执行流程的方式。
您的应用程序被划分为称为"步骤"的模块,这些步骤由事件触发,并自身发出事件来触发后续步骤。通过组合步骤和事件,您可以创建任意复杂的流程来封装逻辑,使应用程序更易维护和理解。一个步骤可以是从单行代码到复杂智能体的任何内容,它们可以具有任意输入和输出,这些数据通过事件传递。
示例#
在这个可视化流程中,您可以看到一个中等复杂度的工作流设计:它接收查询,可选地优化查询,然后尝试使用三种不同的RAG策略回答问题。LLM获取所有三种策略的答案并判断哪个是"最佳"结果返回。我们可以分解这个流程:
- 由
StartEvent
触发 - 名为
judge_query
的步骤判断查询质量。如果质量不佳,则生成BadQueryEvent
BadQueryEvent
会触发improve_query
步骤尝试改进查询,随后触发JudgeEvent
JudgeEvent
会再次触发judge_query
,形成循环直到查询达到足够质量。这称为"反思",是工作流能轻松实现的智能体应用关键部分- 当查询达标时,同时生成三个事件:
NaiveRAGEvent
、HighTopKEvent
和RerankEvent
,并行触发三个关联步骤执行不同RAG策略 - 每个查询步骤生成
ResponseEvent
,触发judge_response
步骤等待收集全部三个响应 judge_response
选择"最佳"响应并通过StopEvent
返回给用户
为什么选择工作流?#
随着生成式AI应用日益复杂,管理数据流和控制执行变得困难。工作流通过将应用分解为更小、更易管理的模块来解决这个问题。
其他框架和LlamaIndex本身曾尝试用有向无环图(DAG)解决此问题,但存在一些工作流所没有的限制:
- 循环和分支等逻辑需要编码到图边缘中,导致可读性差
- DAG节点间数据传递会带来可选参数、默认值和参数传递的复杂性
- 对于开发具有复杂循环分支的AI应用,DAG模式不够自然
工作流基于事件的模式和原生Python方法完美解决了这些问题。
对于简单RAG管道和线性演示,您可能不需要工作流。但随着应用复杂度提升,工作流将成为得力工具。
后续步骤#
让我们开始构建基础工作流,通过分步教程学习核心概念。
完成后,请查阅工作流组件指南作为参考手册,获取更多构建RAG/智能体的实用示例。
如需将工作流部署到生产环境,请查看llama_deploy指南(代码库)。