
LlamaIndex • 2024-09-05
隆重推出 llama-deploy,一种基于微服务的方式来部署 LlamaIndex Workflows
今天,我们很高兴地宣布发布 llama-deploy,这是我们用于部署和扩展使用 llama-index 构建的代理 Workflows 的解决方案!llama-deploy 是我们自推出 llama-agents 以来在如何最好地部署代理系统方面学习的成果。llama-deploy 可以在几行代码内将 llama-index Workflows 作为可扩展的微服务启动。想直接深入了解吗?查看文档,或继续阅读了解更多信息。
llama-deploy、llama-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 的关键特性
- 无缝部署:
llama-deploy允许您以最小的代码更改来部署llama-index工作流,简化了从开发到生产的过渡。 - 可扩展性:
llama-deploy的微服务架构使得独立组件的轻松扩展成为可能,确保您的系统能够应对不断增长的需求。 - 灵活性:
llama-deploy的中心辐射型设计使您能够替换组件(如消息队列)或添加新服务,而无需中断整个系统。 - 容错性:
llama-deploy内置的重试机制和故障处理确保您的多代理 AI 系统在生产环境中保持强大和弹性。 - 状态管理:
llama-deploy中的控制平面管理跨服务的状态,简化了复杂、多步流程的开发。 - 异步优先:
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 生态系统不断发展的需求。



