
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 生态系统不断发展的需求。