codex里面主agent和subagent在任务中可以通信的吗?是如何实现的?是通信一次然后subagent就开始一次新的轮次吗?
回 群友 9359: 能通信,但方向是不对称的,而且通道只有一条:显式的消息传递,由父线程那一侧的编排逻辑来收发。主 agent 和 sub agent 不共享上下文、不共享内存,这一点是理解后面所有细节的前提。 先说 Codex 实际暴露了什么。CLI / app-server 那套叫 CollabAgent,一共五个操作:spawnAgent(建一条子线程并给它初始 prompt)、sendInput(给还活着的线程追加指令)、resumeAgent(把已结束或暂停的线程重新拉起来)、wait(阻塞等子线程出结果)、closeAgent(关掉线程)。Responses API 那套多 agent 的版本是六个动作,拆得更细:spawn_agent、send_message、followup_task、wait_agent、interrupt_agent、list_agents。注意它把 send_message 和 followup_task 分开了——前者只是往对方信箱里塞一条消息、不启动新一轮,后者是派新活并让那个线程起来跑。这个区分正好对应你的问题。 实现层面是这样:每个 sub agent 就是一条独立的 agent thread,有自己的上下文窗口、自己的模型和 reasoning 设置、自己的工具视图和 sandbox 策略,协议里用 senderThreadId / receiverThreadIds 标明谁发给谁,还有 agentsStates 记录每个 agent 的状态流转(pendingInit → running → completed / errored / shutdown)。父线程这边能看到的只有两样东西:它发出的那次 tool call 里带的 prompt,以及子线程最终返回的那条结果消息。子线程中间跑的那几十步工具调用、读了多少文件、刷了多少日志,全都留在子线程自己的事件流里,不会进父线程的上下文。这不是实现偷懒,恰恰是 sub agent 的主要目的——把探索噪声挡在主线程外面,避免 context pollution 和 context rot。 所以回到你问的"是不是通信一次然后 sub agent 就开始新的轮次",准确说法是:spawn 这个动作本身只是投递一条初始消息,然后子 agent 跑的是它自己的完整 agent loop,内部可能有几十轮模型调用加工具执行,不是一次 LLM 调用就完事。它跑完把结果写回父线程的信箱,父线程在 wait 的时候取到。这一轮结束不代表线程死了——线程还在,可以 sendInput 或 followup_task 追加一条新消息,它会在同一个 thread 上再起一个 turn,保留之前的上下文往下接着干;想要彻底重开就得新 spawn 一个。另外 interrupt_agent 是打断对方正在跑的 turn 但保留上下文,Codex 默认还会往被中断方的上下文里写一条模型可见的中断消息(config 里 agents.interrupt_message 控制这个开关)。用户手动 steer 一个正在跑的 sub agent,走的也是这条追加消息的路子。 反方向就没那么自由了。子 agent 不能随便往父线程推消息、打断父线程的思考,它的话只能进父线程的信箱,父线程主动等或者主动来取才拿得到。至于子 agent 之间直接对话——目前不行。openai/codex 的 issue # 就是在要这个功能:一个 first-class 的 shared workspace 或 message bus,让并行 agent 之间交换状态、发现和交接说明。现在大家只能凑合:约定一个共享文件目录,比如.agent-work/<task-id>/board.md、decisions.md 让几个 agent 往里写,或者干脆让父线程手动转发。那个 issue 自己都承认这种文件协议没有锁、没有归属语义,并发写会乱。 顺带两个容易踩的约束:子线程默认不能再开孙线程(max_depth 默认 1),并发线程数也有上限、超了就得排队,所以"通信"这件事在高并发下本身是要花协调成本的。官方给的建议也很直白——读多的活(探索、测试、triage、总结)适合铺开并行,写多的活要谨慎,几个 agent 同时改代码很容易撞车,协调开销盖过收益。 要不要我把一次典型流程串一下:你让 Codex 用三个 sub agent 做 PR review,父线程 spawn 出三条线程分别管安全、正确性、测试缺口,各自跑完把结论写回,父线程 wait 到全部结束,合并去重后给你一条带文件引用的汇总——这就是官方文档里的标准用法。 参考:https://learn.chatgpt.com/docs/agent-configuration/subagents 和 https://developers.openai.com/api/docs/guides/responses-multi-agent