掘金 人工智能 10月28日 07:24
Spring AI Alibaba 赋能自主运行 Agent
index_new5.html
../../../zaker_core/zaker_tpl_static/wap/tpl_guoji1.html

 

本文介绍了Spring AI Alibaba(SAA)框架如何支持Agent实现自主持续运行和发起人机交互的新形态。与传统的聊天模式不同,自主运行Agent能通过监听环境信号按计划定时执行任务,极大地提升了执行效率,适用于自动化周期性业务、批量处理、事件应急响应、复杂长周期任务以及周期性任务记忆管理等场景。SAA框架提供了构建定时运行Agent的解决方案,通过`schedule`方法和`ScheduledAgentManager`,开发者可以方便地实现定制化Agent,如店铺经营分析和评价舆情分析Agent,从而在自主性与可控性之间取得平衡,拓宽个体创业者能力边界,并提高工程领域的生产效率。

🚀 **Agent 新形态与自主运行优势**:文章强调了Agent突破传统聊天模式,实现自主持续运行的能力。通过监听环境信号(如定时、事件、上下文变化),Agent能够按计划自动执行任务,无需用户主动发起,这显著提高了执行效率,如同一个能自主工作的“人”,尤其适用于需要无人值守的自动化场景。

💡 **自主运行 Agent 的业务场景**:自主运行Agent的应用场景广泛,包括自动化周期性业务(如数据分析、报表生成)、批量清算处理(如金融数据挖掘)、事件应急预案响应(如物联网告警)、人类参与决策判断(如风险事件通知人工介入)以及复杂长周期任务(如后台预处理数据)。这些场景都受益于Agent的自动化和高效处理能力。

🛠️ **Spring AI Alibaba 框架支持**:Spring AI Alibaba(SAA)提供了构建自主运行Agent的框架支持。通过`CompiledGraph`的`schedule`方法和`ScheduledAgentManager`,开发者可以方便地注册、管理和执行定时Agent任务。框架还支持人工介入机制,在自主性与可控性之间取得平衡,并为分布式部署和监控提供了扩展点。

📊 **案例实践:店铺经营与舆情分析**:文章通过“店铺经营日报Agent”和“评价舆情分析Agent”两个具体案例,展示了SAA框架在实现定制化Agent方面的灵活性。例如,店铺经营日报Agent能从多维度数据提取分析,生成报告;评价舆情分析Agent则能通过LLM分析非结构化数据,识别风险并适时通知人工决策,体现了框架在自动化和智能化决策上的强大能力。

作者:千习

参考 Langchain 的这篇文章 blog.langchain.com/introducing… Chat 模式的 Agent 形态以外,还可以充分发挥 Agent 新的运行形态:

Spring AI Alibaba(以下简称 SAA)为开发上述形态的 Agent 提供了相应的框架支持,方便业务快速实现上述场景需求下的 Agent 开发。

为什么需要自主运行 Agent

通过自主运行的 Agent 可以充分发挥其执行效率,让其具备按预设规划自主工作的能力,无需每次都等待人类指令运行,可将 Agent 作为一个能替代你部分工作自主运行的“人”来看待。

由此我们可以看到,随着 Agent 的能力增强,以及 Agent 自主能力的提升,应该会出现以下局面:

从业务需求的角度看,可以有以下一些场景可探索挖掘。

如何构建定时运行 Agent

目前市面上定时 AI Task 相关的应用,主要分为以下几类:

接下来重点说明下 SAA 中的定时 Agent 设计构想,为了支持后台自主执行的 Agent,在 CompiledGraph 上提供的 schedule(ScheduleConfig config)方法可自由设置该 Agent 定时执行。对于后台定时运行的 Agent 任务在设计上都通过 ScheduledAgentManager 来进行任务的注册管理,目前开源默认实现提供了单机应用进程内的 Agent 任务运行管理实现。

通过上述方式,后续可支持在分布式部署场景下的定时 Agent 任务运行,同时为自定义 Agent 任务可视化管理和运行监控提供扩展点。

基于 SAA 自主运行 Agent 展示

