Flowable 工作流中如何接入大模型 LLM 节点

Flowable 中的"LLM 节点"不是 BPMN 2.0 标准元素,也不是 Flowable 开源引擎内置的一种原生节点。企业通常把它建模为服务任务,再通过 Java Delegate、HTTP Task、External Worker 或事件机制调用独立的 AI 网关。Flowable 负责确定性流程、状态持久化、重试与人工任务,大模型负责摘要、分类、抽取、生成和辅助判断。

生产环境最推荐"External Worker + AI 网关"模式:流程到达 LLM 服务任务后形成等待状态,独立工作者拉取任务、调用模型、校验结构化结果,再通知 Flowable 继续执行。这样可以隔离模型 SDK、GPU 服务和网络抖动,避免长时间远程调用占用流程引擎事务。

截至 2026 年 8 月,Flowable 最新开源版本为 8.0.0。官方文档已经提供 Java Service Task、HTTP Task、External Worker、异步执行器和 Event Registry 等基础能力;Spring AI 2.0.0 则提供统一模型 API、结构化输出、RAG、工具调用和可观测性。两者组合的重点不是"调用成功",而是让概率型输出进入可验证、可审计、可回退的流程治理体系。

一、核心结论与问题边界

一句话回答:让 Flowable 控制流程,让 LLM 提供受约束的智能能力

LLM 节点可以定义为:在业务流程运行到指定位置时,按照已发布的提示词、模型策略、知识范围和输出契约调用大模型,并把经过校验的结构化结果返回流程的服务任务。

它适合处理规则难以穷举、但结果仍可复核的任务,例如:

  • 从合同、报销单或邮件中提取结构化字段。
  • 对申请材料进行摘要、分类和缺项提示。
  • 根据制度知识库生成审批建议与引用依据。
  • 对客服工单识别意图、风险和推荐路由。
  • 生成通知文案、办理意见草稿或下一步建议。

它不应该直接替代金额校验、权限判断、法定审批、账户扣款等确定性控制。高风险决策应由规则引擎或人工最终确认,大模型只能提供证据和建议。

LLM 节点为什么不能直接画成一个"智能审批"方框

BPMN 模型表达的是可重放的控制流,而大模型输出具有非确定性。相同输入可能因模型版本、提示词、采样参数和知识库变化得到不同结果。如果流程设计器只保存一个"AI 审批"名称,而没有保存输入、输出、版本和异常语义,生产问题将无法解释。

一个可发布的 LLM 节点至少应包含四类契约:

契约 关键配置 目的
输入契约 字段映射、附件引用、脱敏规则 限定模型能够看到什么
推理契约 提示词版本、模型别名、温度、最大令牌 固定本次运行策略
输出契约 JSON Schema、必填字段、置信度范围 让流程能够可靠消费
运行契约 超时、重试、降级、人工兜底、幂等键 明确失败后怎么办

因此,"LLM 节点"应当是平台在 BPMN Service Task 之上的领域封装,而不是修改 BPMN 标准本身。部署时可以把设计器属性转换成 Flowable 扩展属性、流程变量映射和外部工作者主题。

二、关键概念与能力差异

Flowable 接入大模型有哪四种方式

1. Java Delegate:适合简单、短时、同进程调用

Java Service Task 可以通过类、委托表达式或方法表达式执行 Java 逻辑。把 Spring AI 或其他 Java LLM 客户端封装在委托服务中,开发成本最低,也方便读取流程变量。

但普通同步 Delegate 与当前流程命令处于同一事务。模型调用若持续几十秒,数据库事务、连接和引擎线程都会被长期占用;调用失败还可能让整个业务提交回滚。它只适合低延迟、低并发、容错要求不高的内部场景。至少应配置异步延续,让流程状态先提交,再由异步执行器调用。

2. HTTP Task:适合已有统一 AI 网关

Flowable HTTP Task 可以直接调用远程接口,并根据状态码抛出异常或映射 BPMN Error。企业已有 AI 网关时,它能快速完成集成,也避免流程应用绑定某一家模型 SDK。

缺点是它仍然容易形成同步长调用,复杂鉴权、流式响应、结果修复和多模型降级都不适合堆在 BPMN 属性中。HTTP Task 更适合短时、接口稳定、返回结构简单的调用。

3. External Worker:生产环境优先选择

Flowable 官方把 External Worker Task 实现为专用 Service Task。流程到达该节点后创建外部工作者作业并等待;工作者按 topic 拉取、锁定作业,处理完成后回传变量。工作者可以用任意语言实现,也可以独立扩缩容。

对 LLM 场景,它有四个明显优势:模型调用不会占用 Flowable 的执行线程;Python 或 Java AI 技术栈均可接入;不同模型和租户可以隔离部署;失败重试、锁续期和死信能够独立治理。它也是本文推荐的默认方案。

