AgentScope Java 集成 Spring AI Alibaba Workflow 指南
结合 agentscope-ai/agentscope-java、alibaba/spring-ai-alibaba 及 java2ai 生态中 Graph Core 工作流规范,以下是集成方案,涵盖核心思路、工程配置、代码实现、最佳实践四部分,兼顾 AgentScope 智能体特性与 Spring AI 工作流的工程化能力。
介绍如何在 Java 环境下将 AgentScope 智能体框架与 Spring AI Alibaba 工作流引擎进行集成。内容包括 Maven 依赖配置、application.yml 模型设置、基于 Spring AI 定义的工作流节点、封装为 AgentScope 工具的方法,以及 ReAct 智能体的创建与 API 暴露。重点解决了异步模型对齐、上下文数据互通及异常处理等工程化问题,旨在实现智能体决策与工作流执行的协同稳定运行。
结合 agentscope-ai/agentscope-java、alibaba/spring-ai-alibaba 及 java2ai 生态中 Graph Core 工作流规范,以下是集成方案,涵盖核心思路、工程配置、代码实现、最佳实践四部分,兼顾 AgentScope 智能体特性与 Spring AI 工作流的工程化能力。
| 框架/组件 | 核心职责 |
|---|---|
| AgentScope Java | 智能体(Agent)生命周期管理、多智能体协作、工具调用、上下文(Context)管理 |
| Spring AI Alibaba | 阿里云大模型(通义千问/百炼)标准化调用、Workflow 声明式编排、Spring 生态适配 |
| Java2AI Graph Core | 工作流节点标准化定义、执行引擎适配、可视化编排规范(参考) |
以 'AgentScope 为智能体核心 + Spring AI Alibaba 为工作流引擎' 为核心,通过三层适配实现能力融合:
需兼容 JDK 17+、Spring Boot 3.2+,核心依赖如下(版本以官方最新为准):
<!-- Spring Boot 核心(支撑 Spring AI) -->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>3.2.5</version>
<relativePath/>
</parent>
<dependencies>
<!-- 1. Spring AI Alibaba 核心(含 Workflow + DashScope 客户端) -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>spring-ai-alibaba-dashscope-spring-boot-starter</artifactId>
<version>0.1.0</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>spring-ai-alibaba-workflow-core</artifactId>
<version>0.1.0</version>
</dependency>
<!-- 2. AgentScope Java 核心 -->
<dependency>
<groupId>io.agentscope</groupId>
<artifactId>agentscope-core</artifactId>
<version>0.1.0</version>
</dependency>
<dependency>
<groupId>io.agentscope</groupId>
<artifactId>agentscope-spring-boot-starter</artifactId>
<version>0.1.0</version>
<!-- 简化 Spring 集成 -->
</dependency>
<!-- 3. Java2AI Graph Core(可选,标准化工作流节点) -->
<dependency>
<groupId>com.java2ai</groupId>
<artifactId>graph-core</artifactId>
<version>1.0.0</version>
</dependency>
<!-- 4. 基础依赖 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>
</dependencies>
统一模型密钥、工作流引擎、AgentScope 配置:
# 1. Spring AI Alibaba 配置
spring:
ai:
# 阿里云 DashScope 配置(通义千问)
dashscope:
api-key: ${DASHSCOPE_API_KEY:你的阿里云 API 密钥}
chat:
options:
model: qwen-turbo
temperature: 0.7
# Spring AI Workflow 配置
workflow:
executor:
thread-pool-size: 8
persistence:
enabled: true # 开启工作流持久化(可选)
# 2. AgentScope 配置(复用 Spring AI 的模型密钥)
agentscope:
core:
agent:
default-context-size: 1000 # 智能体默认上下文大小
model:
dashscope:
api-key: ${spring.ai.dashscope.api-key}
model-name: ${spring.ai.dashscope.chat.options.model}
spring:
integration:
enabled: true # 开启 AgentScope 与 Spring 集成
# 3. Java2AI Graph Core 配置(可选)
java2ai:
graph:
core:
node-package: com.yourpackage.agent.workflow.node # 工作流节点扫描包
参考 Java2AI Graph Core 节点规范,定义标准化的 AI 工作流(以医疗场景'病历分析'为例):
package com.yourpackage.workflow;
import com.alibaba.spring.ai.workflow.annotation.Workflow;
import com.alibaba.spring.ai.workflow.annotation.WorkflowNode;
import com.alibaba.spring.ai.workflow.executor.WorkflowContext;
import org.springframework.ai.dashscope.DashScopeChatClient;
import org.springframework.stereotype.Component;
/**
* 基于 Spring AI Alibaba 定义的病历分析工作流
* 节点 1:提取病历关键信息 → 节点 2:校验数据完整性 → 节点 3:生成分析报告
*/
@Workflow(name = "medical-record-analysis", description = "医疗病历分析工作流")
@Component
public class MedicalRecordAnalysisWorkflow {
private final DashScopeChatClient dashScopeChatClient;
public MedicalRecordAnalysisWorkflow(DashScopeChatClient dashScopeChatClient) {
this.dashScopeChatClient = dashScopeChatClient;
}
/**
* 节点 1:提取病历关键信息(大模型调用)
*/
@WorkflowNode(name = "extract-info", order = 1, requiredParams = "medicalRecord")
public String extractMedicalInfo(WorkflowContext context) {
String medicalRecord = context.getParam("medicalRecord", String.class);
String prompt = """
提取以下病历的关键信息(患者姓名、症状、检查结果、诊断结论): %s
要求:结构化输出,简洁明了
""".formatted(medicalRecord);
// 调用 Spring AI Alibaba 的 DashScope 客户端
return dashScopeChatClient.call(prompt).getResult().getOutput().getContent();
}
/**
* 节点 2:校验数据完整性(工具调用)
*/
@WorkflowNode(name = "validate-data", order = 2, dependOn = "extract-info")
public String validateData(WorkflowContext context) {
String extractedInfo = context.getResult("extract-info", String.class);
// 自定义校验逻辑(可复用 AgentScope 工具)
boolean isComplete = extractedInfo.contains("检查结果") && extractedInfo.contains("诊断结论");
return isComplete ? "数据完整" : "缺少检查结果/诊断结论,数据不完整";
}
/**
* 节点 3:生成分析报告(结果聚合)
*/
@WorkflowNode(name = "generate-report", order = 3, dependOn = "validate-data")
public String generateReport(WorkflowContext context) {
String extractedInfo = context.getResult("extract-info", String.class);
String validateResult = context.getResult("validate-data", String.class);
String prompt = """
基于以下信息生成医疗分析报告:
1. 提取的病历信息:%s
2. 数据校验结果:%s
要求:专业、简洁,符合医疗规范
""".formatted(extractedInfo, validateResult);
return dashScopeChatClient.call(prompt).getResult().getOutput().getContent();
}
}
将 Spring AI Workflow 封装为 AgentScope 可调用的'工具',符合 AgentScope 工具规范:
package com.yourpackage.agent.tool;
import io.agentscope.core.tool.Tool;
import io.agentscope.core.tool.ToolParam;
import com.alibaba.spring.ai.workflow.executor.WorkflowExecutor;
import com.alibaba.spring.ai.workflow.model.WorkflowExecutionResult;
import org.springframework.stereotype.Component;
/**
* AgentScope 工具:调用 Spring AI Alibaba Workflow
*/
@Component
@Tool(name = "medical_record_workflow_tool", description = "执行医疗病历分析工作流")
public class MedicalRecordWorkflowTool {
private final WorkflowExecutor workflowExecutor;
public MedicalRecordWorkflowTool(WorkflowExecutor workflowExecutor) {
this.workflowExecutor = workflowExecutor;
}
/**
* 工具执行方法(AgentScope 调用入口)
* @param medicalRecord 病历文本
* @return 工作流执行结果(分析报告)
*/
public String execute(@ToolParam(name = "medicalRecord", description = "待分析的病历文本", required = true) String medicalRecord) {
// 执行 Spring AI Workflow
WorkflowExecutionResult result = workflowExecutor.execute("medical-record-analysis",
param -> param.put("medicalRecord", medicalRecord));
// 返回最终节点结果
return result.getNodeResult("generate-report", String.class);
}
}
创建 ReAct 智能体,将 Workflow 工具注册到 Agent 中,实现'智能体决策 + 工作流执行':
package com.yourpackage.agent;
import io.agentscope.core.agent.ReActAgent;
import io.agentscope.core.model.dashscope.DashScopeChatModel;
import io.agentscope.core.tool.Toolkit;
import io.agentscope.spring.annotation.Agent;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
/**
* AgentScope 智能体:集成 Spring AI Workflow 工具
*/
@Agent
public class MedicalAnalysisAgent {
@Autowired
private MedicalRecordWorkflowTool medicalRecordWorkflowTool;
@Autowired
private DashScopeChatModel dashScopeChatModel;
/**
* 创建 ReAct 智能体(核心)
*/
@Bean
public ReActAgent createMedicalAnalysisAgent() {
// 1. 初始化工具包,注册 Workflow 工具
Toolkit toolkit = Toolkit.createDefault();
toolkit.registration().tool(medicalRecordWorkflowTool::execute).group("workflow_tools").apply();
// 2. 构建 ReAct 智能体
return ReActAgent.builder()
.id("medical-analysis-agent")
.name("MedicalAnalysisAgent")
.model(dashScopeChatModel) // 复用 Spring AI 的 DashScope 模型
.toolkit(toolkit) // 注册 Workflow 工具
.sysPrompt("""
你是医疗病历分析智能体,用户输入病历文本后,必须调用「medical_record_workflow_tool」工具执行分析,
并返回最终的分析报告,禁止直接生成结果。
""")
.build();
}
}
通过 Spring Boot Web 暴露接口,实现'前端调用 → Agent 决策 → Workflow 执行 → 结果返回':
package com.yourpackage.controller;
import io.agentscope.core.agent.ReActAgent;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* 业务入口:病历分析接口
*/
@RestController
@RequestMapping("/api/agent")
public class MedicalAgentController {
private final ReActAgent medicalAnalysisAgent;
public MedicalAgentController(ReActAgent medicalAnalysisAgent) {
this.medicalAnalysisAgent = medicalAnalysisAgent;
}
/**
* 智能体 + 工作流 执行接口
*/
@PostMapping("/analyze-medical-record")
public ResponseEntity<String> analyzeMedicalRecord(@RequestBody String medicalRecord) {
// 1. 智能体处理用户请求(自动决策调用 Workflow 工具)
String response = medicalAnalysisAgent.chat("分析以下病历:" + medicalRecord).getTextContent();
// 2. 返回结果
return ResponseEntity.ok(response);
}
}
AgentScope 基于 Reactor 异步编程,Spring AI Workflow 支持 CompletableFuture,需统一异步模型:
// 改造 Workflow 工具为异步执行
public CompletableFuture<String> executeAsync(String medicalRecord) {
return CompletableFuture.supplyAsync(() -> {
WorkflowExecutionResult result = workflowExecutor.execute("medical-record-analysis",
param -> param.put("medicalRecord", medicalRecord));
return result.getNodeResult("generate-report", String.class);
});
}
// AgentScope 智能体调用异步工具
toolkit.registration().tool(medicalRecordWorkflowTool::executeAsync).async(true).apply();
实现 AgentScope 智能体上下文与 Spring AI Workflow 上下文的双向同步:
// Workflow 工具中注入 Agent 上下文
public String execute(String medicalRecord, @RequestAttribute("agentContext") Map<String, Object> agentContext) {
WorkflowExecutionResult result = workflowExecutor.execute("medical-record-analysis", param -> {
param.put("medicalRecord", medicalRecord);
param.put("agentContext", agentContext); // 传递 Agent 上下文
});
// 将 Workflow 结果同步回 Agent 上下文
agentContext.put("workflowResult", result.getNodeResult("generate-report", String.class));
return result.getNodeResult("generate-report", String.class);
}
为 Workflow 执行添加异常捕获,确保 Agent 稳定性:
public String execute(String medicalRecord) {
try {
WorkflowExecutionResult result = workflowExecutor.execute("medical-record-analysis",
param -> param.put("medicalRecord", medicalRecord));
return result.getNodeResult("generate-report", String.class);
} catch (Exception e) {
// 兜底逻辑:AgentScope 智能体降级处理
return "病历分析失败:" + e.getMessage() + ",已触发人工审核流程";
}
}
复用 Spring Boot Actuator 监控 Workflow 与 Agent 状态:
# application.yml 新增
management:
endpoints:
web:
exposure:
include: health, metrics, workflows, agents
metrics:
enable: true
endpoint:
workflows:
enabled: true # 暴露 Workflow 执行指标
agents:
enabled: true # 暴露 AgentScope 智能体指标

微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
查找任何按下的键的javascript键代码、代码、位置和修饰符。 在线工具,Keycode 信息在线工具,online
JavaScript 字符串转义/反转义;Java 风格 \uXXXX(Native2Ascii)编码与解码。 在线工具,Escape 与 Native 编解码在线工具,online
使用 Prettier 在浏览器内格式化 JavaScript 或 HTML 片段。 在线工具,JavaScript / HTML 格式化在线工具,online
Terser 压缩、变量名混淆,或 javascript-obfuscator 高强度混淆(体积会增大)。 在线工具,JavaScript 压缩与混淆在线工具,online
生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online
基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online