一个“Jarvis”该长什么样?很多人的第一反应是:一个大模型,配一段巨长的提示词,把所有活都塞进去。Jules Langlois 的做法相反——他搭了一个 mesh(网格):几个角色单一的小代理,由一个 Neuron AI 工作流负责协调。
他把这个原型提成了 PR #683,包含 examples/agent/jarvis-mesh.php 和 docs/jarvis-mesh.md 两个文件。需要说明的是,这个原型借助 AI 编码辅助完成,定位是起点而非生产代码,PR 目前仍处于开放状态,尚未经过评审或合并。
让工作流管顺序,代理只管干活
三个代理各司其职:Research 准备当天带来源的要点;Operations 结合研究结果,汇总状态与风险;Briefing 把两边的内容合成最终的每日简报。
它们之间从不互相调用。Neuron 工作流用带类型的事件在它们之间路由:BriefingStarted → ResearchCompleted → OperationsCompleted → BriefingComposed。每个节点接收一种事件类型,返回下一种,于是业务流程的图结构可以直接从类型签名上读出来。
用适配器隔开框架代码
示例刻意定义了四个小接口,交由应用层实现:
- JarvisSignalBus:发布带类型的信号,按 ID 幂等。
- JarvisKnowledgeStore:代理之间共享笔记,按键幂等。
- JarvisHeartbeatStore:记录每个代理最后一次出现的时间。
- JarvisAgentFactory:按角色和线程返回一个刚配置好的 AgentInterface。
这些接口以 WorkflowResources 对象的形式传给工作流,并在每个执行片段重建。Provider、工具、指令和消息存储都放在你自己的工厂里,所以换 LLM 或换存储后端时,工作流代码一行都不用改。
扛住重放
工作流可能被中断再恢复,因此每个副作用都必须能承受被执行两次。两个机制在起作用:代理调用走节点的 memoize(),中断恢复时已完成的调用不会重跑;信号和知识写入使用稳定键(例如 "{workflowId}/research.completed"),重复发布不会产生重复数据。
文档里也写明了这条诚实的边界:memoize 无法让外部副作用做到 exactly-once,幂等适配器是使用者的责任。
带边界的看门狗
第二个工作流 WatchdogWorkflow 是一次单遍扫描。由你自己的调度器(cron、队列,随便什么现成的)为每次扫描启动一次全新执行,传入代理列表、时间戳和过期阈值。对每个代理,一个节点检查最后心跳,如果过期或缺失,就写一条笔记,并以“代理 + 最后出现时间”派生的键发布 agent.heartbeat.stale 信号。因此同一轮扫描跑两次,只会触发一次同样的告警。
这个工作流被限制为一步、60 秒租约,不可能无限循环。调度、心跳生产、告警投递和监控策略都留在应用层。
为什么不拿工作流信号当总线
Neuron 的 Workflow::signal() 应答的是当前匹配的等待,它不是广播,也不是队列。独立代理之间要做扇出,就需要一个真正的共享总线,所以示例把它当作应用集成边界来处理。作者定下的规则是:传输和调度放在工作流节点之外,业务顺序和状态放在图之内。
接线与验证
在应用里提供适配器和持久化后端,然后这样跑:
$workflow = (new DailyBriefingWorkflow($date))->setPersistence($workflowPersistence)->setResources($resourcesFactory);$state = $workflow->run();$briefing = $state->get('briefing');
总线与知识存储要用持久、共享的实现;如果 worker 可能重叠,持久化后端必须多进程安全。
测试是在 Neuron 4.1 上跑的,用模拟代理和内存适配器,没有真实 LLM,也没有真实数据库。简报端到端跑通;一个中途失败的代理被恢复,已完成的研究步骤没有重跑;看门狗对过期代理和缺失代理各触发一次告警,健康的那个被忽略,第二轮扫描没有重复告警。作者没有跑完整的 Neuron 测试套件或 PHPStan,并且用同一 ID 重跑一个已完成的工作流会再次调用代理(信号仍保持去重)。
接下来他想补的三件事:在每个代理 worker 里做真正的心跳生产;把告警投递(聊天、邮件)做成 agent.heartbeat.stale 的消费者;给适配器配上内存假实现的正经单元测试。
特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.