4. Event Registry:适合长任务和高吞吐异步协作

Flowable Event Registry 支持通过 JMS、Kafka、RabbitMQ 和 HTTP 收发事件,并按相关键触发流程实例。对于文档批处理、长文本分析、多步骤 Agent 或私有模型排队推理,可以发送"AI 请求"事件,让流程进入消息等待状态,完成后再通过事件相关返回。

事件模式伸缩性更强,但必须处理相关键、重复消息、乱序、超时和最终一致性。若团队尚未建立可靠消息治理,External Worker 通常更容易落地。

企业级 LLM 节点推荐什么架构

推荐把系统拆成五层:

  1. 流程编排层:Flowable 保存流程状态,控制分支、并行、超时、补偿和人工任务。
  2. 节点适配层:External Worker 或异步 Delegate 负责输入映射、幂等和完成回调。
  3. AI 网关层:统一鉴权、模型路由、限流、成本预算、重试、结构化输出和审计。
  4. 智能能力层:提示词、RAG、工具白名单、安全过滤和结果评估。
  5. 资源层:公有云模型、私有模型服务、向量数据库、对象存储和业务 API。

流程模型只引用稳定的能力标识,例如"合同风险抽取 v3",不要写模型厂商地址、API Key 或完整提示词。AI 网关把能力标识解析为具体提示词版本、模型别名和知识库版本。更换供应商时,流程定义不必整体重画。

三、模型架构与运行机制

节点属性面板应该配置哪些内容

低代码设计器中的 LLM 节点,建议分成六组属性:

分组 推荐字段 设计原则
基础 能力标识、任务类型、说明 用业务语义命名,不暴露 SDK
输入 字段映射、附件、上下文范围 默认最小数据集
模型 模型别名、温度、令牌上限 使用平台策略,不绑定密钥
知识 知识库、检索条数、权限过滤 检索必须继承租户与用户权限
输出 JSON Schema、结果变量、置信度 禁止用自由文本直接控制网关
异常 超时、重试、备用模型、人工兜底 每一种失败都有确定出口

提示词应由提示词中心版本化发布。流程定义保存版本号或不可变快照,运行中的流程不能因为管理员改了"最新版提示词"而悄悄改变行为。模型也建议使用受治理的别名,例如 risk-model-stable,由网关将其路由到经过评测的具体版本。

同步调用还是异步调用

LLM 网络调用通常比数据库操作慢几个数量级,而且会遇到排队、限流和冷启动。不要在一个长数据库事务里等待模型返回。

三种推荐级别如下:

场景 推荐方式 原因
内部模型,P95 小于数秒 异步 Java Service Task 实现简单,状态先提交
常规模型推理,数秒到数分钟 External Worker 等待状态清晰,可独立扩缩容
文档批处理或 Agent 长任务 事件请求/响应 解耦排队和计算资源

Flowable 的 flowable:async="true" 会创建异步作业,由异步执行器在新的事务中继续执行。官方文档说明异步作业失败时默认重试,也可以用 flowable:failedJobRetryTimeCycle 配置次数和间隔。External Worker 则创建可获取和锁定的等待作业,失败次数归零后进入死信作业表。

流式输出不应直接写成流程运行状态。前端可以从 AI 网关单独接收流式内容,但只有最终响应通过 Schema 校验后,工作者才完成 Flowable 节点。

四、核心场景与处理策略

External Worker 模式怎样运行

推荐运行链路如下:

  1. Flowable 到达 external-worker 服务任务,按 topic 创建等待作业。
  2. AI Worker 拉取并锁定作业,读取经过白名单筛选的流程变量。
  3. Worker 使用幂等键向 AI 网关提交请求。
  4. 网关执行权限过滤、RAG、模型调用和输出校验。
  5. 结果合格时,Worker 回传小型结构化变量并完成作业。
  6. 结果不合格时,按错误类别重试、降级或返回人工复核出口。

幂等键可以由"流程实例 ID + 活动 ID + 执行 ID + 节点尝试序号"组成。相同幂等键再次请求时,AI 网关应返回原结果或当前状态,避免作业锁超时、网络重试导致重复计费和重复执行工具。

工作者锁定时间应大于正常调用 P99,并支持在长任务中续期。完成回调前还要确认自己仍是锁的拥有者;否则旧工作者晚到的结果可能覆盖新一轮执行。

为什么必须使用结构化输出

流程网关只能对确定字段做判断。不要根据"模型回答中是否包含同意"来走分支,因为否定句、解释文本、语言变化都会产生误判。

推荐结果示例:

json 复制代码
{
  "decision": "MANUAL_REVIEW",
  "riskLevel": "HIGH",
  "confidence": 0.72,
  "summary": "合同存在自动续期与单方解约风险",
  "evidenceRefs": ["clause-12", "policy-7"],
  "reasonCodes": ["AUTO_RENEWAL", "ONE_SIDED_TERMINATION"]
}