Spring AI Alibaba 作为 Agent 开发框架,可方便地为业务开发 Agent 提供了对应解决方案,同时在框架侧也提供了构建定时运行的 Agent 能力。后续将通过框架提供的定时调度、人工节点功能,实现两个实践案例:店铺经营分析 Agent、评价舆情分析 Agent。

店铺经营日报 Agent

通过 SAA 框架可以方便的开发出自定义的 Agent(Workflow Agent),相比于低代码平台的流程构建,通过编码方式定义 Agent 流程会更适合高度定制的场景。比如当前的这个 Agent 我们需要从多个维度(交易订单、产品说明、客户画像信息、门店基础信息、客户评价反馈等)去提取对应的数据信息,通过业务编码再结合 Prompt 模版提供给 LLM 进行分析处理在实现上更具灵活性和可控性。

通过这个方式,让业务报表既能保持关键数据的准确性,又可结合发挥模型对非结构化数据分析,提炼总结出报告的核心要点和下一步行动方案。

参考代码:

@Beanpublic CompiledGraph dailyReportAgent(ChatModel chatModel) throws GraphStateException {    ChatClient chatClient = ChatClient.builder(chatModel).defaultAdvisors(new SimpleLoggerAdvisor()).build();    AsyncNodeAction dataLoaderNode = node_async(        (state) -> {            /*             * 业务报告元数据读取,如:指定周期的订单销量数据、             * 门店产品信息、订单用户反馈信息             */        }           );    // 定义一个经营日报生成节点,根据提供的原始数据信息结合Prompt生成报告    LlmNode llmDataAnalysisNode = LlmNode.builder().chatClient(chatClient)            .paramsKey("data_summary")            .outputKey("summary_message_to_sender")            .userPromptTemplate(DAILY_REPORT)            .build();    // Agent流程:提取原始数据-->生成经营日报-->发送日报信息    StateGraph stateGraph = new StateGraph("OperationAnalysisAgent", () -> {        Map<String, KeyStrategy> strategies = new HashMap<>();        strategies.put("data_summary"new ReplaceStrategy());        strategies.put("summary_message_to_sender"new ReplaceStrategy());        strategies.put("message_sender_result"new ReplaceStrategy());        strategies.put("access_token"new ReplaceStrategy());        return strategies;    }).addNode("data_loader", dataLoaderNode)            .addNode("data_analysis", node_async(llmDataAnalysisNode))            .addNode("message_sender", node_async(generateMessageSender()))            .addEdge(START, "data_loader")            .addEdge("data_loader""data_analysis")            .addEdge("data_analysis""message_sender")            .addEdge("message_sender", END);    CompiledGraph compiledGraph = stateGraph.compile();    compiledGraph.setMaxIterations(100);    // 设定当前Agent每天8点执行    ScheduleConfig scheduleConfig = ScheduleConfig.builder().cronExpression("0 0 8 */1 * ?"// 每天8点.build();    compiledGraph.schedule(scheduleConfig);    return compiledGraph;}

评价舆情分析 Agent

当前案例主要体现 Agent 自主定时运行,仅在分析发现必要时提示用户进入“人工决策”。相比较于传统的基于数值比较、关键词匹配等监控方式,通过 LLM 接入可增加业务监控新的维度,让监控面向更加泛化的数据场景,包括非结构化的文本数据、图片、影像等等,通过各类型结构数据充分挖掘出潜在风险。

参考代码:

@Beanpublic CompiledGraph evaluationAnalysisAgent(ChatModel chatModel,                 FeedbackMapper feedbackMapper) throws GraphStateException {    ChatClient chatClient = ChatClient.builder(chatModel).defaultAdvisors(new SimpleLoggerAdvisor()).build();    EvaluationClassifierNode sessionAnalysis = EvaluationClassifierNode.builder()            .chatClient(chatClient)            .inputTextKey("iterator_item")            .outputKey("session_analysis_result")            .categories(List.of("yes""no"))            .classificationInstructions(List.of("要求返回纯JSON字符串,禁止包含非JSON格式内容,包含字段:user、time、complaint、satisfaction、summary。",                            "complaint: 表示当前评价是否为店铺或产品投诉,取值范围(yes or no).",                            "satisfaction: 表示用户实际的消费满意度",                            "summary: 提炼本条核心吐槽点,以及可以改进的方向"))            .build();    StateGraph sessionAnalysisGraph = new StateGraph("session_analysis", subFactory1)            .addNode("iterator", node_async(sessionAnalysis))            .addEdge(StateGraph.START, "iterator")            .addEdge("iterator", StateGraph.END);    AsyncNodeAction sessionLoaderNode = node_async((state) -> {        // 舆情和评价数据加载... ...        return result;    });    // 舆情评价结果分析汇总    AsyncNodeAction sessionResultSummaryNode = node_async((state) -> {        // 舆情评价结果分析汇总... ...        return Map.of();    });    // 通过LLM生成告警报告    LlmNode llmNode = LlmNode.builder().chatClient(chatClient)            .paramsKey("summary_message")            .outputKey("summary_message_to_sender")            .systemPromptTemplate("自定义Prompt")            .build();    // 构建Agent运行流程    StateGraph stateGraph = new StateGraph("ReviewAnalysisAgent", () -> {        Map<String, KeyStrategy> strategies = new HashMap<>();        ... ...        return strategies;    }).addNode("session_loader_node", sessionLoaderNode)            .addNode("iteration_session_analysis_node", iterationNode)            .addNode("session_result_summary_node", sessionResultSummaryNode)            .addNode("message_parse", node_async(llmNode))            .addNode("message_sender", node_async(generateMessageSender()))            .addNode("human_feedback", node_async(new HumanFeedbackNode()))            .addNode("human_action", node_async(new HumanActionNode()))            .addEdge(START, "session_loader_node")            .addEdge("session_loader_node""iteration_session_analysis_node")            .addEdge("iteration_session_analysis_node""session_result_summary_node")            .addConditionalEdges("session_result_summary_node", AsyncEdgeAction.edge_async(state -> {                Integer complaint = state.value("complaint"0);                return complaint > 0 ? "message_parse" : StateGraph.END;            }), Map.of("message_parse""message_parse", StateGraph.END, StateGraph.END))            .addEdge("message_parse""message_sender")            .addEdge("message_sender""human_feedback")            .addConditionalEdges("human_feedback", AsyncEdgeAction.edge_async(state -> {                boolean ignore = state.value("ignore"true);                return ignore ? StateGraph.END : "human_action";            }), Map.of("human_action""human_action", StateGraph.END, StateGraph.END))            .addEdge("message_sender", END);    CompiledGraph compiledGraph = stateGraph.compile();    compiledGraph.setMaxIterations(1000);    // 设定当前Agent每小时执行检测一次    ScheduleConfig scheduleConfig = ScheduleConfig.builder().cronExpression("0 0 */1 * * ?"// 每小时执行检测一次.build();    compiledGraph.schedule(scheduleConfig);    return compiledGraph;}

结束语

自主运行的 AI Agent 开拓了企业智能化场景,通过定时触发、事件响应和人工协同机制,为业务带来高效、精准的自动化能力。借助 Spring AI Alibaba 框架,开发者可快速构建定制化 Agent,实现从数据采集、分析到决策的全流程闭环。

相关链接:

[1] MSE 任务调度产品

mse.console.aliyun.com/#/auth

[2] LangGraph CronJob

docs.langchain.com/langgraph-p…

点击此处,欢迎针对定时 Agent 运用场景交流沟通。

Fish AI Reader

Fish AI Reader

AI辅助创作,多种专业模板,深度分析,高质量内容生成。从观点提取到深度思考,FishAI为您提供全方位的创作支持。新版本引入自定义参数,让您的创作更加个性化和精准。

FishAI

FishAI

鱼阅,AI 时代的下一个智能信息助手,助你摆脱信息焦虑

联系邮箱 441953276@qq.com

相关标签

Spring AI Alibaba Agent 自主运行Agent 定时任务 AI框架 人工智能 自动化 Spring AI Autonomous Agent Scheduled Tasks AI Framework
相关文章