AI 应用程序通过不同组件执行的各种任务组成其工作核心。为了简化 AI 工程师的工作,开源框架为数据加载器、大型语言模型 (LLM)、向量数据库、重新排序器等基本元素提供了用户友好的抽象,并扩展到外部服务。这些框架还在研究如何最有效地协调这些组件,以便开发人员能更直观、更有效地创建有凝聚力的 AI 系统。
目前考虑的编排方法包括链条和管道,两者都基于有向无环图 (DAG) 模型。这导致了工作流的探索,工作流是实现代理的一种新方法,遵循事件驱动架构。
基于 Graph/DAG 的方法,如 LangGraph 以及我们之前的查询管道,需要在后台进行大量工作,以确定“接下来运行什么、输入是什么”等。这些逻辑伴随着大量边缘情况,在我们日益复杂的查询管道代码库中变得非常明显。
在有向无环图的背景下,无环特性虽然有助于避免循环造成的复杂性,但也可能限制日益代理的 AI 应用。当组件产生不良结果时,开发人员需要实现自我纠正机制。尽管没有循环,查询管道还是面临几个挑战:
- 调试困难:识别问题变得棘手。
- 执行不透明:组件的执行流程不透明,难以理解。
- 编排复杂:编排器变得过于复杂,需要管理大量边缘情况。
- 可读性差:复杂的管道难以阅读和理解。
为了解决上述问题,LlamaIndex 提出了一种新的设计范式转变,从而产生了工作流甚至更驱动的事件架构。
这是一种基于事件驱动步骤来控制应用程序执行流程的方法。在此,应用程序被划分为由事件触发的部分,称为步骤。
步骤实际上是 Python 函数,可以是单行代码或多行复杂代码。事件是指状态的变化或我们可以注意、观察或记录的任何事物。
结合步骤和事件,我们可以创建任意复杂的流程,封装逻辑并使我们的应用程序更易于维护和理解。工作流(以及一般的事件驱动编程)提供了更强大的解决方案。
LlamaIndex 工作流提供了几个独特特性和功能,使其区别于其他框架:
- 数据索引:构建数据的中间表示形式,以便 LLM 轻松且高效地使用。
- 多种引擎:用于自然语言访问数据的不同类型的引擎,包括查询引擎和聊天引擎等。
- 可观察性/评估:对应用程序进行严格实验、评估和监控的集成。
- LlamaCloud:数据解析、提取、索引和检索的托管服务。
- 社区和生态系统:强大的社区影响力和相关项目。
- 集成灵活性:既适用于入门构建也适用于定制构建。
- 高级检索/查询接口:提供高级接口,用于为 LLM 提供输入提示并检索上下文和知识增强输出。
- 适合初学者和高级用户:高级 API 方便初学者提取和查询数据,同时为高级用户提供低级 API 以自定义和扩展模块。
LlamaIndex 还具备 Agentic Components 等核心模块,能够自动推理数据的不同用例,使它们本质上成为代理。还有原生 OpenAIAgent 等实现,基于 OpenAI API 构建,用于函数调用,允许快速进行代理开发。
为使用 LlamaIndex 工作流实现高级 RAG 系统,我们提供了一系列的步骤和事件。首先进行数据索引和创建索引,然后使用该索引加查询来检索文本块,接着使用原始查询对检索到的文本块进行重新排序,最后综合最终回应。
为处理这些步骤,我们需要定义相关事件。例如:
- 将检索到的节点传递给重新排序器的事件。