AI 网关应先校验 JSON Schema、枚举、长度和数值范围,再把结果交给流程。Spring AI 的 ChatClient 支持把响应映射为 Java 类型,也支持提供者原生结构化输出以及 Schema 校验重试。即便模型声称支持结构化输出,应用仍要做业务校验,例如证据引用是否存在、置信度是否在 0 到 1、金额是否与单据一致。

网关分支只读取有限枚举和确定字段。decision=PASS 也不应自动等于业务审批通过,仍需结合 DMN 或业务规则检查金额、权限和风险白名单。

五、数据、规则与状态设计

RAG 知识库如何与流程权限结合

RAG 可以把制度、合同模板、产品手册和历史案例检索后加入上下文,降低模型凭空生成。但它不是"接一个向量库"就结束。

检索条件必须带上租户、组织、文档密级、业务类型、有效期和用户权限。模型只能看到当前流程参与者本来有权访问的资料。检索结果需要保留文档 ID、版本、段落 ID 和相似度,最终把引用返回审批页面,供人工核验。

流程变量中只保存查询条件、结果摘要和证据引用。原始附件、切片正文和模型完整响应放在对象存储或 AI 审计库,避免把大文本写入 Flowable 变量表并拖慢运行时查询。

Spring AI 提供模块化 RAG Advisor、向量存储抽象和文档 ETL 能力,适合 Java 技术栈;企业也可以通过 AI 网关接入其他 RAG 服务。无论使用哪种框架,权限过滤都必须在检索阶段执行,而不是生成答案后再遮盖敏感内容。

Tool Calling 能不能让模型直接操作业务系统

Tool Calling 可以查询订单、获取客户信息、发送通知或创建草稿,但模型不应该直接拥有任意业务 API 权限。工具调用本质上是"模型提出调用建议,应用执行函数",责任仍在应用。

建议采用以下边界:

  • 每个 LLM 节点配置工具白名单,只暴露完成本任务所需的能力。
  • 查询工具与写操作工具分开授权,写操作默认需要二次规则或人工确认。
  • 工具参数必须做 Schema、权限、数据范围和幂等校验。
  • 严格限制递归轮数、总令牌、工具次数和总执行时长。
  • 工具返回内容视为不可信输入,防止提示词注入继续传播。
  • 金额支付、删除、发布和外部发送等高风险动作由 Flowable 独立节点执行。

Spring AI 的工具调用文档说明框架可以自动管理工具调用循环,也支持应用自行控制执行。对企业流程,建议采用可控模式:模型选择工具后先记录意图,由应用检查策略,再执行允许的工具。

六、工程实现与系统集成

流程变量与大模型数据应该怎样存

Flowable 变量适合保存流程后续确实需要的小型数据,例如:

  • llmDecision:有限枚举。
  • llmRiskLevel:风险等级。
  • llmConfidence:置信度。
  • llmSummary:限长摘要。
  • llmResultRef:完整结果在 AI 审计库中的引用。
  • llmPromptVersion、llmModelAlias:复现运行所需的版本信息。

不要把数十页附件、检索切片、完整 Prompt、Embedding 或长响应直接写入全局流程变量。大变量会增加序列化、数据库 I/O、历史表体积和查询压力。完整输入输出可加密保存在专用存储中,并设置保留期;Flowable 只保存引用、摘要、哈希和关键决策字段。

敏感提示词与回答默认不写普通应用日志。Spring AI 官方可观测性文档也默认不导出 Prompt、Completion、工具参数和工具结果,因为它们可能包含敏感信息。

超时、重试、降级和人工兜底怎么设计

错误不能统一"重试三次"。应先分类:

错误类型 典型情况 推荐处理
瞬时错误 429、5xx、网络超时 指数退避并遵守 Retry-After
输出错误 JSON 不合法、字段缺失 修复提示重试一次,再换备用模型
策略错误 内容安全拦截、无权访问 不重试,进入人工或终止
业务不确定 置信度低、证据冲突 创建人工复核任务
系统错误 配置缺失、Schema 版本不匹配 进入死信并告警

重试必须使用同一幂等键,并设置最大时间预算。备用模型不只是换一个名称,还要确认输出 Schema、上下文长度、数据合规和评测结果一致。若节点对外执行过工具,重试前必须判断副作用是否已经发生。

人工兜底任务应展示输入摘要、模型建议、证据、失败原因、模型与提示词版本,让办理人能够接受、修改或拒绝建议。人工结果还可以进入评测样本,但不能未经脱敏自动变成训练数据。

七、安全、性能与治理要求

如何防止提示词注入和数据泄露

