Chapter 6:Graph 状态机深度实战
Chapter 6:Graph 状态机深度实战6.1 Graph 核心概念什么是 StateGraph?StateGraph 是 Spring AI Alibaba 的底层工作流引擎,它以有向图的形式描述 Agent 执行流程。与内置的四大 Agent 模式不同,StateGraph 提供了更灵活的自定义能力。┌─────────────────────────────────────────────────────────────┐ │ StateGraph │ ├─────────────────────────────────────────────────────────────┤ │ │ │ ┌─────┐ ┌─────┐ ┌─────┐ │ │ │Node │────────▶│Node │────────▶│Node │ │ │ │节点 │ │节点 │ │节点 │ │ │ └─────┘ └─────┘ └─────┘ │ │ │ │ │ │ │ ┌─────────┘ │ │ │ ▼ │ │ ┌─────┐ │ │ │Edge │ 边(路由规则) │ │ └─────┘ │ │ │ │ ┌─────┐ │ │ │State│ 状态(节点间传递的数据) │ │ └─────┘ │ │ │ └─────────────────────────────────────────────────────────────┘核心组件组件说明Node(节点)执行单元,可以是 Agent、Tool、或自定义逻辑Edge(边)节点间的连接,决定路由规则State(状态)在节点间传递的共享数据Graph(图)节点和边的集合,构成完整工作流Graph vs 内置 Agent 模式维度内置 AgentStateGraph复杂度低(开箱即用)高(需要自定义)灵活性固定模式完全自定义适用场景标准场景复杂定制流程开发成本低高调试难度低中等6.2 StateGraph API 详解基础构建@ConfigurationpublicclassGraphConfig{@BeanpublicStateGraphmyWorkflow(ChatModelchatModel){returnStateGraph.builder()// 1. 定义状态.defineState(newMyState())// 2. 添加节点.addNode("start",newStartNode()).addNode("process",createProcessNode(chatModel)).addNode("evaluate",createEvaluateNode(chatModel)).addNode("end",newEndNode())// 3. 定义边(路由规则).addEdge("start","process").addConditionalEdge("evaluate",(state)-state.get("decision"),Map.of("continue","process","end","end"))// 4. 设置入口和出口.setEntryPoint("start").setFinishPoint("end")// 5. 编译.compile();}}状态定义publicclassMyStateimplementsMapString,Object{// 用户输入privateStringuserInput;// 处理结果privateStringprocessedResult;// 评估分数privatedoublescore;// 决策privateStringdecision;// 历史记录privateListStringhistory;// Getter/SetterpublicStringgetUserInput(){returnuserInput;}publicvoidsetUserInput(Stringinput){this.userInput=input;}publicStringgetProcessedResult(){returnprocessedResult;}publicvoidsetProcessedResult(Stringresult){this.processedResult=result;}publicdoublegetScore(){returnscore;}publicvoidsetScore(doublescore){this.score=score;}publicStringgetDecision(){returndecision;}publicvoidsetDecision(Stringdecision){this.decision=decision;}publicListStringgetHistory(){returnhistory;}publicvoidsetHistory(ListStringhistory){this.history=history;}}6.3 自定义节点实现Agent 节点publicclassAgentNodeimplementsNode{privatefinalReactAgentagent;privatefinalStringinputKey;privatefinalStringoutputKey;publicAgentNode(ReactAgentagent,StringinputKey,StringoutputKey){this.agent=agent;this.inputKey=inputKey;this.outputKey=outputKey;}@OverridepublicMyStateprocess(MyStatestate){Stringinput=state.get(inputKey);AssistantMessageresponse=agent.call(newUserMessage(input));// 更新状态state.put(outputKey,response.getText());state.put("lastAgent",agent.getName());returnstate;}}// 使用示例.addNode("analysis",newAgentNode(analysisAgent,"userInput","analysisResult"))Tool 节点publicclassToolNode
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2564576.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!