当同一个 Agent 需要按固定节奏反复处理任务,例如每天生成业务日报、定期巡检数据或按月汇总线索,可以用 Deployment 保存一份可重复运行的 Session 启动配置。
Deployment 本身不执行任务,而是保存可复用的 Session 启动配置。到达计划时间或手动触发时,平台会基于这份配置创建新的 Deployment Run 和 Session。不同 Run 不复用对话上下文,每次运行都会从同一批初始事件开始。
了解运行对象#
使用 Deployment 后,一个重复任务会拆成配置、启动记录、执行会话和初始事件模板。创建计划、临时补跑或排查结果时,先看当前问题属于哪一层,可以避免把“启动成功”误判为“任务完成”:
| 对象 | 说明 |
|---|---|
| Deployment | 保存固定的 Agent 版本、Environment、初始事件、资源、Vault 和触发计划。创建或更新后,这份配置只供后续新启动的 Run 使用。 |
| Deployment Run | 记录一次手动或定时启动。Run 成功说明平台已经创建 Session 并受理初始事件,后续 Agent 任务是否完成要继续看 Session。 |
| Session | 承载一次实际执行。模型输出、工具调用、任务状态和产物都在 Session 及其事件中查看。 |
| Initial events | 每个新 Session 收到的第一批事件。当前仅支持 user.message。 |
准备资源#
开始前,完成以下准备:
- 创建方舟 API Key,并配置为
ARK_API_KEY。 - 创建要运行的 Agent,并记录 Agent ID。
- 创建 Environment,并记录 Environment ID。
- 按需准备 Files、Memory Store 和 Vault。
export ARK_API_KEY="<ARK_API_KEY>"
export AGENT_ID="<AGENT_ID>"
export ENVIRONMENT_ID="<ENVIRONMENT_ID>"
配置定时计划#
schedule.expression 使用严格五段式 cron:
分钟 小时 日期 月份 星期
常见配置:
| 场景 | 表达式 | 说明 |
|---|---|---|
| 每小时整点 | 0 * * * * |
每小时第 0 分钟运行 |
| 每天 09:00 | 0 9 * * * |
按配置时区每天运行 |
| 工作日 09:00 | 0 9 * * 1-5 |
星期一到星期五运行 |
| 每周一 10:30 | 30 10 * * 1 |
每周一运行 |
| 每月 1 日 08:00 | 0 8 1 * * |
当月 1 日运行 |
星期字段支持数字 0-7(0 和 7 都表示周日,其余对应周一至周六),也支持英文简写 SUN、MON、TUE、WED、THU、FRI、SAT(不区分大小写),并可与范围、步长组合使用,例如 5-7(周五到周日)、1,7(周一和周日)、1-7/2(周一、周三、周五、周日)。
schedule.timezone 必须是有效的 IANA 时区,例如 Asia/Shanghai、UTC 或 America/New_York。
创建 Deployment#
下面的示例适用于“每个工作日北京时间 09:00 生成业务日报”的场景。schedule.timezone 取值为 Asia/Shanghai,表示 cron 表达式里的 09:00 使用北京时间。
curl -sS --fail-with-body "https://ark.cn-beijing.volces.com/api/v3/deployments" \
-H "Authorization: Bearer $ARK_API_KEY" \
-H "Content-Type: application/json" \
-d @- <<EOF
{
"name": "工作日业务日报",
"agent": "$AGENT_ID",
"environment_id": "$ENVIRONMENT_ID",
"initial_events": [
{
"type": "user.message",
"content": [
{
"type": "text",
"text": "分析昨日业务数据,生成日报并列出异常指标。"
}
]
}
],
"schedule": {
"type": "cron",
"expression": "0 9 * * 1-5",
"timezone": "Asia/Shanghai"
}
}
EOF
示例中的关键配置如下:
agent:填写 Agent ID。服务端会固定请求受理时的当前有效版本。environment_id:指定每次运行使用的 Environment。initial_events:指定每次 Session 启动后收到的第一条用户消息。schedule.expression:设置工作日 09:00 触发。schedule.timezone:指定 cron 表达式使用的时区。
创建成功返回 deployment 对象。记录 id,后续查询、运行和管理都要使用:
export DEPLOYMENT_ID="<DEPLOYMENT_ID>"
调用创建接口后,平台只是保存这份配置,不会立刻启动 Session。配置了 schedule 时,Deployment 从下一个计划时间开始触发;省略 schedule 时,只能通过立即运行接口手动触发。
立即运行 Deployment#
创建定时计划后,通常可以等待平台在计划时间自动触发。立即运行主要用于两类情况:刚创建或更新 Deployment 后,先确认 Agent、Environment、资源和初始事件能顺利启动;计划外需要补跑一次任务。
curl -sS --fail-with-body -X POST "https://ark.cn-beijing.volces.com/api/v3/deployments/$DEPLOYMENT_ID/run" \
-H "Authorization: Bearer $ARK_API_KEY"
接口会等到 Session 创建完成、初始事件受理完成,并把这次启动的最终状态写入 Run。启动成功时,返回类似下面的 Deployment Run:
{
"type": "deployment_run",
"id": "drun-20261027000103-8k2mq",
"deployment_id": "depl-20261027000103-4rt6u",
"agent": {
"type": "agent",
"id": "agent-20261027000103-2c7v9",
"version": 3
},
"created_at": "2026-10-27T01:00:03Z",
"trigger_context": {
"type": "manual"
},
"session_id": "sesn-20261027000104-7v5n1"
}
重点关注以下字段:
id:Deployment Run ID。session_id:本次运行创建的 Session ID。trigger_context.type:手动运行时为manual。
记录返回值:
export DEPLOYMENT_RUN_ID="<DEPLOYMENT_RUN_ID>"
export SESSION_ID="<SESSION_ID>"
查询运行结果#
查询 Run 详情#
查询指定 Run 的触发来源和启动结果:
curl -sS --fail-with-body "https://ark.cn-beijing.volces.com/api/v3/deployment_runs/$DEPLOYMENT_RUN_ID" \
-H "Authorization: Bearer $ARK_API_KEY"
成功启动的 Run 会返回 session_id:
{
"type": "deployment_run",
"id": "drun-20261027000103-8k2mq",
"deployment_id": "depl-20261027000103-4rt6u",
"created_at": "2026-10-27T01:00:03Z",
"trigger_context": {
"type": "schedule",
"scheduled_at": "2026-10-27T01:00:00Z"
},
"session_id": "sesn-20261027000104-7v5n1"
}
启动失败时,Run 会返回 error:
{
"type": "deployment_run",
"id": "drun-20261027000105-3m5n8",
"deployment_id": "depl-20261027000103-4rt6u",
"created_at": "2026-10-27T01:00:03Z",
"trigger_context": {
"type": "schedule",
"scheduled_at": "2026-10-27T01:00:00Z"
},
"error": {
"type": "InvalidFile.NotFound",
"message": "file_id file-xxx not found or not accessible"
}
}
排查时按下面的字段组合判断状态:
session_id |
error |
含义 |
|---|---|---|
| 有值 | 不返回 | Session 已经创建,初始事件已经受理;继续查询 Session 判断任务进展。 |
| 不返回 | 有值 | 启动失败。根据 error.type 和 error.message 排查;如果失败发生在初始事件阶段,Session 可能已经创建。 |
| 不返回 | 不返回 | Run 还在启动中。 |
查询 Run 列表#
按 Deployment 查询历史 Run:
curl -sS --fail-with-body "https://ark.cn-beijing.volces.com/api/v3/deployment_runs?deployment_id=$DEPLOYMENT_ID&limit=2" \
-H "Authorization: Bearer $ARK_API_KEY"
定时 Run 的 trigger_context.type 为 schedule,scheduled_at 表示原定触发时间,不包含实际调度延迟。手动 Run 的类型为 manual,不返回 scheduled_at。
还有更多结果时,响应通过 next_page 返回下一页标识。继续查询时,将该值原样传入 page,不要解析、修改或自行生成。最后一页不返回 next_page,此时停止翻页。
查看 Session 执行结果#
Run 成功后,使用 session_id 查询 Session。Run 详情只能说明启动阶段是否成功;任务是否完成、模型是否报错、工具是否执行成功,都以 Session 状态和事件为准。Deployment 创建的 Session 会记录来源 Deployment ID。
详情请参见 管理 Session 和 Session 事件流。
更新运行配置#
以下示例将运行时间改为工作日 12:00:
curl -sS --fail-with-body "https://ark.cn-beijing.volces.com/api/v3/deployments/$DEPLOYMENT_ID" \
-H "Authorization: Bearer $ARK_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"name": "工作日午间业务日报",
"schedule": {
"type": "cron",
"expression": "0 12 * * 1-5",
"timezone": "Asia/Shanghai"
}
}'
更新接口是局部更新;请求里省略的字段保持原值:
description:传null或空字符串时清空。schedule:传null时移除定时计划,保留手动运行能力。resources、vault_ids、tags:传null或空数组时清空。initial_events:不能传null或空数组。
更新后的配置只会被后续新受理的 Run 使用。已经受理的 Run 和已创建的 Session 不会被改写,它们继续使用受理时的配置快照。
管理生命周期#
暂停定时触发#
curl -sS --fail-with-body -X POST "https://ark.cn-beijing.volces.com/api/v3/deployments/$DEPLOYMENT_ID/pause" \
-H "Authorization: Bearer $ARK_API_KEY"
暂停只停止后续定时触发,不会中断已经受理或正在运行的 Session。需要临时补跑时,暂停期间仍可调用立即运行接口。
恢复定时触发#
curl -sS --fail-with-body -X POST "https://ark.cn-beijing.volces.com/api/v3/deployments/$DEPLOYMENT_ID/unpause" \
-H "Authorization: Bearer $ARK_API_KEY"
恢复时,平台会重新校验固定的 Agent 版本、Environment、Vault 和 Memory Store。type=file 资源是否可访问,仍在下一次 Run 启动时校验。恢复不会补跑暂停期间错过的计划,Deployment 会从下一个计划时间继续触发。
归档 Deployment#
curl -sS --fail-with-body -X POST "https://ark.cn-beijing.volces.com/api/v3/deployments/$DEPLOYMENT_ID/archive" \
-H "Authorization: Bearer $ARK_API_KEY"
归档会停止后续触发。归档后,Deployment 不能更新、恢复或手动运行,但仍可以查询 Deployment、历史 Run 和关联 Session。
了解配置限制#
| 配置 | 上限 | 说明 |
|---|---|---|
initial_events |
50 条 | 至少 1 条,当前仅支持 user.message。 |
resources |
500 项 | Memory Store 最多 10 个。自托管 Environment 不支持挂载资源。 |
vault_ids |
50 个 | 每个 Vault 必须属于当前账号和项目。 |
tags |
50 项 | 标签键最长 128 字符,标签值最长 256 字符。 |
| Agent 树模型资源 | 1~50 个 | 主 Agent 和 Subagent 必须至少引用一个模型,且模型提供方必须为方舟。 |
| 推理接入点类型 | 不可混用 | 同一 Agent 树不能同时使用自定义推理接入点和预置接入点。 |
| Run 配置快照 | 1 MiB | 超出时,创建或更新接口返回 HTTP 413。 |
模型资源、文件可用性和临时凭据都会在 Run 启动时校验,所以创建 Deployment 不等于后续 Run 一定能启动成功。Agent 配置失效、文件无法访问或临时凭据获取失败时,Run 会失败;如果错误不可恢复,Deployment 还会被自动暂停。
如果挂载 type=file 资源,创建、更新或恢复 Deployment 时,平台只校验 file_id 和 mount_path 的格式。文件是否存在、当前账号是否仍有权限,会在每次 Run 启动时检查。校验失败时,本次 Run 失败,Deployment 也会自动暂停。