跳到主要内容
AgentScope Java 集成 Spring AI Alibaba Workflow 指南 | 极客日志
Java AI java
AgentScope Java 集成 Spring AI Alibaba Workflow 指南 介绍如何在 Java 环境下将 AgentScope 智能体框架与 Spring AI Alibaba 工作流引擎进行集成。内容包括 Maven 依赖配置、application.yml 模型设置、基于 Spring AI 定义的工作流节点、封装为 AgentScope 工具的方法,以及 ReAct 智能体的创建与 API 暴露。重点解决了异步模型对齐、上下文数据互通及异常处理等工程化问题,旨在实现智能体决策与工作流执行的协同稳定运行。
雪落无声 发布于 2026/3/27 更新于 2026/7/25 52 浏览AgentScope Java 集成 Spring AI Alibaba Workflow 指南
结合 agentscope-ai/agentscope-java、alibaba/spring-ai-alibaba 及 java2ai 生态中 Graph Core 工作流规范,以下是集成方案,涵盖核心思路、工程配置、代码实现、最佳实践四部分,兼顾 AgentScope 智能体特性与 Spring AI 工作流的工程化能力。
一、核心集成思路
1. 能力边界划分(关键前提)
框架/组件 核心职责 AgentScope Java 智能体(Agent)生命周期管理、多智能体协作、工具调用、上下文(Context)管理 Spring AI Alibaba 阿里云大模型(通义千问/百炼)标准化调用、Workflow 声明式编排、Spring 生态适配 Java2AI Graph Core 工作流节点标准化定义、执行引擎适配、可视化编排规范(参考)
2. 集成核心逻辑
以 'AgentScope 为智能体核心 + Spring AI Alibaba 为工作流引擎' 为核心,通过三层适配实现能力融合:
模型层复用 :AgentScope 复用 Spring AI Alibaba 的 DashScope 客户端,统一大模型调用;
工作流层封装 :将 Spring AI Alibaba Workflow 封装为 AgentScope 可调用的'工具/服务';
执行层适配 :对齐异步模型(Reactor/CompletableFuture)、生命周期(Spring/AgentScope)、上下文数据格式。
二、前置工程配置
1. 依赖整合(Maven pom.xml)
需兼容 JDK 17+、Spring Boot 3.2+,核心依赖如下(版本以官方最新为准):
<parent >
<groupId > org.springframework.boot</groupId >
<artifactId > spring-boot-starter-parent</artifactId >
<version > 3.2.5</version >
<relativePath />
</parent >
<dependencies >
com.alibaba
spring-ai-alibaba-dashscope-spring-boot-starter
0.1.0
com.alibaba
spring-ai-alibaba-workflow-core
0.1.0
io.agentscope
agentscope-core
0.1.0
io.agentscope
agentscope-spring-boot-starter
0.1.0
com.java2ai
graph-core
1.0.0
org.springframework.boot
spring-boot-starter-web
org.springframework.boot
spring-boot-starter-validation
<dependency >
<groupId >
</groupId >
<artifactId >
</artifactId >
<version >
</version >
</dependency >
<dependency >
<groupId >
</groupId >
<artifactId >
</artifactId >
<version >
</version >
</dependency >
<dependency >
<groupId >
</groupId >
<artifactId >
</artifactId >
<version >
</version >
</dependency >
<dependency >
<groupId >
</groupId >
<artifactId >
</artifactId >
<version >
</version >
</dependency >
<dependency >
<groupId >
</groupId >
<artifactId >
</artifactId >
<version >
</version >
</dependency >
<dependency >
<groupId >
</groupId >
<artifactId >
</artifactId >
</dependency >
<dependency >
<groupId >
</groupId >
<artifactId >
</artifactId >
</dependency >
</dependencies >
2. 配置文件(application.yml) 统一模型密钥、工作流引擎、AgentScope 配置:
spring:
ai:
dashscope:
api-key: ${DASHSCOPE_API_KEY:你的阿里云 API 密钥}
chat:
options:
model: qwen-turbo
temperature: 0.7
workflow:
executor:
thread-pool-size: 8
persistence:
enabled: true
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
java2ai:
graph:
core:
node-package: com.yourpackage.agent.workflow.node
三、核心代码实现
步骤 1:定义 Spring AI Alibaba Workflow 模板 参考 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;
@Workflow(name = "medical-record-analysis", description = "医疗病历分析工作流")
@Component
public class MedicalRecordAnalysisWorkflow {
private final DashScopeChatClient dashScopeChatClient;
public MedicalRecordAnalysisWorkflow (DashScopeChatClient dashScopeChatClient) {
this .dashScopeChatClient = dashScopeChatClient;
}
@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);
return dashScopeChatClient.call(prompt).getResult().getOutput().getContent();
}
@WorkflowNode(name = "validate-data", order = 2, dependOn = "extract-info")
public String validateData (WorkflowContext context) {
String extractedInfo = context.getResult("extract-info" , String.class);
boolean isComplete = extractedInfo.contains("检查结果" ) && extractedInfo.contains("诊断结论" );
return isComplete ? "数据完整" : "缺少检查结果/诊断结论,数据不完整" ;
}
@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();
}
}
步骤 2:封装 Workflow 为 AgentScope 工具 将 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;
@Component
@Tool(name = "medical_record_workflow_tool", description = "执行医疗病历分析工作流")
public class MedicalRecordWorkflowTool {
private final WorkflowExecutor workflowExecutor;
public MedicalRecordWorkflowTool (WorkflowExecutor workflowExecutor) {
this .workflowExecutor = workflowExecutor;
}
public String execute (@ToolParam(name = "medicalRecord", description = "待分析的病历文本", required = true) String medicalRecord) {
WorkflowExecutionResult result = workflowExecutor.execute("medical-record-analysis" ,
param -> param.put("medicalRecord" , medicalRecord));
return result.getNodeResult("generate-report" , String.class);
}
}
步骤 3:AgentScope 智能体集成 Workflow 工具 创建 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;
@Agent
public class MedicalAnalysisAgent {
@Autowired
private MedicalRecordWorkflowTool medicalRecordWorkflowTool;
@Autowired
private DashScopeChatModel dashScopeChatModel;
@Bean
public ReActAgent createMedicalAnalysisAgent () {
Toolkit toolkit = Toolkit.createDefault();
toolkit.registration().tool(medicalRecordWorkflowTool::execute).group("workflow_tools" ).apply();
return ReActAgent.builder()
.id("medical-analysis-agent" )
.name("MedicalAnalysisAgent" )
.model(dashScopeChatModel)
.toolkit(toolkit)
.sysPrompt("""
你是医疗病历分析智能体,用户输入病历文本后,必须调用「medical_record_workflow_tool」工具执行分析,
并返回最终的分析报告,禁止直接生成结果。
""" )
.build();
}
}
步骤 4:业务入口(API 调用示例) 通过 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) {
String response = medicalAnalysisAgent.chat("分析以下病历:" + medicalRecord).getTextContent();
return ResponseEntity.ok(response);
}
}
四、关键适配与最佳实践
1. 异步模型对齐(核心) AgentScope 基于 Reactor 异步编程,Spring AI Workflow 支持 CompletableFuture,需统一异步模型:
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);
});
}
toolkit.registration().tool(medicalRecordWorkflowTool::executeAsync).async(true ).apply();
2. 上下文数据互通 实现 AgentScope 智能体上下文与 Spring AI Workflow 上下文的双向同步:
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);
});
agentContext.put("workflowResult" , result.getNodeResult("generate-report" , String.class));
return result.getNodeResult("generate-report" , String.class);
}
3. 异常处理兜底 为 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) {
return "病历分析失败:" + e.getMessage() + ",已触发人工审核流程" ;
}
}
4. 可观测性集成 复用 Spring Boot Actuator 监控 Workflow 与 Agent 状态:
management:
endpoints:
web:
exposure:
include: health, metrics, workflows, agents
metrics:
enable: true
endpoint:
workflows:
enabled: true
agents:
enabled: true
五、总结
核心集成要点
依赖层 :复用 Spring AI Alibaba 的 DashScope 客户端,避免重复配置模型密钥;
工具层 :将 Spring AI Workflow 封装为 AgentScope 标准工具,符合智能体调用规范;
执行层 :对齐异步模型、上下文数据、异常处理,确保二者协同稳定;
工程层 :复用 Spring 生态的可观测性、持久化、微服务能力,降低运维成本。
关键参考资源 相关免费在线工具 Keycode 信息 查找任何按下的键的javascript键代码、代码、位置和修饰符。 在线工具,Keycode 信息在线工具,online
Escape 与 Native 编解码 JavaScript 字符串转义/反转义;Java 风格 \uXXXX(Native2Ascii)编码与解码。 在线工具,Escape 与 Native 编解码在线工具,online
JavaScript / HTML 格式化 使用 Prettier 在浏览器内格式化 JavaScript 或 HTML 片段。 在线工具,JavaScript / HTML 格式化在线工具,online
JavaScript 压缩与混淆 Terser 压缩、变量名混淆,或 javascript-obfuscator 高强度混淆(体积会增大)。 在线工具,JavaScript 压缩与混淆在线工具,online
RSA密钥对生成器 生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online
Mermaid 预览与可视化编辑 基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online