AgentFlow 入门与实战Task-Based 并发、EWMA 动态调度与四道门禁的 Java 生产级编排一、AgentFlow 是什么1.1 一句话定义AgentFlow 是一个用 Java 构建的、面向持久化异步 AI Agent 任务的 pub-sub 有向图编排框架专为“永不终止的开放式工作流”设计让多个独立 Agent 通过消息传递持续协作。1.2 解决什么问题传统 AI Agent 编排通常采用“请求-响应”的一次性模式——用户提问Agent 处理返回结果结束。但现实中很多场景是持续运行、不断演进的客服工单流转、监控告警处理、多阶段审批流水线。这些场景需要 Agent 长时间存活持续接收和处理消息。类比AgentFlow 就像一条永不停歇的工厂流水线。传统 Agent 是“接单-完工-关门”的作坊模式AgentFlow 是“传送带不停运转、工位持续处理”的流水线模式。每个工位Task是一个独立线程通过传送带pub-sub 消息传递工件消息。1.3 核心设计哲学AgentFlow 的核心设计选择是Task-Based Concurrency——每个操作封装为一个独立的Task运行在自己的 daemon 线程中Task 之间通过发布-订阅模式通信发布者不需要知道订阅者的存在。注博客https://blog.csdn.net/badao_liumang_qizhi二、核心架构2.1 Task-Based ConcurrencypublicabstractclassTaskimplementsRunnable{// 线程生命周期管理publicvoidstart(){...}publicvoidstop(){...}// 子类实现的抽象方法protectedabstractbooleanshouldProcess();protectedabstractvoidprocess();protectedabstractlongcalculateSleepTime();}每个 Task 是一个自包含的工作单元能够处理传入消息、调整自身处理频率、与其他 Task 通信、维护自己的状态。2.2 Adaptive TimingEWMA 动态调整AgentFlow 最具特色的设计是用指数加权移动平均EWMA算法动态调整每个 Task 的处理频率而非固定轮询间隔。publicabstractclassAdaptiveTimingTaskextendsTask{doublealpha0.1;// 学习率doubleestimatedSleepTime100;// 初始休眠时间(ms)OverrideprotectedlongcalculateSleepTime(){if(lastWaitingTime()0){return(long)estimatedSleepTime;}estimatedSleepTimealpha*lastWaitingTime()(1-alpha)*estimatedSleepTime;return(long)estimatedSleepTime;}}效果繁忙的 Task 自动获得更短的休眠时间更频繁运行空闲的 Task 自动退避以节省资源。系统在响应性和效率之间自然平衡。类比EWMA 就像交通信号灯的自适应配时。固定轮询是“不管车流量多少绿灯都是 30 秒”EWMA 是“车多时绿灯延长车少时绿灯缩短”——系统根据实际负载动态调整。2.3 AdaptiveRelayTask编排的核心组件publicclassAdaptiveRelayTaskX,YextendsAdaptiveTimingTask{ListXinboxnewArrayList();ListAdaptiveRelayTaskY,?relaysnewArrayList();FunctionX,Yexpression;Overrideprotectedvoidprocess(){for(Xx:inbox){Yresultexpression.apply(x);for(AdaptiveRelayTaskY,?relay:relays){relay.accept(result);}}inbox.clear();}}这个类提供了泛型输入输出、函数式转换、消息队列管理、自动路由到下游 Task。三、AgentFlow4JSpring AI 之上的生产级治理层cynthiasystems/AgentFlow 侧重于运行时架构pub-sub EWMA而AgentFlow4J则在其基础上增加了生产级治理能力——人机审批、检查点恢复、预算控制、工具策略。3.1 两级 APIAgentFlow4J 暴露两层 API按需要的控制粒度选择Level 1 — Squad API推荐大多数应用动态路由最小化配置。CoordinatorAgent将请求路由到一组ExecutorAgent你只需关注 Agent 本身而非底层管道。Level 2 — Graph API需要完全控制显式定义节点、边、条件边、循环。支持每个节点的重试策略、断路器、预算门禁、基于检查点的恢复。AgentGraphgraphAgentGraph.builder().addNode(research,researcher).addNode(analyze,analyzer).addNode(write,writer).addEdge(research,analyze).addEdge(Edge.conditional(analyze,ctx-ctx.get(CONFIDENCE).doubleValue()0.7,research))// 循环回退.addEdge(analyze,write).errorPolicy(ErrorPolicy.RETRY_ONCE).build();AgentResultresultgraph.invoke(AgentContext.of(...));关键特性两级 API 可以组合——CoordinatorAgent本身就是一个Agent可以作为节点放入 Graph 中。3.2 治理模型四道门禁AgentFlow4J 的生产级治理围绕四道门禁展开门禁作用实现BudgetPolicy限制每次运行/每个节点/每次调用的花费货币无关成本可以是美元、Token 数或调用次数ToolPolicy阻止危险工具的执行工具白名单/黑名单StatePolicy保护敏感状态字段状态读写权限控制ApprovalGate在高风险操作前暂停等待人工审批基于检查点的暂停/恢复Budget-aware RoutingAgentFlow4J v0.7.0 引入了预算感知路由——在预算充足时路由到高级 Agent预算低于阈值时优雅降级到便宜的回退方案。类比四道门禁就像核电站的多层安全机制。预算控制是“燃料限额”工具策略是“操作许可”状态保护是“辐射屏蔽”人工审批是“发射按钮的双人确认”。3.3 持久化执行AgentFlow4J 在每个节点后自动创建检查点。如果工作流中途崩溃从最后一个成功的检查点恢复而不是从头开始。// 人机审批的暂停/恢复ApprovalGategateApprovalGate.builder().threshold(1000.0)// 金额超过 1000 时触发审批.build();// 暂停后通过 Slack/Webhook 通知人工// 审批通过后从检查点恢复不丢失已完成的工作四、快速上手示例4.1 Maven 依赖repositoriesrepositoryidjitpack.io/idurlhttps://jitpack.io/url/repository/repositoriesdependencygroupIdcom.github.datallmhub.agentflow4j/groupIdartifactIdagentflow4j-starter/artifactIdversionv0.7.0/version/dependency!-- Spring AI Provider — 可替换为 OpenAI/Anthropic/Gemini/Ollama --dependencygroupIdorg.springframework.ai/groupIdartifactIdspring-ai-starter-model-mistral-ai/artifactId/dependency4.2 定义类型化状态用StateKeyT替代MapString, Object编译器可以捕获键不匹配的错误publicfinalclassReviewKeys{publicstaticfinalStateKeyStringDOCUMENTStateKey.of(document,String.class);publicstaticfinalStateKeyStringDOC_TYPEStateKey.of(doc.type,String.class);publicstaticfinalStateKeyStringRISK_LEVELStateKey.of(risk.level,String.class);publicstaticfinalStateKeyStringISSUESStateKey.of(issues,String.class);publicstaticfinalStateKeyStringFINAL_REPORTStateKey.of(final.report,String.class);}4.3 编写三个 Agent每个 Agent 是一个 Spring Bean由ExecutorAgent支撑ConfigurationpublicclassReviewAgents{BeanAgentclassifier(ChatClient.Builderbuilder){returnExecutorAgent.builder().chatClient(builder.build()).systemPrompt( 你是一个法律文档分类器。阅读文档并返回 JSON type: [CONTRACT, NDA, INVOICE, OTHER] risk: [LOW, MEDIUM, HIGH] ).inputMapper(ctx-ctx.get(ReviewKeys.DOCUMENT)).outputMapper((ctx,result)-ctx.with(ReviewKeys.DOC_TYPE,extractField(result.text(),type)).with(ReviewKeys.RISK_LEVEL,extractField(result.text(),risk))).build();}BeanAgentanalyst(ChatClient.Builderbuilder){returnExecutorAgent.builder().chatClient(builder.build()).systemPrompt(你是法律分析师。提取最重要的三个条款并标记问题。).inputMapper(ctx-ctx.get(ReviewKeys.DOCUMENT)).outputMapper((ctx,result)-ctx.with(ReviewKeys.ISSUES,result.text())).build();}BeanAgentsummariser(ChatClient.Builderbuilder){returnExecutorAgent.builder().chatClient(builder.build()).systemPrompt(你是高级法律审核员。根据文档类型、风险等级和分析发现生成一页审核报告。).inputMapper(ctx-String.format(类型: %s\n风险: %s\n发现:\n%s,ctx.get(ReviewKeys.DOC_TYPE),ctx.get(ReviewKeys.RISK_LEVEL),ctx.get(ReviewKeys.ISSUES))).outputMapper((ctx,result)-ctx.with(ReviewKeys.FINAL_REPORT,result.text())).build();}}4.4 构建编排图AgentGraphgraphAgentGraph.builder().addNode(classify,classifier).addNode(analyze,analyst).addNode(summarise,summariser).addEdge(classify,analyze).addEdge(analyze,summarise).build();AgentResultresultgraph.invoke(AgentContext.of(Map.of(ReviewKeys.DOCUMENT,documentText)));五、与其他框架的定位对比维度AgentFlow (cynthiasystems)AgentFlow4JSpring AI Alibaba Graph核心定位持久化异步 Agent 运行时Spring AI 治理层企业级 Graph 编排并发模型Task 线程 EWMA 动态调整基于 Spring AIFlux 响应式消息传递Pub-Sub 有向图AgentContext 类型化状态OverAllState治理能力基础四道门禁 检查点interruptBefore/After人机审批无内置ApprovalGateGraph Studio适用场景长运行开放式工作流生产级 Spring AI 应用复杂 DAG 工作流选型建议需要持续运行的开放工作流监控、工单流转→ cynthiasystems/AgentFlow需要生产级治理预算、审批、检查点且使用 Spring AI → AgentFlow4J需要复杂 DAG 可视化编排→ Spring AI Alibaba Graph六、总结AgentFlow 的核心设计哲学是“让 Agent 像流水线一样持续运转”层面核心技术设计要点并发模型Task-Based Concurrency每个 Task 独立线程消息传递Pub-Sub 有向图发布者不感知订阅者动态调度EWMA 指数加权移动平均繁忙 Task 获更多 CPU空闲 Task 自动退避类型安全StateKey编译器捕获键错误治理四道门禁 检查点预算/工具/状态/审批持久化节点级检查点崩溃后从断点恢复参考资源cynthiasystems/AgentFlow GitHubAgentFlow4J GitHubAgentFlow4J 多智能体工作流教程AgentFlow4J 两级 API 文档AgentFlow4J 预算控制教程博客: https://blog.csdn.net/badao_liumang_qizhi
阅读完成 · 觉得有帮助?