LiteFlow官网国产Dromara社区开源GitHub3.8k Star518 ForkGitee7.5k Star1.8K ForkJava生态下、组件式规则流程引擎用简单EL表达式把AI Agent和普通业务逻辑混排在一起支持热更新不重启。信通院TWOS成员。特性组件定义统一所有逻辑都是组件为所有的逻辑提供统一化的组件实现方式小身材大能量规则轻量基于规则文件来编排流程学习规则入门只需要5分钟规则多样化支持XML、JSON、YAML三种规则文件写法方式任意编排支持复杂逻辑过程看规则文件就能知道运转逻辑规则持久化框架原生支持把规则存储在标准结构化数据库NacosEtcdZookeeperApolloRedis。您也可以自己扩展把规则存储在任何地方优雅热刷新机制规则变化无需重启您的应用即时改变应用的规则。高并发下不会因为刷新规则导致正在执行的规则有任何错乱支持广泛Spring Boot、Spring、任何其他Java框架JDK版本支持8~25Spring Boot版本支持2.X、3.X、4.X脚本语言支持可定义脚本语言节点支持GroovyJavaKotlinJavaScriptQLExpressPythonLuaAviator。未来还会支持更多的脚本语言脚本和Java全打通所有脚本语言均可调用Java方法甚至于可引用任意实例支持在脚本中调用RPCAI Agent编排把完整ReAct Agent封装成标准组件让AI直接被编排进业务规则规则嵌套支持可利用简单表达式完成多重嵌套的复杂逻辑编排组件重试支持每个组件均可自定义重试配置和指定异常上下文隔离机制可靠的上下文隔离机制你无需担心高并发情况下的数据串流声明式组件支持可让任意类秒变组件详细步骤信息链路如何执行的每个组件耗时多少报了什么错一目了然性能卓越框架本身几乎不消耗额外性能性能取决于组件执行效率自带简单监控框架内自带命令行的监控能够知道每个组件的运行耗时排行安全通过墨菲安全检测为0风险框架稳定可靠历时2年多迭代在各大公司的核心系统上稳定运行功能EL表达式编排THEN(a,b,c)串行、WHEN(a,b,c)并行、SWITCH(x).to(a,b)分支、FOR(x).DO(...)循环Re-Act Agent 组件把Agent推理→执行→观察循环封装为标准节点支持OpenAI等主流模型Agent业务混排THEN(prepare, deepseekAgent, recordReply)Agent和业务节点无缝拼接脚本节点支持Java、Groovy、JavaScript、Python、Lua、QLExpress、Aviator等8种脚本语言规则里直接写逻辑热刷新每30秒扫一次规则表发现变化自动加载新规则。改规则、改脚本、换模型不重启即时生效多数据源存规则本地XML、YAML、JSON格式MySQLNacosZooKeeperEtcdApolloRedis都能存Skills技能系统为Agent配置Skill文件约束执行步骤支持流式输出SSE工作台模式把组件想象成流水线上的工人每个人只干自己的活通过工作台上下文共享中间结果。EL 表达式定义工人的座位顺序。规则文件 / 数据库 → FlowExecutor 解析 EL → 调度组件执行 → 返回结果 执行轨迹竞品与LiteFlow的关键差异Activiti/FlowableBPMN2.0标准的工作流引擎适合审批、角色任务流转LiteFlow不走BPMN更轻更快但不适合OA审批类场景CamundaBPMNDMN完整平台企业级监控和运维能力极强但学习曲线陡峭LiteFlow入门成本低得多热刷新也更强Drools纯规则引擎擅长决策表和规则计算如保险核保LiteFlow偏向流程编排不擅长复杂决策逻辑LangGraph/CrewAIAIAgent编排框架Agent能力更丰富但与现有Java业务代码集成成本高LiteFlow的优势是Agent和业务节点原生混排短板不支持BPMN标准和缺少企业级监控原理架构图核心规则解析引擎基于QLExpress最新版使用QL4不兼容QL3组件即节点对应源码目录liteflow-core/core/节点类型包括NodeComponent最基础的抽象类可用在when和then等逻辑中。提供抽象方法process最核心方法用于实现具体业务isAccess()表示是否进入该节点可用于业务参数的预先判断isContinueOnError()表示出错是否继续往下执行下一个组件默认falseisEnd()是否结束整个流程(不往下继续执行)。如果返回true则表示在这个组件执行完之后立马终止整个流程。此时由于是用户主动结束的流程属于正常结束beforeProcess()流程前置处理器在isAccess之前执行afterProcess()流程后置处理器在isAccess之后执行onSuccess()流程成功事件回调onError()流程失败事件回调rollback()流程失败后的回滚方法可覆盖iaAccess方法表示是否进入该节点执行业务逻辑isContinueOnError判断在出错的情况下是否继续执行下一个组件默认为false。isEnd方法表示是否终止流程默认为true。NodeSwitchComponent选择组件继承NodeComponent并提供抽象方法processWitch用于实现自定义逻辑。NodeBooleanComponent用于条件判断只有True、False两种选项抽象方法processBooleanNodeForComponent次数循环NodeIteratorComponent迭代迭代可自定义实现节点IntentionClassifyNode意图识别节点通过IntentionClassifyAgent分析用户输入起到路由作用分类结果分为获取新闻列表、获取新闻内容和其他日常闲聊。ParamAnalyseNode参数提取节点借助ParamAnalyseAgent分析用户输入提取查找新闻列表的关键参数。GetHotNewsListNode获取新闻标题列表节点依据参数执行服务调用获取新闻对象列表并通过SSE推送新闻列表信息。GetHotNewsContentNode获取新闻内容节点借助HotNewsContentAgent分析用户输入从多轮对话上下文变量中获取新闻信息调用MCP服务工具查找新闻内容并总结同时异步推送新闻原内容。NormalChatNode普通聊天节点借助NormalChatAgent基于大模型知识储备回答用户问题。OutputNode输出节点借助UniOutputAgent将文字输出内容转述为固定格式。EL规则THEN、WHEN、IF、SWITCH、FOR、WHILE、ITERATOR、CATCH、RETRY、TIMEOUT、PRE、FINALLY、AND、OR、NOT以及tag/data/bind、链路继承等。实战Spring Boot项目引入依赖dependencygroupIdcom.yomahub/groupIdartifactIdliteflow-spring-boot-starter/artifactId/dependency使用IDEA时还可安装插件LiteFlowX提供规则文件的智能提示、语法高亮、组件与规则文件之间的跳转及LiteFlow工具箱等功能Spring Boot集成配置文件liteflow:# 规则文件、打印执行日志、监控日志ruleSource:liteflow/*.el.xml# 全局重试次数默认为0retry-count:0print-execution-log:truerequest-id-generator-class:com.yomahub.liteflow.flow.id.DefaultRequestIdGenerator# 上下文的最大数量槽slot-size:10240# 线程数默认为64main-executor-works:64# FlowExecutor的execute2Future的自定义线程池Builder使用默认Buildermain-executor-class:com.yomahub.liteflow.thread.LiteFlowDefaultMainExecutorBuilder# 并行节点的线程池BuilderLiteFlow提供了默认的Builderthread-executor-class:com.yomahub.liteflow.thread.LiteFlowDefaultWhenExecutorBuilder# 异步线程最长等待时间只用于when默认15000when-max-wait-time:15000# 异步线程最长的等待时间只用于when默认为MILLISECONDSwhen-max-wait-time-unit:MILLISECONDS# when 节点全局异步线程池最大线程数when-max-workers:16# when 节点全局异步线程池队列数when-queue-limit:5120# 启动时解析规则parse-on-start:true# 是否开启本地文件监听默认为falseenable-monitor-file:false# 是否开启快速解析模式默认为falsefast-load:trueenable:true# 并行循环子项线程池最大线程数默认为16parallelLoop-max-workers:16# 并行循环子项线程池等待队列数默认为512parallelLoop-queue-limit:512# 并行循环子项的线程池Builder使用默认BuilderparallelLoop-executor-class:com.yomahub.liteflow.thread.LiteFlowDefaultParallelLoopExecutorBuilder# 简易监控配置选项monitor:# 监控是否开启默认不开启enable-log:false# 监控队列存储大小默认值为200queue-limit:200# 监控一开始延迟多少执行默认值为300000毫秒也就是5分钟delay:300000# 监控日志打印每过多少时间执行一次默认值为300000毫秒也就是5分钟period:300000用XML方式写规则文件?xml version1.0 encodingUTF-8?flowchainnametest_flowTHEN( prepareTrade, grantScore, sendMq, WHEN(sendEmail, sendPhone) );/chain/flow解读THEN代表串行执行WHEN表示并行执行。示例Component(postageCondCmp)publicclassPostageCondCmpextendsNodeSwitchComponent{OverridepublicStringprocessSwitch()throwsException{PriceContextcontextthis.getContextBean(PriceContext.class);// 根据参数oversea来判断是否境外购转到相应的组件booleanoverseacontext.isOversea();if(oversea){returnoverseaPostageCmp;}else{returnpostageCmp;}}}上下文对象作用参数传递、上下文隔离、别名、参数注入、表达式取参。Agent编排智能体编排的核心在于变量管理根据变量生命周期将变量分为三种类型单轮对话级别通过LiteFlow上下文变量解决借助NodeComponent的getContextBean方法获取上下文信息作为节点间数据传递的通信总线。多轮对话级别实现方案包括继承MessageChatMemoryAdvisor复写aroundCall方法、自管控ChatMemory或存入全局变量池如Redis、内存缓存。publicstaticvoidputVariableIntoMemoryWithReplace(StringchatId,Stringkey,Stringvalue){if(!StringUtils.hasText(key)||!StringUtils.hasText(value)){return;}ChatMemorychatMemorygetChatMemory(chatId);ListMessagemessageschatMemory.get(chatId,50);if(!CollectionUtils.isEmpty(messages)){ListMessagenewMessagesnewArrayList();for(Messagemessage:messages){if(messageinstanceofSystemMessagesystemMessage){if(systemMessage.getText().contains(VARIABLE_PREFIX)systemMessage.getText().contains(key)){continue;}else{newMessages.add(message);}}else{newMessages.add(message);}}chatMemory.clear(chatId);chatMemory.add(chatId,newMessages);}chatMemory.add(chatId,newSystemMessage(String.format(MEMORY_VARIABLE,key,value)));}解读该方法用于将变量存入会话记忆中以便在多轮对话中引用。遍历对话消息过滤掉包含特定前缀和键的系统消息避免变量重复。清空原有对话消息添加过滤后的新消息并注入新的系统消息包含变量信息。全局级别适用于用户名称、偏好等需持久记忆的信息。publicclassGuavaCacheTools{staticCacheString,StringcacheCacheBuilder.newBuilder().maximumSize(100).build();publicstaticvoidput(StringchatId,Stringkey,Stringvalue){if(StringUtils.hasText(key)StringUtils.hasText(value)){cache.put(chatId:key,value);}}publicstaticStringget(StringchatId,Stringkey){if(StringUtils.hasText(key)StringUtils.hasText(chatId)){returncache.getIfPresent(chatId:key);}return;}}解读使用Guava CacheBuilder创建缓存设置最大容量为100示例AgentpublicclassHotNewsContentAgent{publicstaticfinalStringSYS_PROMPT 你是一个获取热点新闻内容的助手可以调用工具 getMainContentOfNews 获取新闻内容。 获取新闻内容需传递新闻链接newsUrl该信息可从新闻列表中获取。 新闻列表{last_search_news_list} 请根据用户提问判断对应新闻若无法判断则返回“无法判断询问的是哪条内容”。 若找到对应新闻调用工具获取内容并总结。 ;privatefinalChatClientchatClient;publicHotNewsContentAgent(ChatClient.BuilderchatClientBuilder,ToolCallbackProvidertools){this.chatClientchatClientBuilder.defaultTools(tools).defaultOptions(DashScopeChatOptions.builder().withTopP(0.7).build()).build();}publicFluxChatResponsegetHotNewsContent(StringuserInput,StringchatId){StringlistgetLastSearchNewsList(chatId);log.info(getHotNewsContent最近一次查询处理的新闻列表为{},list);SystemPromptTemplatesptnewSystemPromptTemplate(SYS_PROMPT);Messagesystemspt.createMessage(Map.of(last_search_news_list,list));MessageusernewUserMessage(userInput);PromptpromptnewPrompt(List.of(system,user));returnchatClient.prompt(prompt).advisors(newMessageChatMemoryAdvisor(ChatMemoryTools.getChatMemory(chatId))).stream().chatResponse();}privateStringgetLastSearchNewsList(StringchatId){ChatMemorychatMemoryChatMemoryTools.getChatMemory(chatId);returnChatMemoryTools.getVariableFromMemory(chatId,lastSearchNewsList);}}解读定义系统提示词模板包含新闻列表变量{last_search_news_list}以便Agent获取上下文信息。构造方法初始化ChatClient设置默认工具和选项。getHotNewsContent方法根据用户输入和会话ID获取新闻内容从会话记忆中获取最近一次查询的新闻列表。创建系统消息和用户消息构建提示。调用ChatClient发送提示通过MessageChatMemoryAdvisor管理会话记忆。返回聊天响应的Flux流。拓展How2useLiteFlow社区开源GitHub 5 Star已被官方认可的可帮助AI正确使用LiteFlow的Agent Skill内置从官方文档与源码蒸馏出的用法与代码细节组件、EL规则、上下文、脚本组件、规则配置源、执行器、AI Agent编排、测试调试、源码实现等。安装npx skills add bryan31/How2useLiteFlowliteflow-react-agent聚合模块不同模型供应商由独立子模块提供模块作用liteflow-react-agent-core核心基础设施ReActAgentComponent、ModelSpec、会话管理、Memory持久化、流式事件、Workspace文件工具、Shell工具liteflow-react-agent-openaiOpenAI官方APIOpenAI兼容协议内置DeepSeek、Kimi、GLM、Minimax便捷入口liteflow-react-agent-anthropicAnthropic Claude模型入口liteflow-react-agent-geminiGoogle Gemini模型入口liteflow-react-agent-dashscope阿里云DashScope/Qwen模型入口LF CLUBLiteFlow作者创办的高级付费社区提供以下服务持续连载的LF解析精华系列。从头开始解析LF只要跟着星球解析系列走使用者一定能完全掌握LF提供答疑服务会员可以无限制提问当天必定得到详细的回复和指导建议第一时间分享LF目前的进度以及下一个版本的重点继续阅读SpringBootLiteFlow轻松应对复杂业务逻辑