Multi Agent(多智能体协作)允许协调器 Agent 将任务委派给多个子智能体。子智能体使用各自的模型、系统提示词、技能和工具完成任务。协调器负责拆分任务并汇总结果。
本页从已有子智能体和 Environment 开始,演示如何创建协调器、运行任务、验证结果和处理异常。
选择并准备#
Multi Agent 适合需要角色分工或并行处理的复杂任务。如果任务不需要独立上下文或角色边界,优先使用更简单的方式。
| 任务特征 | 推荐方式 | 适用场景 |
|---|---|---|
| 多个角色需要使用不同提示词、模型或工具 | Multi Agent | 代码审查、测试设计等多角色任务 |
| 单个 Agent 按固定步骤调用工具 | Agent + 工具(Tools) | 流程固定,不需要独立角色上下文 |
| 单个 Agent 复用操作说明 | Agent + 技能(Skills) | 需要沉淀流程,但不需要角色协作 |
开始前,完成以下准备:
- 创建 API Key,并配置为
ARK_API_KEY。详情请参见 API Key 管理。 - 创建两个子智能体,并记录 Agent ID 和版本号。详情请参见 Agent。
- 创建或复用云环境,并记录 Environment ID。详情请参见 配置云环境。
- 选择协调器模型,并确认本地已安装
curl和jq。
配置环境变量:
export ARK_API_KEY="<ARK_API_KEY>"
export ARK_BASE_URL="https://ark.cn-beijing.volces.com/api/v3"
export COORDINATOR_MODEL_ID="<MODEL_ID>"
export REVIEWER_AGENT_ID="<REVIEWER_AGENT_ID>"
export REVIEWER_AGENT_VERSION="<REVIEWER_AGENT_VERSION>"
export TESTER_AGENT_ID="<TESTER_AGENT_ID>"
export TESTER_AGENT_VERSION="<TESTER_AGENT_VERSION>"
export ENVIRONMENT_ID="<ENVIRONMENT_ID>"
配置协调器#
定义角色和委派规则#
协调器的系统提示词需要说明每个子智能体的职责和输出。角色边界越明确,协调器越容易正确分配任务。
| 角色 | 职责 |
|---|---|
| 代码审查员 | 检查代码质量、架构和安全风险,输出问题与修改建议 |
| 测试工程师 | 设计测试用例,说明覆盖范围和未覆盖风险 |
系统提示词还需要要求协调器先拆分和委派任务,收到全部结果后再汇总。下方 cURL 包含完整提示词。
创建协调器#
在 multiagent.agents 中传入子智能体 ID 和版本号。显式填写版本后,子智能体发布新版本不会改变当前协调器。
: "${ARK_BASE_URL:?Set ARK_BASE_URL}"
: "${ARK_API_KEY:?Set ARK_API_KEY}"
: "${COORDINATOR_MODEL_ID:?Set COORDINATOR_MODEL_ID}"
: "${REVIEWER_AGENT_ID:?Set REVIEWER_AGENT_ID}"
: "${REVIEWER_AGENT_VERSION:?Set REVIEWER_AGENT_VERSION}"
: "${TESTER_AGENT_ID:?Set TESTER_AGENT_ID}"
: "${TESTER_AGENT_VERSION:?Set TESTER_AGENT_VERSION}"
COORDINATOR_SYSTEM='你有以下团队成员:
【代码审查员】
- 检查代码质量、架构和安全风险。
- 输出问题列表、严重程度和修改建议。
- 不负责编写新功能。
【测试工程师】
- 设计测试用例并检查覆盖范围。
- 输出测试用例、覆盖范围和未覆盖风险。
- 不修改产品需求。
先拆分任务,再分别委派。收到全部结果后,汇总为最终结论。'
export COORDINATOR_SYSTEM
coordinator_payload=$(
jq -n \
--arg model_id "$COORDINATOR_MODEL_ID" \
--arg system "$COORDINATOR_SYSTEM" \
--arg reviewer_id "$REVIEWER_AGENT_ID" \
--argjson reviewer_version "$REVIEWER_AGENT_VERSION" \
--arg tester_id "$TESTER_AGENT_ID" \
--argjson tester_version "$TESTER_AGENT_VERSION" \
'{
name: "engineering-lead",
model: {id: $model_id},
system: $system,
multiagent: {
type: "coordinator",
agents: [
{type: "agent", id: $reviewer_id, version: $reviewer_version},
{type: "agent", id: $tester_id, version: $tester_version}
]
}
}'
)
coordinator=$(
curl -sS --fail-with-body "$ARK_BASE_URL/agents" \
-H "Authorization: Bearer $ARK_API_KEY" \
-H "Content-Type: application/json" \
-d "$coordinator_payload"
)
export COORDINATOR_AGENT_ID
export COORDINATOR_AGENT_VERSION
COORDINATOR_AGENT_ID=$(jq -er '.id' <<<"$coordinator")
COORDINATOR_AGENT_VERSION=$(jq -er '.version' <<<"$coordinator")
printf 'Coordinator Agent ID: %s\n' "$COORDINATOR_AGENT_ID"
printf 'Coordinator Agent version: %s\n' "$COORDINATOR_AGENT_VERSION"
脚本将协调器 ID 和版本号写入 COORDINATOR_AGENT_ID 和 COORDINATOR_AGENT_VERSION。字段说明请参见 创建智能体。
也可以通过控制台配置:
- 进入 Agent 管理页面。
- 创建或编辑 Agent,在 04 能力扩展 区域添加 Multi Agents。
- 选择子智能体,填写前面的系统提示词并保存。
- 记录协调器 Agent ID 和版本号。
运行任务#
主流程使用两个终端。终端 A 接收主事件流,终端 B 创建 Session、发送任务和查询结果。需要实时观察子线程时,再打开终端 C。
1. 创建 Session#
在终端 B 创建 Session:
: "${ARK_BASE_URL:?Set ARK_BASE_URL}"
: "${ARK_API_KEY:?Set ARK_API_KEY}"
: "${COORDINATOR_AGENT_ID:?Set COORDINATOR_AGENT_ID}"
: "${ENVIRONMENT_ID:?Set ENVIRONMENT_ID}"
payload=$(
jq -n \
--arg agent_id "$COORDINATOR_AGENT_ID" \
--arg environment_id "$ENVIRONMENT_ID" \
'{
agent: $agent_id,
environment_id: $environment_id,
title: "Multi Agent task"
}'
)
session=$(
curl -sS --fail-with-body "$ARK_BASE_URL/sessions" \
-H "Authorization: Bearer $ARK_API_KEY" \
-H "Content-Type: application/json" \
-d "$payload"
)
export SESSION_ID
SESSION_ID=$(jq -er '.id' <<<"$session")
printf 'Session ID: %s\n' "$SESSION_ID"
脚本将 Session ID 写入 SESSION_ID:
Session ID: sesn-20261005121000-xxxxx
2. 订阅主事件流#
在终端 A 配置同一个 Session ID:
export ARK_API_KEY="<ARK_API_KEY>"
export ARK_BASE_URL="https://ark.cn-beijing.volces.com/api/v3"
export SESSION_ID="<SESSION_ID>"
建立主事件流:
: "${ARK_BASE_URL:?Set ARK_BASE_URL}"
: "${ARK_API_KEY:?Set ARK_API_KEY}"
: "${SESSION_ID:?Set SESSION_ID}"
curl -sS -N --fail-with-body --max-time 600 \
"$ARK_BASE_URL/sessions/$SESSION_ID/events/stream" \
-H "Authorization: Bearer $ARK_API_KEY" \
-H "Accept: text/event-stream"
终端 A 输出 : ready 后保持连接。先建连再发送任务,可以避免遗漏实时事件。
3. 发送任务#
回到终端 B,配置任务内容:
TASK_TEXT=$(cat <<'EOF'
评审以下 Python 登录接口实现。代码审查员分析代码质量、架构和安全风险,测试工程师设计测试用例并说明覆盖范围,最后汇总结论。
def login(username, password):
key = f"login_failures:{username}"
failures = int(redis.get(key) or 0)
if failures >= 5:
return {"ok": False, "reason": "locked"}
if not verify_password(username, password):
redis.incr(key)
redis.expire(key, 1800)
return {"ok": False, "reason": "denied"}
redis.delete(key)
return {"ok": True}
EOF
)
export TASK_TEXT
发送任务:
: "${ARK_BASE_URL:?Set ARK_BASE_URL}"
: "${ARK_API_KEY:?Set ARK_API_KEY}"
: "${SESSION_ID:?Set SESSION_ID}"
: "${TASK_TEXT:?Set TASK_TEXT}"
payload=$(
jq -n --arg text "$TASK_TEXT" \
'{events: [{type: "user.message", content: [{type: "text", text: $text}]}]}'
)
curl -sS --fail-with-body \
"$ARK_BASE_URL/sessions/$SESSION_ID/events" \
-H "Authorization: Bearer $ARK_API_KEY" \
-H "Content-Type: application/json" \
-d "$payload"
实时观察子线程(可选)#
只在需要实时观察子智能体时执行以下步骤:
-
终端 A 收到
session.thread_created后,记录session_thread_id。 -
在终端 C 配置鉴权信息、Session ID 和子线程 ID:
export ARK_API_KEY="<ARK_API_KEY>" export ARK_BASE_URL="https://ark.cn-beijing.volces.com/api/v3" export SESSION_ID="<SESSION_ID>" export SESSION_THREAD_ID="<SESSION_THREAD_ID>" -
建立子线程事件流:
: "${ARK_BASE_URL:?Set ARK_BASE_URL}"
: "${ARK_API_KEY:?Set ARK_API_KEY}"
: "${SESSION_ID:?Set SESSION_ID}"
: "${SESSION_THREAD_ID:?Set SESSION_THREAD_ID}"
curl -sS -N --fail-with-body --max-time 600 \
"$ARK_BASE_URL/sessions/$SESSION_ID/threads/$SESSION_THREAD_ID/stream" \
-H "Authorization: Bearer $ARK_API_KEY" \
-H "Accept: text/event-stream"
- 终端 C 输出
: ready后,在终端 B 按“验证结果”中的方式补查该子线程历史。 - 按事件
id合并实时和历史事件,忽略重复 ID。
每个子线程使用独立事件流。出现多个 session_thread_id 时,分别重复以上步骤。
4. 等待本轮结束#
继续观察终端 A。正常事件轨迹如下:
session.thread_created
agent.thread_message_sent
session.thread_status_idle
agent.message
session.status_idle
收到 session.status_idle 后检查 stop_reason.type:
end_turn:本轮执行结束,按下一节验证结果。requires_action:保持连接,处理全部待操作事件后继续观察。retries_exhausted:调整输入后可以发送新任务;如果修改 Agent 配置,请创建新 Session。
验证结果#
在终端 B 列出全部线程:
: "${ARK_BASE_URL:?Set ARK_BASE_URL}"
: "${ARK_API_KEY:?Set ARK_API_KEY}"
: "${SESSION_ID:?Set SESSION_ID}"
threads=$(
curl -sS --fail-with-body \
"$ARK_BASE_URL/sessions/$SESSION_ID/threads?limit=100" \
-H "Authorization: Bearer $ARK_API_KEY"
)
printf 'Agent\tThread ID\tStatus\n'
jq -r '.data[] | [.agent_name, .id, .status] | @tsv' <<<"$threads"
export SESSION_THREAD_ID
if ! SESSION_THREAD_ID=$(jq -er '.data[1].id' <<<"$threads"); then
printf 'No child thread is available yet.\n' >&2
return 1 2>/dev/null || exit 1
fi
printf 'Selected child thread ID: %s\n' "$SESSION_THREAD_ID"
命令将第一个子线程 ID 写入 SESSION_THREAD_ID。检查其他子线程时,更新该变量并清空分页标识:
unset THREAD_EVENTS_PAGE
查询该子线程的完整历史:
: "${ARK_BASE_URL:?Set ARK_BASE_URL}"
: "${ARK_API_KEY:?Set ARK_API_KEY}"
: "${SESSION_ID:?Set SESSION_ID}"
: "${SESSION_THREAD_ID:?Set SESSION_THREAD_ID}"
request_args=(
--get
"$ARK_BASE_URL/sessions/$SESSION_ID/threads/$SESSION_THREAD_ID/events"
--data-urlencode "limit=100"
--data-urlencode "order=asc"
)
if [[ -n ${THREAD_EVENTS_PAGE:-} ]]; then
request_args+=(--data-urlencode "page=$THREAD_EVENTS_PAGE")
fi
if ! events=$(
curl -sS --fail-with-body \
"${request_args[@]}" \
-H "Authorization: Bearer $ARK_API_KEY"
); then
return 1 2>/dev/null || exit 1
fi
printf 'Events:\n'
jq -c '.data[]' <<<"$events"
export THREAD_EVENTS_PAGE
THREAD_EVENTS_PAGE=$(jq -r '.next_page // empty' <<<"$events")
printf 'Next page: %s\n' "$THREAD_EVENTS_PAGE"
如果 Next page 不为空,保持 THREAD_EVENTS_PAGE 并重复执行,直到下一页标识为空。切换子线程前必须再次清空该变量。
主线程和各子线程使用独立事件流,不能根据跨流到达顺序判断执行顺序。使用 session_thread_id、from_session_thread_id 和 to_session_thread_id 关联委派与返回消息。
只有同时满足以下条件,本轮任务才成功:
- 主线程产生最终
agent.message。 - Session 以
stop_reason.type=end_turn进入idle。 - 没有子线程停留在
running或rescheduling。 - 本轮没有出现
session.thread_status_terminated。
处理异常状态#
| 信号 | 含义 | 处理动作 |
|---|---|---|
| SSE 连接中断 | 中断期间的事件不会自动回放 | 先重建连接,再查询历史并按事件 ID 去重 |
requires_action |
等待工具确认或外部工具结果 | 处理全部 stop_reason.event_ids |
session.thread_status_rescheduled |
子线程正在自动重新调度 | 保持监听,不要并行手动重试 |
session.thread_status_terminated |
子线程已终止 | 查询历史和错误事件,Session 空闲后重新分配任务 |
子线程长时间保持 running |
子任务未结束 | 携带 session_thread_id 发送 user.interrupt |
retries_exhausted |
当前轮次重试次数已用尽 | 调整输入后重试;修改 Agent 配置后创建新 Session |
处理等待操作#
子线程以 requires_action 进入 idle 后,按以下步骤处理:
-
保持主事件流和目标子线程事件流连接。如果连接已关闭,先重新建连并等待
: ready,再补查历史。补查主线程前清空分页标识:unset SESSION_EVENTS_PAGE
: "${ARK_BASE_URL:?Set ARK_BASE_URL}"
: "${ARK_API_KEY:?Set ARK_API_KEY}"
: "${SESSION_ID:?Set SESSION_ID}"
request_args=(
--get
"$ARK_BASE_URL/sessions/$SESSION_ID/events"
--data-urlencode "limit=100"
--data-urlencode "order=asc"
)
if [[ -n ${SESSION_EVENTS_PAGE:-} ]]; then
request_args+=(--data-urlencode "page=$SESSION_EVENTS_PAGE")
fi
if ! events=$(
curl -sS --fail-with-body \
"${request_args[@]}" \
-H "Authorization: Bearer $ARK_API_KEY"
); then
return 1 2>/dev/null || exit 1
fi
printf 'Events:\n'
jq -c '.data[]' <<<"$events"
export SESSION_EVENTS_PAGE
SESSION_EVENTS_PAGE=$(jq -r '.next_page // empty' <<<"$events")
printf 'Next page: %s\n' "$SESSION_EVENTS_PAGE"
-
从
session.thread_status_idle中记录session_thread_id和全部stop_reason.event_ids。按“验证结果”中的方式补查子线程,并逐一找到这些事件。 -
对
agent.tool_use或agent.mcp_tool_use,配置关联 ID 并发送确认:export SESSION_THREAD_ID="<SESSION_THREAD_ID>" export TOOL_USE_ID="<TOOL_USE_ID>"
: "${ARK_BASE_URL:?Set ARK_BASE_URL}"
: "${ARK_API_KEY:?Set ARK_API_KEY}"
: "${SESSION_ID:?Set SESSION_ID}"
: "${SESSION_THREAD_ID:?Set SESSION_THREAD_ID}"
: "${TOOL_USE_ID:?Set TOOL_USE_ID}"
payload=$(
jq -n \
--arg thread_id "$SESSION_THREAD_ID" \
--arg tool_use_id "$TOOL_USE_ID" \
'{
events: [{
type: "user.tool_confirmation",
session_thread_id: $thread_id,
tool_use_id: $tool_use_id,
result: "allow"
}]
}'
)
curl -sS --fail-with-body \
"$ARK_BASE_URL/sessions/$SESSION_ID/events" \
-H "Authorization: Bearer $ARK_API_KEY" \
-H "Content-Type: application/json" \
-d "$payload"
- 对
agent.custom_tool_use,执行自定义工具并发送user.custom_tool_result。请求需要携带当前session_thread_id和custom_tool_use_id。详情请参见 Tools。 - 处理全部
event_ids后继续观察。任务可能再次进入requires_action;只有 Session 最终以end_turn结束,本轮任务才完成。
本页主流程使用云环境,不覆盖自托管 Environment 的 user.tool_result 流程。自托管流程请参见 Tools。
中断线程#
只停止一个子线程时,运行 export SESSION_THREAD_ID="<SESSION_THREAD_ID>"。停止全部活跃线程时,运行 unset SESSION_THREAD_ID。
: "${ARK_BASE_URL:?Set ARK_BASE_URL}"
: "${ARK_API_KEY:?Set ARK_API_KEY}"
: "${SESSION_ID:?Set SESSION_ID}"
if [[ -n ${SESSION_THREAD_ID:-} ]]; then
payload=$(
jq -n --arg thread_id "$SESSION_THREAD_ID" \
'{events: [{type: "user.interrupt", session_thread_id: $thread_id}]}'
)
else
payload=$(jq -n '{events: [{type: "user.interrupt"}]}')
fi
curl -sS --fail-with-body \
"$ARK_BASE_URL/sessions/$SESSION_ID/events" \
-H "Authorization: Bearer $ARK_API_KEY" \
-H "Content-Type: application/json" \
-d "$payload"
中断指定子线程后等待该线程进入 idle;中断全部线程后等待 Session 进入 idle。
更新协作配置#
新增、移除子智能体或切换版本时,先调用 查询智能体详情 查询协调器最新配置。更新请求需要携带当前 version,并整体提交匹配的系统提示词和 multiagent.agents。
export COORDINATOR_AGENT_VERSION="<LATEST_VERSION>"
COORDINATOR_AGENTS_JSON=$(
jq -n \
--arg reviewer_id "$REVIEWER_AGENT_ID" \
--argjson reviewer_version "$REVIEWER_AGENT_VERSION" \
--arg tester_id "$TESTER_AGENT_ID" \
--argjson tester_version "$TESTER_AGENT_VERSION" \
'[
{type: "agent", id: $reviewer_id, version: $reviewer_version},
{type: "agent", id: $tester_id, version: $tester_version}
]'
)
export COORDINATOR_AGENTS_JSON
通过 API 创建协调器时,创建脚本已导出 COORDINATOR_SYSTEM。如果通过控制台创建,请先将控制台使用的完整系统提示词配置到该变量。提示词必须与成员列表保持一致。
: "${ARK_BASE_URL:?Set ARK_BASE_URL}"
: "${ARK_API_KEY:?Set ARK_API_KEY}"
: "${COORDINATOR_AGENT_ID:?Set COORDINATOR_AGENT_ID}"
: "${COORDINATOR_AGENT_VERSION:?Set COORDINATOR_AGENT_VERSION}"
: "${COORDINATOR_SYSTEM:?Set COORDINATOR_SYSTEM}"
: "${COORDINATOR_AGENTS_JSON:?Set COORDINATOR_AGENTS_JSON}"
update_payload=$(
jq -n \
--argjson version "$COORDINATOR_AGENT_VERSION" \
--arg system "$COORDINATOR_SYSTEM" \
--argjson agents "$COORDINATOR_AGENTS_JSON" \
'{
version: $version,
system: $system,
multiagent: {
type: "coordinator",
agents: $agents
}
}'
)
coordinator=$(
curl -sS --fail-with-body \
"$ARK_BASE_URL/agents/$COORDINATOR_AGENT_ID" \
-H "Authorization: Bearer $ARK_API_KEY" \
-H "Content-Type: application/json" \
-d "$update_payload"
)
export COORDINATOR_AGENT_VERSION
COORDINATOR_AGENT_VERSION=$(jq -er '.version' <<<"$coordinator")
printf 'Coordinator Agent version: %s\n' "$COORDINATOR_AGENT_VERSION"
脚本将新版本号写入 COORDINATOR_AGENT_VERSION。如果返回 version: conflict,重新查询并合并最新配置后再提交。
现有 Session 不会自动切换版本。只有 Session 处于 idle、上一轮以 end_turn 结束且没有其他升级请求时,才可以升级:
: "${ARK_BASE_URL:?Set ARK_BASE_URL}"
: "${ARK_API_KEY:?Set ARK_API_KEY}"
: "${SESSION_ID:?Set SESSION_ID}"
: "${COORDINATOR_AGENT_ID:?Set COORDINATOR_AGENT_ID}"
: "${COORDINATOR_AGENT_VERSION:?Set COORDINATOR_AGENT_VERSION}"
payload=$(
jq -n \
--arg agent_id "$COORDINATOR_AGENT_ID" \
--argjson version "$COORDINATOR_AGENT_VERSION" \
'{agent: {type: "agent_with_upgrades", id: $agent_id, version: $version}}'
)
curl -sS --fail-with-body \
"$ARK_BASE_URL/sessions/$SESSION_ID/upgrades" \
-H "Authorization: Bearer $ARK_API_KEY" \
-H "Content-Type: application/json" \
-d "$payload"
等待 Session 使用目标版本恢复为 idle:
: "${ARK_BASE_URL:?Set ARK_BASE_URL}"
: "${ARK_API_KEY:?Set ARK_API_KEY}"
: "${SESSION_ID:?Set SESSION_ID}"
: "${COORDINATOR_AGENT_ID:?Set COORDINATOR_AGENT_ID}"
: "${COORDINATOR_AGENT_VERSION:?Set COORDINATOR_AGENT_VERSION}"
: "${SESSION_UPGRADE_MAX_ATTEMPTS:=60}"
: "${SESSION_UPGRADE_INTERVAL_SECONDS:=2}"
upgrade_result="timeout"
for ((attempt = 1; attempt <= SESSION_UPGRADE_MAX_ATTEMPTS; attempt++)); do
session=$(
curl -sS --fail-with-body \
"$ARK_BASE_URL/sessions/$SESSION_ID" \
-H "Authorization: Bearer $ARK_API_KEY"
) || {
upgrade_result="request_failed"
break
}
session_status=$(jq -er '.status' <<<"$session") || {
upgrade_result="invalid_response"
break
}
session_agent_id=$(jq -r '.agent.id // empty' <<<"$session")
session_agent_version=$(jq -r '.agent.version // empty' <<<"$session")
printf 'Attempt %s: status=%s, agent=%s, version=%s\n' \
"$attempt" \
"$session_status" \
"$session_agent_id" \
"$session_agent_version"
if [[
$session_status == "idle" &&
$session_agent_id == "$COORDINATOR_AGENT_ID" &&
$session_agent_version == "$COORDINATOR_AGENT_VERSION"
]]; then
upgrade_result="completed"
break
fi
case "$session_status" in
terminated | failed)
upgrade_result="$session_status"
break
;;
esac
sleep "$SESSION_UPGRADE_INTERVAL_SECONDS"
done
if [[ $upgrade_result != "completed" ]]; then
printf 'Session upgrade did not complete: %s\n' "$upgrade_result" >&2
false
fi
脚本默认每 2 秒查询一次,最多 60 次。只有状态为 idle,且 agent.id 和 agent.version 与目标一致时才返回成功;超时或进入失败状态时,请检查 Session 或创建新 Session。
使用限制#
- 子智能体数量:单个协调器最多配置 20 个子智能体,详情请参见 创建智能体。
- 委派层级:Multi Agent 只展开一层。
multiagent.agents[].type为self时复用协调器配置创建子线程,但不会继续复用协调器的multiagent列表。 - 版本快照:更新协调器不会修改已有 Session 的 Agent 快照。
- 资源消耗:协调器和子智能体分别产生模型与运行资源用量,详情请参见 Managed Agents。
清理资源#
确认产物已转存后,使用精确 ID 删除本页创建的 Session。Session 仍在运行时,先中断全部线程并等待 idle。默认保留协调器:
export CONFIRM_DELETE="yes"
export DELETE_COORDINATOR="no"
仅当协调器不再被任何 Session 使用时,才将 DELETE_COORDINATOR 改为 yes。执行删除:
: "${ARK_BASE_URL:?Set ARK_BASE_URL}"
: "${ARK_API_KEY:?Set ARK_API_KEY}"
: "${SESSION_ID:?Set SESSION_ID}"
: "${CONFIRM_DELETE:?Set CONFIRM_DELETE to yes}"
: "${DELETE_COORDINATOR:=no}"
if [[ $CONFIRM_DELETE != "yes" ]]; then
printf 'Set CONFIRM_DELETE=yes to delete the recorded resources.\n' >&2
return 1 2>/dev/null || exit 1
fi
curl -sS --fail-with-body \
"$ARK_BASE_URL/sessions/$SESSION_ID" \
-X DELETE \
-H "Authorization: Bearer $ARK_API_KEY"
if [[ $DELETE_COORDINATOR == "yes" ]]; then
: "${COORDINATOR_AGENT_ID:?Set COORDINATOR_AGENT_ID}"
curl -sS --fail-with-body \
"$ARK_BASE_URL/agents/$COORDINATOR_AGENT_ID" \
-X DELETE \
-H "Authorization: Bearer $ARK_API_KEY"
fi
命令不会删除子智能体或 Environment。