跳到主要内容

终止级联与资源调度

执行终止为什么有两种强度?​

  • 触发场景: 并行协作中常出现"一个任务成功,其余任务便无需继续"——多个 Agent 分头搜索,一个命中目标后其余应立即停止;
  • 优雅终止(首选): 主 Agent 发出 terminate 信号,子 Agent 在当前步骤的安全点响应,先清理资源(关闭浏览器会话、写入未完成文件、释放锁),返回确认(ack)后退出;
  • 强制终止(兜底): 直接终止进程,仅在子 Agent 对优雅信号无响应时使用,代价是可能遗留悬挂资源与未完成写入;
  • 对应关系: 两者正是 Unix 的 SIGTERM 与 SIGKILL 的区别;

主 Agent 终止后,仍在运行的子 Agent 怎么办?​

  • 级联终止: 借鉴 Go 的 context,终止沿创建关系向下级联——取消一个 Agent,它派生的所有子 Agent 随之取消,从根上杜绝无人认领的孤儿 Agent;
  • 实现对应: 子 Agent 在安全点检查终止信号,对应 Go 中对 ctx.Done() 的轮询;
  • 例外: 若确实需要脱离主 Agent、长期运行的后台 Agent(类似 Unix 的 nohup),就让它从一棵新的生命周期树起步(对应 context.Background()),显式声明不随父级终止;

异构双 Agent 协作的关键设计是什么?​

  • 场景: 用户只给出一个网站 URL,要求填写复杂的注册或航班预订表单,其中姓名、证件号、联系方式、地址与偏好等信息不在当前上下文中,需要向用户收集;
  • 分工: Computer Agent 负责浏览器操作并充当编排者;Phone Agent 负责 ASR、LLM、TTS 与实时对话;
  • 通信: 两者通过点对点工具或消息总线交换结构化消息(发送者、接收者、类型、内容);
  • 架构选择: 不需要额外的 Manager 进程——Computer Agent 可以像调用工具一样调用 Phone Agent;
  • 动机: 让用户在聊天框中逐项打字较慢且易漏项或输错格式;电话 Agent 可以连续询问、确认与重问,把自然语言回答转换成结构化字段;
  • 两种模式: 固定模式预先启动两个 Agent 以验证独立 ReAct 循环、双向通信与真正并行;自主模式只启动 Computer Agent,由它根据页面、已知信息与任务需要自主决定是否调用 initiate_phone_call_agent(purpose, required_info);
  • 反模式: 不要用"字段数量超过阈值"这类 Python 规则代替模型决策;
  • 上下文交接: 调用后把任务目的、待收集字段及格式约束作为独立上下文交给 Phone Agent;
  • 并行与闭环: 每收到一个有效值就发送 info_collected,Phone Agent 不等待网页填写完成便询问下一项;Computer Agent 反馈 fill_error 或页面状态,Phone Agent 据此调整话术;
  • 错误处理: 格式错误发送 format_invalid 并重新询问;超过重试次数或页面异常则安全暂停;信息收集完成后发送 task_completed,Computer Agent 校验通过再提交表单;
  • 安全边界: 异常时取消仍在运行的对端并关闭浏览器、音频轨道与通话;真人语音须显式同意,提交须显式授权;

并行同构搜索如何触发级联终止?​

  • 场景: 给定一所大学的多个学院网站,在各学院教师名录页面中查找指定教师(如"张伟"),找到后返回其所在学院、职位与研究方向;
  • 与双 Agent 的区别: 关注多个同构 Agent 的并行搜索,以及如何通过中心协调实现任务完成与资源优化;
  • 并行启动: Manager 动态创建 10 个 Computer Use Agent 实例,每个实例独立进程或线程、独立浏览器会话,互不阻塞;启动时传递目标 URL、教师姓名与任务标识符(用于消息路由);
  • 实时监控: 每个 Agent 定期发送状态更新("正在加载网站""正在解析教师名录""未找到目标,任务完成""找到匹配,详细信息如下");Manager 通过消息总线接收并维护任务状态表;
  • 级联终止: 找到目标的 Agent 发送 {"type": "target_found", "agent_id": "agent_3", "data": {...}},Manager 立即向其余仍在运行的 Agent 发送 {"type": "terminate", "reason": "target_found_by_agent_3"},每个 Agent 优雅停止并发送确认,Manager 等待所有确认(或超时)后汇总;
  • 终止要求: Agent 能随时响应终止信号,终止必须优雅——不留悬挂进程或未关闭的资源,同时需处理竞态条件;
  • 失败处理: 为每个 Agent 设置超时(如 2 分钟),超时视为失败;错误隔离,不影响其他 Agent 继续执行;
  • 汇总策略: 只要有 Agent 成功就返回信息;全部失败则报告"未找到目标教师"及各失败原因的统计;

竞态条件如何治理?​

  • 定义: 两个 Agent 几乎在同一毫秒内各自找到目标教师并同时向 Manager 报告"我找到了";
  • 后果: Manager 收到 A 的报告后开始汇总,紧接着收到 B 的报告又触发第二次汇总,产生重复结果或互相矛盾的状态;
  • 通用解法: 用"锁"机制——第一个报告到达后立即锁定状态,后续报告被识别为重复并忽略;
  • 实现对应: 与管理者模式中幂等的 settle_once 是同一个问题,见 管理者模式;
  • 结论: 并行带来的收益需要用串行执行的时间差来验证,同时用超时、错误隔离、锁与级联终止把并发风险关在系统内;

资源与调度要管住哪些稀缺项?​

  • 稀缺资源: 进程世界稀缺的是 CPU 时间与内存,Agent 世界稀缺的是 token 与并发额度;
  • 职能归属: 这项职能通常落在管理者 Agent 或运行时身上;
  • 预算: 启动子 Agent 时设定步数或 token 预算,超限即止,机制细节见 步骤预算与预算感知;
  • 模型分级: 困难任务交给强模型,机械任务交给低成本模型;
  • 并发上限: 避免几十个 Agent 同时耗尽 API 配额;
  • 抢占: 并发数达到上限而更紧急的任务到来时,打断执行中的子 Agent;

管理者 Agent 的调度为什么优于传统调度器?​

  • 关键差异: 管理者 Agent 具备推理能力,可以启动多个子 Agent 并行探索一个问题;
  • 动态调整: 根据它们的进展决定给哪些 Agent 分配更多资源,或终止看起来误入歧途的 Agent——像公司内部赛马一样;
  • 成熟度: 资源与调度领域的实践远不如操作系统调度成熟,但它决定了多 Agent 系统的成本上限,应在架构设计阶段就予以考虑;