外部任务
有些工作无法在 agent 进程内运行:它属于独立的 worker、CI runner,或位于另一个系统中的
人工处理者。当某个 lane 被路由到外部处理器时,调度到该 lane 上的工具调用会作为外部任务
排队,而不是被执行。你的宿主代码取出待处理队列、以任意方式完成工作,并通过
completeExternalTask 把结果报告回去;等待中的工具调用随后返回该结果。仅当外部 worker
确实是你架构的一部分时,才使用此模式。
外部任务来自 lane 队列。会话需要队列配置(queueConfig /
queue_config / QueueConfig),并且至少有一个 lane 设为 external 模式。hybrid lane
仍在进程内执行,只发出通知,因此不会产生可取出的任务。
lane 队列调度的是宿主直接发起的工具调用:session.tool(...) 以及 bash、readFile、
writeFile 等类型化辅助方法。模型在 send 或 stream 回合内发起的工具调用会直接执行,
永远不会成为外部任务。
说明:
- 工具按名称映射到 lane。
read、ls、search(grep和glob背后的工具)、web_fetch、web_search以及代码智能工具使用querylane;其他所有工具,包括bash、write和edit,都使用execute。 - 每个待处理任务都带有
task_id、session_id、lane(lane 名称,如"Execute"、"Query"等)、command_type(工具名)、payload(工具参数)和timeout_ms。把task_id传回completeExternalTask/complete_external_task/CompleteExternalTask。 - 完成结果的结构是
{ success, result?, error? }。成功时,result会成为工具结果:它必须 包含output字符串,还可以附加exit_code(默认 0)、metadata和images([{ data, media_type }],其中data为 base64)。缺少output的结果会变成工具错误。 失败时,工具调用以包含error的工具错误结束(默认External task failed)。工具错误会作为 工具输出返回(对bash而言,是以Tool execution error:开头的文本),而不是抛出错误。 - 如果在 lane 的
timeoutMs/timeout_ms(默认 60000)内没有完成该任务,任务会被移除, 等待中的调用以超时工具错误结束。 - 当任务仍处于待处理状态时,完成调用返回
true,否则返回false(例如任务已超时)。Python 的队列方法是同步的;Node 中它们返回 promise;Go 中它们接收调用方的context.Context。