基于 Spring AI 2.0 + spring-ai-agent-utils Skills 的 Flowable BPMN 2.0 流程图 AI 生成服务。 通过自然语言对话,让大模型直接产出符合 Flowable 规范的 BPMN XML。
flowable-agent 是一个 AI 流程设计助手 后端服务。用户在前端用自然语言描述业务需求(如"做一个请假审批流程,3 天以内部门经理审批,超过 3 天总经理审批"),后端通过大模型自动生成符合 BPMN 2.0 + Flowable 扩展规范 的 XML,并通过 SSE 流式协议实时把 XML 推给前端,应用端可以调用 Bpmn-Modeler(bpmn.js) 的 importXML 完成画布渲染。
核心特性:
- 对话即建模:自然语言 → BPMN XML,零代码拖拽
- SSE 流式输出:思考链、文本、工具调用、最终 XML 实时推送
- SkillsTool 注入规范:BPMN 建模规范以 Skill 形式按需加载,避免一次性塞入全部 prompt
- 多轮会话记忆:基于
MessageChatMemoryAdvisor+conversationId维持上下文 - 思考链可开关:支持
thinkingEnabled开关 reasoning_content 增量推送 - 工具回调总线:自定义
@Tool applyProcessXml在执行时主动推送xml事件
| 类别 | 技术 | 用途 |
|---|---|---|
| Web 框架 | Spring Boot 4.1.0 | 容器、Web MVC、SSE |
| AI 框架 | Spring AI 2.0.0 | ChatClient、@Tool、Advisors、ChatMemory |
| Agent 工具集 | spring-ai-agent-utils 0.10.0 | SkillsTool、GrepTool、GlobTool、FileSystemTools |
| LLM 协议 | OpenAI Compatible | 通过 spring-ai-starter-model-openai 接入 DeepSeek/Qwen/OpenAI 等 |
spring-ai-agent-utils 提供的 SkillsTool 是关键依赖:它把
classpath:.claude/skills/flowable-bpmn/SKILL.md暴露为 LLM 可调用的工具,让模型按需读取 BPMN 规范,避免在 system prompt 里塞超长文档。
| 依赖 | 版本 | 说明 |
|---|---|---|
spring-ai-starter-model-openai |
由 BOM 管理 | OpenAI 兼容协议 LLM 客户端 |
spring-ai-agent-utils |
0.10.0 | Skills / Grep / Glob / FileSystem 工具 |
JDK |
17+ | Spring Boot 4.1 要求 JDK 17+ |
Maven |
3.9+ | 支持 Spring Boot 4.x 插件 |
LLM |
OpenAI / DeepSeek / Qwen / 任何 OpenAI 兼容协议 | 通过 base-url + api-key 接入 |
| 场景 | 描述 |
|---|---|
| 零代码流程设计 | 业务人员用自然语言描述需求,自动产出 BPMN XML |
| 存量流程改造 | 上传现有 BPMN,让 AI 按指令调整节点、网关、扩展属性 |
| 流程脚手架生成 | 快速产出可执行的流程骨架,工程师再二次微调 |
| 学习 / 培训 | 给定的业务需求自动产出规范 BPMN,作为学习参考 |
| 校验闭环 | XML 校验失败时 AI 根据错误信息自动修复并重新提交 |
-
JDK 17+
java -version
-
Maven 3.9+
mvn -version
-
OpenAI 兼容协议的 LLM 接入信息
AI_API_KEY:API 密钥AI_BASE_URL:服务地址(例:https://api.deepseek.com/v1)AI_MODEL:模型名(例:deepseek-reasoner、qwen-plus、gpt-4o)
git clone <repository-url>
cd flowable-agent
mvn clean package -DskipTests构建产物:target/flowable-agent-0.0.1.jar
对应 application.yaml:
spring:
ai:
openai:
api-key: ${AI_API_KEY}
base-url: ${AI_BASE_URL}
chat:
model: ${AI_MODEL}
timeout: 1H
temperature: 0.1mvn spring-boot:runjava -jar target/flowable-agent-0.0.1.jar启动成功后控制台日志:
Started FlowableAiApplication in 3.x seconds
端点:POST /flowable/ai/chat/stream
Content-Type:application/json
响应:text/event-stream
请求体:
{
"message": "做一个请假审批流程:3 天以内部门经理审批,超过 3 天总经理审批",
"conversationId": "conv_abc123",
"thinkingEnabled": true
}| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
message |
string | 是 | 用户需求描述 |
conversationId |
string | 否 | 会话 ID;不传则后端自动生成 conv_xxxx |
thinkingEnabled |
boolean | 否 | 是否启用深度思考,默认 false |
modelId |
long | 否 | 模型 ID(预留,当前未启用) |
SSE 事件类型(data: {json}\n\n):
| type | 字段 | 触发时机 |
|---|---|---|
thinking |
thinking |
模型推理过程增量(仅 thinkingEnabled=true) |
text |
content |
LLM 可见文本增量 |
tool_start |
toolName, toolArgs |
工具开始调用 |
tool_end |
toolName, toolResult |
工具执行完成 |
xml |
xml |
AI 生成的完整 BPMN XML |
error |
error |
异常信息 |
done |
done=true |
流结束,前端关闭连接 |
示例调用(curl):
curl -N -X POST http://localhost:8080/flowable/ai/chat/stream \
-H "Content-Type: application/json" \
-d '{
"message": "做一个请假审批流程:3 天以内部门经理审批,超过 3 天总经理审批",
"thinkingEnabled": true
}'应用端 SSE 消费示例:
const es = new fetchEventSource('/flowable/ai/chat/stream', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ message: '...', thinkingEnabled: true })
});
es.onmessage = (e) => {
const event = JSON.parse(e.data);
switch (event.type) {
case 'thinking': renderThinking(event.thinking); break;
case 'text': renderText(event.content); break;
case 'xml': bpmnViewer.importXML(event.xml); break;
case 'done': es.close(); break;
}
};重要说明:所需的 BPMN 建模规范 skill 必须从下述官方仓库下载并放置到 classpath 根目录的
.claude/skills/flowable-bpmn/下。skill 仓库与本项目 同时在 GitHub / Gitee 双平台发布,使用前请任选一个平台 clone。
| 平台 | 仓库 URL | 用途 |
|---|---|---|
| GitHub | https://github.com/tony2y/flowable-skills | 推荐,CI 拉取用 |
| Gitee | https://gitee.com/tony2y/flowable-skills | 国内网络备选 |
git clone(推荐,便于后续升级)
# 选一个平台即可
git clone https://github.com/tony2y/flowable-skills.git
# 或 Gitee 镜像
# git clone https://gitee.com/tony2y/flowable-skills.git将 skill 文件放置到 resources 目录的 `.claude/skills/flowable-bpmn/` 目录下。
放置完成后,目标目录必须包含以下文件:
src/main/resources/.claude/skills/flowable-bpmn/
├── SKILL.md # 必需:总入口
└── references/ # 必需:参考文件目录
├── xxx.md # 参考文件
进入 `AiChatServiceTest.java` 文件运行测试
mvn clean package -DskipTests产物:target/flowable-agent-0.0.1.jar
# 启动服务
nohup java -jar flowable-agent-0.0.1.jar > app.log 2>&1 &flowable-agent/
├── pom.xml
├── README.md
├── LICENSE
└── src/
├── main/
│ ├── java/com/tony/flowable/ai/
│ │ ├── FlowableAiApplication.java # 启动类
│ │ ├── config/
│ │ │ └── AiChatConfig.java # ChatClient / SkillsTool 配置
│ │ ├── controller/
│ │ │ └── AiChatController.java # SSE 端点
│ │ ├── service/
│ │ │ ├── AiChatService.java # 流式对话主服务
│ │ │ └── BpmnToolService.java # @Tool applyProcessXml
│ │ └── model/
│ │ ├── AiChatRequest.java
│ │ ├── AiChatEvent.java
│ │ └── AiChatEventType.java
│ └── resources/
│ ├── application.yaml
│ └── .claude/skills/flowable-bpmn/ # BPMN 建模规范 Skill
└── test/
└── java/com/tony/flowable/ai/
└── service/
└── AiChatServiceTest.java
本项目基于 MIT License 开源,详见 LICENSE 文件。
- Spring AI — Spring 官方 AI 框架
- spring-ai-agent-utils — Skills / Grep / Glob 等 Agent 工具
- Flowable — BPMN 2.0 流程引擎