统一部署与三种部署方式
一个部署管理器、三种部署策略:子进程、Docker、Kubernetes。智能体、插件、镜像都走同一条部署流程。
依据 agent-runtime develop@0a47a523(2026-11-12)核实
Runtime 解决什么问题
agent-core 让你写出一个智能体;agent-runtime 负责把它从开发态带到生产态:统一部署、多租户隔离、多种部署方式、生命周期管理。
README 把它拆成几个模块:
| 模块 | 目录 | 做什么 |
|---|---|---|
| 管理 | management/ | DeploymentManager 和各部署器:部署策略、实例启停、状态持久化 |
| 服务框架 | service/ | 智能体应用的服务外壳:统一消息结构、请求上下文、对话接口 |
| 基础能力 | foundation/ | 数据库(SQLite / MySQL 等)、端口、虚拟环境、Docker 工具、日志 |
| 应用 | applications/ | 具体的应用与运行支撑,比如 A2A 服务、管理面 |
一个管理器,三种策略
DeploymentManager 不关心智能体跑在哪里,具体怎么拉起交给"部署策略":
| 模式 | 部署器 | 做法 |
|---|---|---|
subprocess(默认) | LocalSubprocessDeployer | 为每次部署建独立虚拟环境、装包,用 python -m 包名 --host --port 起一个子进程,日志写到文件 |
docker | DockerDeployer | 以容器方式运行 |
k8s | K8sDeployer | 在集群里创建 Secret、Deployment 和 Service |
每个策略由两部分组成:一张自己的记录表(存这种部署方式特有的信息,比如进程号、容器 ID),加一个部署器(真正去拉起和停止)。要支持新的部署方式,就是再写一个策略。
源码BaseDeploymentStrategyagent-runtime/management/openjiuwen_runtime/management/deployments/base/strategy.py:67@0a47a523Kubernetes 的依赖是可选的:没装时管理器照常启动,只是不注册 k8s 策略,真要用时才报错并说明原因。
三种部署对象,一条流程
管理器对外有三个部署入口,最后都走同一个内部流程:
| 入口 | 部署什么 | 限制 |
|---|---|---|
deploy_agent | 一个智能体包 | — |
deploy_plugin | 一个插件(带 URL) | — |
deploy_image | 一个现成镜像 | 子进程模式不支持 |
info = await manager.deploy_agent(DeployAgentParams(
name="promise_agent", # 包名,子进程模式下用 python -m 启动
version="1.0.0",
mode=DeployMode.SUBPROCESS, # 默认值
user_id="u-001", # 租户信息,下一关细讲
space_id="sales",
extras={"whl_path": "dist/promise_agent-1.0.0-py3-none-any.whl"},
))
示意代码,参数名取自 DeployAgentParams;extras 里放哪些字段由具体策略决定。本站没有运行它。
内部流程 _deploy 是:
- 生成部署 ID,在部署表里写一条记录,状态
pending - 选中的策略写自己的记录表,再调部署器拉起实例
- 部署器成功则状态改为
running,并记下访问地址 - 等实例就绪:状态是 running,并且
/health探活通过(下一关细讲) - 中间任何一步出错,状态改为
failed,异常继续往上抛
关于管理接口
README 列出了管理面的 REST 接口(POST /api/v1/agents/deploy、GET /api/v1/agents、DELETE /api/v1/agents/{id} 等),也提到 server/ 目录。
在本站核实的基线版本里,仓库根目录没有 server/ 目录,也搜不到这些路由的实现;能核实的是 DeploymentManager 这一层的方法。README 的 Roadmap 也写着 Docker / Kubernetes 部署能力还在完善。实际使用前请以你拿到的版本为准。
部署好的智能体应用本身对外提供 /health、/query(支持流式)、/reset_conversation 等接口。agent-studio 配好 Runtime 地址后,可以一键发布、在线验证、一键下架。
小结
DeploymentManager统一管理部署,具体怎么拉起由可替换的部署策略负责。- 默认子进程;镜像只能用 Docker 或 Kubernetes;Kubernetes 依赖是可选的。
- 所有部署走同一流程:记录 → 拉起 → 等就绪 → 失败就标 failed。
- README 和代码有出入的地方,以代码为准。
源码出处
- agent-runtime/README.mdRuntime 的定位、模块和 API 概览
- agent-runtime/management/openjiuwen_runtime/management/manager.py:80
class DeploymentManager部署管理器 - agent-runtime/management/openjiuwen_runtime/management/manager.py:423
async def _deploy(self统一的部署流程 - agent-runtime/management/openjiuwen_runtime/management/models/deployment_params.py:25
class DeployAgentParams部署参数 - agent-runtime/management/openjiuwen_runtime/management/models/enums.py:25
class DeployMode三种部署模式 - agent-runtime/management/openjiuwen_runtime/management/deployments/base/strategy.py:67
class BaseDeploymentStrategy策略基类:记录 + 部署器 - agent-runtime/management/openjiuwen_runtime/management/deployments/subprocess/deployer.py:39
class LocalSubprocessDeployer子进程部署 - agent-runtime/management/openjiuwen_runtime/management/deployments/k8s/deployer.py:40
class K8sDeployerKubernetes 部署
链接指向固定提交,仓库后续更新不影响这里的行号。
过关测验
1. 部署方式没有显式指定时,默认用哪一种?
2. 用子进程方式部署一个现成的容器镜像(deploy_image),会怎样?
3. 当前环境没装 Kubernetes 的依赖,部署管理器会怎样?