Dict.CN 在线词典, 英语学习, 在线翻译 ------------- MyGitee My腾云code My51cto

Happy_EveryDay

可以平凡 不可以平庸 无爱则无忧,无欲则无求,无怒而无敌,无怨才是佛。所有烦恼,都是放不下的执著 开源技群 328035181 MyGitee

博客园 首页 新随笔 管理

定义边:START -> node1 -> node2 -> END

image

 

image

 

image

 

image

 

 

image

 

 

 

 

 

 1、pom

<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>3.4.4</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.sb</groupId>
<artifactId>zhipuai</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>zhipuai</name>
<description>zhipuai</description>
<properties>
<java.version>17</java.version>
<!-- <spring-ai.version>2.0.0-M5</spring-ai.version>-->
<spring-ai.version>1.1.2</spring-ai.version>
<spring-ai-alibaba.version>1.0.0.4</spring-ai-alibaba.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-starter-model-zhipuai</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba.cloud.ai</groupId>
<artifactId>spring-ai-alibaba-graph-core</artifactId>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-bom</artifactId>
<version>${spring-ai.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>com.alibaba.cloud.ai</groupId>
<artifactId>spring-ai-alibaba-bom</artifactId>
<version>${spring-ai-alibaba.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>

2、application.yml

server:
port: 18091 # 应用监听端口,默认 18091
spring:
application:
name: sangeng-graph
ai:
zhipuai:
#api-key: ${ZHIPU_KEY} # 从环境变量 ZHIPU_KEY 读,不硬编码
api-key: "XXXXXXXXXXXXXXX" # 从环境变量 ZHIPU_KEY 读,不硬编码
chat:
options:
model: glm-4.6 # 用 GLM-4.6

3、controller

import com.alibaba.cloud.ai.graph.CompiledGraph;
import com.alibaba.cloud.ai.graph.OverAllState;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.Map;
import java.util.Optional;

@RestController
@RequestMapping("/graph")
public class GraphController {
private static final Logger log = LoggerFactory.getLogger(GraphController.class);

// 构造器注入 Spring 容器里那个 CompiledGraph
private final CompiledGraph compiledGraph;

public GraphController(CompiledGraph compiledGraph) {
this.compiledGraph = compiledGraph;
}

@GetMapping("/quickStartGraph")
public String quickStartGraph() {
Optional<OverAllState> overAllStateOptional = compiledGraph.call(Map.of()); // ← call → invoke
log.info("overAllStateOptional: {}", overAllStateOptional);
return "ok";
}
}

 

4、GraphConfiguration

package com.sb.zhipuai.config;

import com.alibaba.cloud.ai.graph.*;
import com.alibaba.cloud.ai.graph.action.AsyncNodeAction;
import com.alibaba.cloud.ai.graph.action.NodeAction;
import com.alibaba.cloud.ai.graph.exception.GraphStateException;
import com.alibaba.cloud.ai.graph.state.strategy.ReplaceStrategy;
import com.sb.zhipuai.node.SentenceConstructionNode;
import com.sb.zhipuai.node.TranslationNode;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.ai.chat.client.ChatClient;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import java.util.Map;
import static com.alibaba.cloud.ai.graph.action.AsyncNodeAction.node_async;


//定义状态图 (状态,节点,边),编译生成 CompiledGraph 后注入 Spring 容器
@Configuration
public class GraphConfiguration {

private static final Logger log = LoggerFactory.getLogger(GraphConfiguration.class);

@Bean("quickStartGraph")
public CompiledGraph quickStartGraph() throws GraphStateException {

// 状态值:input1、input2 都用 ReplaceStrategy(新值覆盖旧值)
KeyStrategyFactory keyStrategyFactory = new KeyStrategyFactory() {
@Override
public Map<String, KeyStrategy> apply() {
return Map.of("input1", new ReplaceStrategy(),
"input2", new ReplaceStrategy());
}
};

// 定义创建状态图stateGraph
StateGraph stateGraph = new StateGraph("quickStartGraph", keyStrategyFactory);

// 定义节点 node1:打印当前状态,返回 input1=1, input2=1
stateGraph.addNode("node1", node_async(new NodeAction() {
@Override
public Map<String, Object> apply(OverAllState state) throws Exception {
log.info("node1 state: {}", state);
return Map.of("input1", 1, "input2", 1);
}
}));

// 定义node2:打印当前状态,返回 input1=2, input2=2
stateGraph.addNode("node2", node_async(new NodeAction() {
@Override
public Map<String, Object> apply(OverAllState state) throws Exception {
log.info("node2 state: {}", state);
return Map.of("input1", 2, "input2", 2);
}
}));
// 定义边:START → node1 → node2 → END
stateGraph.addEdge(StateGraph.START, "node1");
stateGraph.addEdge("node1", "node2");
stateGraph.addEdge("node2", StateGraph.END);

// 编译状态图,交回 Spring 容器
CompiledGraph compiledGraph=stateGraph.compile();
return compiledGraph;
}

@Bean("simpleGraph")
public CompiledGraph simpleGraph(ChatClient.Builder clientBuilder) throws GraphStateException {

// 定义状态键的更新策略
KeyStrategyFactory keyStrategyFactory = () -> Map.of("word", new ReplaceStrategy());

// 创建状态图
StateGraph stateGraph = new StateGraph("simpleGraph", keyStrategyFactory);

// 添加节点
stateGraph.addNode("SentenceConstructionNode",
AsyncNodeAction.node_async(new SentenceConstructionNode(clientBuilder)));

stateGraph.addNode("TranslationNode",
AsyncNodeAction.node_async(new TranslationNode(clientBuilder)));

// 定义边 (执行顺序)
stateGraph.addEdge(StateGraph.START, "SentenceConstructionNode");
stateGraph.addEdge("SentenceConstructionNode", "TranslationNode");
stateGraph.addEdge("TranslationNode", StateGraph.END);

// 编译状态图,放入容器
return stateGraph.compile();
}
}

5、http://localhost:18091/graph/quickStartGraph

image

 

image

 

posted on 2026-09-12 02:56  2026cn  阅读(7)  评论(0)    收藏  举报