这道题我觉得本质不是在问你会几个框架,而是你怎么把一个复杂问题拆成多个AI agent能协作的子任务,并且让它们高效地配合不出乱子。我比较倾向的方案是基于角色分工加消息队列的层级协同,工业界用得比较多,也相对成熟。
具体来说,我会把agent分成三类。最上层是规划者,它接收用户请求,把任务拆成子图,决定执行顺序。中间是执行者,就是多个专业agent,比如代码生成、数据分析、文档检索,每个只处理自己擅长的子任务。底层是验证者,检查结果质量,如果不行就触发重试或者反馈修正。
通信这块,我不太用直接RPC调用,而是用共享内存加消息队列,比如Redis Stream。消息格式标准化,带上from、to、task_id、payload这些字段,还有一个重要的context_window,用来携带上游的关键结论,避免把全量历史都传下去,否则上下文会越来越长,性能扛不住。
举个例子,智能研报生成。用户说“分析宁德时代Q3财报,对比比亚迪,输出投资评级”。规划者拆成五步:财报数据提取、财务指标计算、竞品对比、风险评估、报告撰写。然后财报agent调API取数据,计算agent做比率分析,搜索agent查行业动态,这些可以并行跑。最后验证者校验数据一致性,比如利润率算的对不对,再汇总成最终报告。
这里有个坑,就是上下文传递和冲突解决。如果上游agent算错了,下游直接拿错误数据,结果肯定崩。所以我会让验证者做仲裁,用多数投票或者置信度加权,实在达不成共识就升级到人工。另外,消息队列的好处是执行者可以动态扩缩,根据负载自动增减实例,高峰期多开几个agent并行处理。
说到边界,多agent不是万能的。它适合任务边界清晰、需要多领域知识、可以并行化的场景,比如内容审核、研报生成。但如果任务简单,比如就是链式调用几个工具,单agent加工具反而更轻量,协调成本低。真正落地的时候,往往是混合用,复杂任务用多agent拆解,简单子任务让单agent快速搞定。
不过,我最近在思考一个问题:当任务耦合度特别高的时候,比如子任务之间有强依赖,规划者拆出来的子图可能深度很大,协调成本反而会超过并行带来的收益。这种情况下,是不是应该考虑用[[GraphRAG]]那种图结构来建模任务依赖,而不是简单的层级结构?这个我还在探索。
所以整体上,我会把多agent协同看成一种架构选择,前提是任务能拆、子任务边界清晰、通信成本可控。如果这些不满足,硬上多agent反而会失败。上线前我会特别关注消息队列的延迟和验证者的仲裁效率,确保整个系统不会因为一个agent卡住就全挂掉。我更倾向于先小规模验证,再逐步扩大,而不是一开始就设计一个很复杂的框架。