当 Bash 命令或视频生成需要较长时间才能完成时,可以通过以下两种方式在后台运行工具:
- 明确要求 Agent 在后台执行 Bash 命令,或调用默认在后台执行的
video_generate。工具提交任务后立即返回task_id。 - 让 Bash 命令正常执行。系统默认等待 60 秒。如果命令仍未完成,系统会将同一个任务转为后台运行并返回
task_id。
后台工具任务是 Session 下的子资源。它由工具调用产生,不提供单独的创建接口。业务应用可以调用 查询会话任务列表、查询会话任务 和 取消会话任务 管理任务。在支持后台任务且兼容当前配置的 Session 中,主 Agent 会自动获得 task_list、task_get 和 task_kill 工具,无需手动配置。
准备工作#
开始前需要:
-
已创建的 API Key:配置为环境变量
ARK_API_KEY,详情请参见 API Key 管理。 -
已创建的 Agent:详情请参见 定义 Agent。
-
已创建的 Environment:详情请参见 配置云环境。
-
创建一个使用云端 Environment 的 Session。创建方法请参见 启动 Session。
-
为 Agent 配置需要运行的工具。Bash 使用基础工具集,视频生成使用多模态工具集,详情请参见 Tools。
-
在本地安装
curl,并设置 API Key、Session ID 和可选的 Session 线程 ID:export ARK_API_KEY="<ARK_API_KEY>" export SESSION_ID="<SESSION_ID>" export SESSION_THREAD_ID="<SESSION_THREAD_ID>"
SESSION_THREAD_ID 用于将列表限制在指定 Session 线程;不需要按线程筛选时,可以省略该环境变量,并从请求 URL 中删除 session_thread_id。
本章节示例的 Base URL 与鉴权方式详情请参见 Base URL及鉴权。
了解后台任务的运行方式#
后台任务适合耗时较长、且不应阻塞 Session 主线程的工具调用。当前支持以下工具:
| 工具 | 进入后台的方式 | 运行行为 |
|---|---|---|
bash |
明确要求 Agent 在后台执行命令,或命令正常执行 60 秒后仍未完成 | 明确在后台执行时立即返回 task_id;正常执行时默认等待 60 秒,未完成的同一个任务随后转为后台并返回 task_id |
video_generate |
默认在后台执行 | 提交后返回 task_id,视频生成完成后再由 Agent 读取结果 |
例如,发送“在后台运行测试,并在完成后汇总失败用例”后,Agent 会启动 Bash 后台任务并获得 task_id。如果后续消息不依赖该任务结果,Agent 可以继续处理;依赖任务结果的步骤会在任务完成后继续。
Task 从提交到完成的状态如下:
| 状态 | 说明 |
|---|---|
queued |
任务已经创建,正在等待执行。 |
running |
工具正在执行,或工具产物正在保存到 Session 工作区。 |
succeeded |
任务执行成功。查询单个任务时,响应包含 result。 |
failed |
任务执行失败。根据 error_code、error_message 和 result 排查原因。 |
cancelled |
任务已经取消,不会继续执行。 |
unknown |
当前无法确认任务状态。保留 task_id 并稍后查询;状态可能恢复为 running 或实际结束状态,因此不要将该状态视为成功。 |
列出 Session 中的任务#
调用 GET /sessions/{session_id}/tasks,查看指定 Session 中已经产生的后台任务。正常执行的 bash 命令只有转为后台任务后,才会出现在列表中:
curl -sS --fail-with-body \
"https://ark.cn-beijing.volces.com/api/v3/sessions/${SESSION_ID}/tasks?session_thread_id=${SESSION_THREAD_ID}&state=queued,running&limit=20" \
-H "Authorization: Bearer $ARK_API_KEY"
完整请求参数和响应字段请参见 查询会话任务列表。
列表按创建时间倒序返回。可以使用以下查询参数缩小范围:
| 参数 | 类型 | 说明 |
|---|---|---|
state |
string | 按状态过滤。多个状态使用半角逗号分隔,例如 queued,running。 |
session_thread_id |
string | 只返回指定 Session 线程创建的任务。省略时返回整个 Session 的任务。 |
limit |
integer | 每页任务数,默认为 20,最大为 50。 |
cursor |
integer | 上一页响应中的 next_cursor。省略或传入 0 时,从最新任务开始查询。 |
响应中的 items 只包含任务摘要,不包含 result。存在下一页时,继续使用 next_cursor 查询:
{
"items": [
{
"task_id": "task-20260910173330-54321",
"tool": {
"name": "video_generate",
"tool_use_id": "toolu_02",
"description": "Generate a city night video"
},
"session_id": "sesn-20260910171500-abcde",
"session_thread_id": "sthr-20260910171500-abcde",
"state": "running",
"summary": "生成一段城市夜景视频",
"created_at": 1789032810494,
"started_at": 1789032813926
}
],
"next_cursor": 1024
}
记录目标任务的 task_id:
export TASK_ID="<TASK_ID>"
查询任务详情#
调用 GET /sessions/{session_id}/tasks/{task_id},查询任务的最新状态:
curl -sS --fail-with-body \
"https://ark.cn-beijing.volces.com/api/v3/sessions/${SESSION_ID}/tasks/${TASK_ID}" \
-H "Authorization: Bearer $ARK_API_KEY"
完整响应结构请参见 查询会话任务。
任务处于 queued 或 running 时,响应不包含 result。任务进入 succeeded、failed 或 cancelled 后,响应可以包含以下信息。状态为 unknown 时,服务端已经记录结果的响应也可能包含以下信息:
result.status:工具执行结果,取值为ok或error。result.content:工具返回的文本结果。result.meta_info:用于定位产物或日志的信息。Bash 任务可以返回退出码和标准输出、标准错误日志路径;视频生成任务可以返回生成任务 ID、视频地址和 Session 工作区中的产物路径。error_code、error_message:任务失败、取消或状态未知,且服务端记录了失败原因时的错误信息。finished_at:任务进入结束状态的时间,使用 Unix 毫秒时间戳。
取消任务#
调用 POST /sessions/{session_id}/tasks/{task_id}/cancel,取消不再需要的后台任务:
curl -sS --fail-with-body \
"https://ark.cn-beijing.volces.com/api/v3/sessions/${SESSION_ID}/tasks/${TASK_ID}/cancel" \
-H "Authorization: Bearer $ARK_API_KEY" \
-H "Content-Type: application/json" \
-d '{}'
完整接口说明请参见 取消会话任务。
接口返回 HTTP 200 表示取消请求已经处理,不代表任务一定已经停止。根据响应中的 state 和 message 判断结果:
| 响应 | 含义 | 后续处理 |
|---|---|---|
state 为 cancelled |
任务已经取消 | 不需要继续等待任务结果 |
state 为 queued 或 running,没有 message |
取消请求已经受理,任务状态尚未刷新 | 3 秒后重新查询任务 |
state 为 queued 或 running,带有 message |
当前执行阶段未能取消任务,例如视频已经开始生成 | 继续查询,直到任务自然结束 |
| 返回其他结束状态 | 任务在取消请求处理前已经结束 | 按返回状态处理结果 |
如果需要停止指定任务,优先使用取消任务接口。user.interrupt 会中断 Session 当前执行过程,并查找当前 Session 中处于 queued 或 running 状态的任务,再逐个尝试取消。该过程不是原子操作,单个任务取消失败时,其他任务仍会继续处理;它也不保证所有任务均已停止。当一个 Session 中存在多个后台任务时,不要用它替代按 task_id 取消。
处理任务完成后的事件#
后台任务完成时,平台会向对应 Session 发送结果通知。只要 Session 未被显式中断、终止或删除,该通知会唤醒主线程,让 Agent 读取结果并继续处理原任务。显式中断后的迟到通知不会自动恢复执行;Session 已终止或删除时,迟到通知也不会恢复 Session。业务应用仍通过 Session SSE 接收 Agent 回复和状态事件:
- 保持 SSE 连接,接收任务完成后产生的 Agent 回复。
- 如果 SSE 中断,先重新建立连接,再查询历史事件补齐中断窗口。
- 记录
task_id。即使错过实时事件,也可以通过 查询会话任务列表 定位任务,再通过 查询会话任务 读取最新状态和结果。 - Session 被显式中断时,按第 3 步查询最终结果。需要 Agent 继续处理时,发送新的用户消息;新消息会开始新的处理轮次。
- Session 已终止时,迟到的结果不会恢复执行。需要继续处理时,创建新的 Session 并重新发起后续步骤,详情请参见 启动 Session。
- Task 的
state为unknown时,保留task_id并稍后查询。该状态可能恢复为running或实际结束状态,不能作为成功依据。
Session 事件的订阅顺序和断线补查方式,详情请参见 Session 事件流。
使用限制#
- 后台工具任务当前支持
bash和video_generate。 - 每个 Session 最多同时运行 32 个工具任务,包括尚未转为后台任务的
bash命令。达到上限后,新任务会失败并返回ToolTaskLimitExceeded。 - 使用自托管 Environment 的 Session 暂不支持后台工具任务。
- 主 Agent 配置了自定义工具时,Session 暂不支持后台工具任务。
- 子 Agent 暂不支持后台执行工具。
- Task 只能由 Agent 的工具调用产生,不能通过 Session Task API 主动创建。
- 取消能力取决于工具的执行阶段。视频已经开始生成时,取消请求不会终止生成,也不会停止计费。