宣布我们的 LlamaCloud 全面可用(以及我们的 1900 万美元 A 轮融资)!
LlamaIndex

LlamaIndex 2024-09-05

隆重推出 llama-deploy,一种基于微服务的方式来部署 LlamaIndex Workflows

今天,我们很高兴地宣布发布 llama-deploy,这是我们用于部署和扩展使用 llama-index 构建的代理 Workflows 的解决方案!llama-deploy 是我们自推出 llama-agents 以来在如何最好地部署代理系统方面学习的成果。llama-deploy 可以在几行代码内将 llama-index Workflows 作为可扩展的微服务启动。想直接深入了解吗?查看文档,或继续阅读了解更多信息。

llama-deployllama-agents 和 Workflows

六月,我们发布了 llama-agents,这是一种部署使用 llama-index 构建的代理系统的方式。我们基于微服务的方法引起了社区的强烈反响,获得了超过 1 千个 GitHub star 以及大量的博客文章、教程和开源贡献。基于这一成功经验,八月,我们发布了 Workflows,这是一种强大的、事件驱动的架构,用于设计包括代理系统在内的任何类型的生成式 AI 系统。Workflows 受到的反响同样积极。

现在我们将这两种机制相结合,推出了 llama-deploy,它将构建 LlamaIndex Workflows 的便捷性与简单的原生部署机制结合起来。llama-deploy 基于 llama-agents 的思想和代码构建,后者已被整合到新的代码库中。

开发者喜爱 llama-agents 的所有思想都得到了保留:一切都是异步优先的,一切都是可独立扩展的微服务,并且有一个中心枢纽管理状态和服务注册。任何使用过 llama-agents 的人都能在几秒钟内上手 llama-deploy

llama-deploy 架构

我们认为多代理系统除了易于部署外,还需要可扩展性、灵活性和容错性,这正是我们的架构所提供的。llama-deploy 的架构对于使用过其前身 llama-agents 的任何人来说都会非常熟悉。

在 llama_deploy 中,有几个构成整个系统的关键组件

  • 消息队列 -- 消息队列充当所有服务和 控制平面 的队列。它提供向指定队列发布消息的方法,并将消息委托给消费者处理。
  • 控制平面 -- 控制平面是 llama_deploy 系统的中央网关。它跟踪当前任务和注册到系统的服务。 控制平面 还执行状态和会话管理,并利用 编排器
  • 编排器 -- 该模块处理传入的任务,并决定将其发送到哪个服务,以及如何处理来自服务的结果。默认情况下, 编排器 非常简单,并假定传入的任务已经指定了目的地。除此之外,默认的 编排器 还处理重试、失败和其他一些有益功能。
  • 工作流服务 -- 服务是实际工作发生的地方。服务接收传入的任务和上下文,处理它,并发布结果。当您部署一个工作流时,它就变成了一个服务。

 llama-deploy 的关键特性

  1. 无缝部署: llama-deploy 允许您以最小的代码更改来部署 llama-index 工作流,简化了从开发到生产的过渡。
  2. 可扩展性: llama-deploy 的微服务架构使得独立组件的轻松扩展成为可能,确保您的系统能够应对不断增长的需求。
  3. 灵活性: llama-deploy 的中心辐射型设计使您能够替换组件(如消息队列)或添加新服务,而无需中断整个系统。
  4. 容错性: llama-deploy 内置的重试机制和故障处理确保您的多代理 AI 系统在生产环境中保持强大和弹性。
  5. 状态管理: llama-deploy 中的控制平面管理跨服务的状态,简化了复杂、多步流程的开发。
  6. 异步优先: llama-deploy 在设计时考虑了高并发场景,非常适合实时和高吞吐量应用程序。

开始使用 llama-deploy

要开始使用 llama-deploy,您可以查阅项目 GitHub 仓库中提供的完整文档。README 提供了关于库的安装、部署和使用的详细说明。

以下是使用 llama-deploy: 部署简单工作流的快速示例:

首先,部署核心服务(包括一个控制平面和一个消息队列)

from llama_deploy import (
    deploy_core,
    ControlPlaneConfig,
    SimpleMessageQueueConfig,
)

async def main():
		# Deploy the workflow as a service
		await deploy_core(
		    control_plane_config=ControlPlaneConfig(),
		    message_queue_config=SimpleMessageQueueConfig(),
		)

if __name__ == "__main__":
    import asyncio
    asyncio.run(main())

然后,部署您的工作流

from llama_deploy import (
    deploy_workflow,
    WorkflowServiceConfig,
    ControlPlaneConfig,
)
from llama_index.core.workflow import Workflow, StartEvent, StopEvent, step

# Define a sample workflow
class MyWorkflow(Workflow):
    @step()
    async def run_step(self, ev: StartEvent) -> StopEvent:
        arg1 = str(ev.get("arg1", ""))
        result = arg1 + "_result"
        return StopEvent(result=result)

async def main():
		# Deploy the workflow as a service
		await deploy_workflow(
		    MyWorkflow(),
		    WorkflowServiceConfig(
		        host="127.0.0.1", port=8002, service_name="my_workflow"
		    ),
		    ControlPlaneConfig(),
		)

if __name__ == "__main__":
    import asyncio
    asyncio.run(main())

部署完成后,您可以使用客户端与您的部署进行交互

from llama_deploy import LlamaDeployClient, ControlPlaneConfig

# client talks to the control plane
client = LlamaDeployClient(ControlPlaneConfig())

session = client.get_or_create_session("session_id")

result = session.run("my_workflow", arg1="hello_world")
print(result)  # prints "hello_world_result"

资源

查看我们的示例文档API 参考以获取更多详细信息,包括使用不同的消息队列、使用 Docker 和 Kubernetes 部署、部署嵌套工作流等等!

多代理 AI 系统的未来

随着 llama-deploy 的发布,我们相信我们在多代理 AI 系统领域迈出了重要一步。通过赋能开发者轻松构建、部署和扩展复杂的 AI 应用程序,我们正在为更具创新性和影响力的 AI 驱动解决方案铺平道路。

我们路线图上的一些直接功能

  • 流式支持
  • 改进的弹性和故障处理
  • 更好的配置/设置选项
    • yaml
    • 环境变量
    • CLI

我们很高兴看到社区将使用 llama-deploy 创造出什么,并且我们致力于不断改进和扩展该库,以满足 AI 生态系统不断发展的需求。