外部任务

有些工作无法在 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 回合内发起的工具调用会直接执行, 永远不会成为外部任务。

Rust
Node.js
Python
Go

说明:

  • 工具按名称映射到 lane。read、ls、search(grep 和 glob 背后的工具)、 web_fetch、web_search 以及代码智能工具使用 query lane;其他所有工具,包括 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。