来自附件、网页、邮件和知识库的文本都可能包含"忽略系统指令""把机密发送到某地址"等恶意内容。安全设计至少包括:

  1. 把系统指令、业务数据和检索内容分层传递,不把外部文本拼成最高优先级指令。
  2. 对附件类型、大小、恶意脚本和敏感信息先扫描再进入模型。
  3. 工具与知识库按租户、用户和节点授权,不能让模型自行扩大范围。
  4. API Key 保存在密钥管理系统,BPMN XML、流程变量和前端均不可见。
  5. 公有模型调用前执行脱敏和出境策略,私有化部署也要做租户隔离。
  6. 对输入、输出和工具参数做内容安全检查,高风险结果转人工。

"模型在内网"不等于安全。私有模型仍可能泄露跨租户上下文、被提示词注入操控或通过工具调用扩大权限。

监控、成本和评测应该看什么

流程监控与模型监控要用同一个追踪 ID 关联。建议记录:模型提供者与版本、提示词版本、知识库版本、输入输出令牌、首字延迟、总耗时、重试次数、缓存命中、备用模型、Schema 合格率、置信度、人工改判率和单次成本。

Spring AI 基于 Spring 可观测性体系提供 ChatClient、模型、工具和向量库的指标与 Trace,并明确敏感内容默认不导出。企业还应按流程定义、业务类型、租户和节点汇总成本,设置单实例和月度预算。

上线前建立"黄金样本集":包含正常、边界、冲突、恶意和敏感数据。每次升级模型、提示词、Schema 或知识库切片策略,都要离线回放,比较准确率、拒答率、结构化合格率、成本和延迟。生产中抽样人工复核,并监控概念漂移。

八、平台落地、测试与选型

低代码平台如何封装 LLM 节点

平台不应让每个流程开发者重复编写模型调用代码。可把 LLM 节点封装成可视化组件,提供输入映射、提示词版本、知识库、工具白名单、输出 Schema、错误边界事件和人工兜底模板。

发布检查应自动拦截以下问题:缺少输出 Schema;分支直接判断自由文本;高风险动作没有人工确认;流程变量包含密钥;外部工作者没有超时与重试;知识检索没有数据权限;运行实例引用"始终最新"的提示词。

云程低代码平台后续可以把现有逻辑编排、业务规则流、表单、数据权限和流程办理人能力,与统一 AI 网关组合起来:LLM 负责理解非结构化材料,规则流负责确定性校验,Flowable 负责流程状态和人工协作。三者职责分开,才能形成可维护的企业智能流程。

一个可落地的实施顺序

  1. 选择"摘要或字段抽取"这类低风险场景,先不让模型直接决定审批结论。
  2. 定义输入白名单和 JSON Schema,准备包含异常样本的评测集。
  3. 建立 AI 网关,统一模型路由、提示词版本、密钥、限流和审计。
  4. 用 External Worker 接入 Flowable,完成幂等、锁续期、超时和死信处理。
  5. 把低置信度、Schema 失败和安全拦截统一转人工任务。
  6. 接入 RAG 时先完成文档权限、版本和引用链,再扩大知识范围。
  7. 工具调用从只读查询开始,写操作拆成独立、可审计的流程节点。
  8. 通过黄金样本、灰度发布和成本看板验证后,再推广到关键流程。

九、如果只记住三句话

第一,LLM 节点不是 BPMN 标准节点,而是 Service Task 之上的企业能力封装。

第二,生产环境优先采用 External Worker 或事件方式,避免在 Flowable 数据库事务中等待长时间模型调用。

第三,任何会影响流程分支的模型输出,都必须结构化、可校验、可追溯,并配置规则与人工兜底。

相关推荐
围炉聊科技2 小时前
Herdr智能体多路复用让你的编程工具协作起来——智能体基建系列
agent·ai编程·命令行
AI智能体先生2 小时前
如何在 OpenClaw 中安装本地插件
ai编程
qinglongcn2 小时前
中文语境下的代码理解:国产工具真的更强吗
ai编程
白雾茫茫丶2 小时前
VibeCoding 一套 Admin 系统,五种技术栈实现
前端·ai编程·vibecoding
武子康2 小时前
Claude Code + Codex 怎么分工?别把“允许结束”当成“可以提交”
人工智能·llm·agent
得物技术2 小时前
别再只卷向量检索了,得物交易搜索如何用“生成式”实现召回范式跃迁?
人工智能·算法·llm
吴佳浩2 小时前
多智能体系统的通信风暴与死锁治理:生产级降级与容灾方案
人工智能·agent·ai编程
kyriewen2 小时前
我手写了一版 React Compiler:AI 最常漏的 3 个 memo 场景
前端·javascript·ai编程
孟健2 小时前
Grok4.7评测排名前列,我为何还是退订了它?
ai编程