别再把Java当大模型玩具了:拆解两大新锐开源项目,看懂AI数字员工底座
大模型狂飙两年,如果在你眼里Java还只能写个“套壳聊天页面”,那真得更新下认知了。
当OpenClaw在海外开发者圈层引发地震,Python、Rust甚至Go社区都在疯狂卷AI原生应用时,Java阵营曾一度陷入失语。但局面在最近被彻底撕开——两套重量级开源方案几乎同时闯入视野:
其一是RuoYi-AI v3.0,这个国内广泛使用的脚手架熬了小半年,终于从“陪聊”进化到了“干活”; 其二是JavaClaw,由知名开源项目JobRunr的作者Ronald Dehuysser亲自操刀,硬生生在Java世界里平替了OpenClaw的底层逻辑。
今天我们不念PPT,直接把这俩项目的底裤扒掉,看看用Java构建真正的“自驱型AI程序”,到底需要几步。
上篇:RuoYi-AI v3.0 —— 告别“复读机”的三级跳
要理解v3.0有多猛,得先看它踩过了哪些坑。
阶段一:缝合怪时期 早期大家怎么玩AI?前端画个框,后端透传一下接口。用户发问,大模型回答。除了能说话,它对企业毫无价值——看不到公司内部的报表,也点不动任何按钮。这就是个复读机。
阶段二:外挂大脑时期 后来RAG(检索增强)和MCP(模型上下文协议)火了。大模型终于能翻阅企业知识库,能调取外部接口了。但痛点依然致命:流程是死的。想让AI查数据->画图表->发邮件,你得用代码把这几个节点死死焊在一起。一旦中间出岔子,或者用户临时改需求,整个流水线直接瘫痪。
阶段三:自驱执行时期(v3.0的答案) RuoYi-AI 3.0直接抛弃了死板的流水线,引入了业界公认的推理-执行闭环(ReAct范式)。
什么是ReAct?把它当成一个懂业务的老员工
别被学术名词吓到,你可以把它想象成一个真实员工的做事逻辑:
-
接活与琢磨:老板让查个数据,员工不会立刻敲键盘,而是先想“我该去哪张表查?需要什么权限?” -
动手尝试:打开数据库客户端,敲SQL。 -
看结果调整:发现报错了,或者字段不对,看一眼报错信息,换个写法继续敲。 -
交付闭环:数据跑通了,整理成Excel交给老板。
在代码层面,这套逻辑被封装进了SupervisorAgent(大管家)和一群专职小弟(SqlAgent、ChartAgent等)的协作中:
// 这不是普通的接口,这是给AI发的“岗位说明书”
public interface SqlAgent {
@SystemMessage("""
你是个资深DBA。
核心原则:先想清楚再动手,看结果再决策,别瞎猜。
""")
@UserMessage("搞定这个需求: {{query}}")
@Agent("资深数据库查询助手...")
String getData(@V("query") String query);
}
// 大管家统筹全局
SupervisorAgent supervisor = AgenticServices.supervisorBuilder()
.chatModel(plannerModel)
.subAgents(skillsAgent, searchAgent, sqlAgent, chartGenerationAgent)
// 注入记忆,防止它转头就忘
.chatMemoryProvider(memoryId -> createChatMemory(sessionId))
.build();
实战透传:它到底是怎么“自己干活”的?
场景A:老板说“把chat_model表拉个饼图出来”
如果是以前,你得写个接口查数据,再用ECharts配置项拼JSON。现在呢?你在对话框输入这句话,后台发生了这些暗箱操作:
-
[琢磨] AI判断需要图表,先摸清家底。 -
[动手] 调用 queryAllTables工具,发现真有这张表。 -
[动手] 调用 queryTableSchema看字段结构。 -
[动手] 自动拼装 SELECT vendor, COUNT(*)...并执行。 -
[协同] 数据到手,大管家直接把活丢给 ChartAgent,生成ECharts配置。 -
[交付] 页面直接渲染出饼图。
全程0行业务代码,完全靠AI根据上下文自主决策调用哪个工具。
场景B:用Python技能造Excel
这里有个极为精妙的设计——Skills系统。RuoYi-AI不需要你写Java代码去集成POI,它直接让AI写Python脚本!
// 技能助手:它本身不干活,它是个“包工头”
public interface SkillsAgent {
@SystemMessage("""
你是个文档处理包工头。手下有处理docx、pdf、xlsx的兄弟。
干活前,必须先调用 activate_skill 把人叫来。
""")
@UserMessage("{{query}}")
String process(@V("query") String query);
}
当你说“做个工资表”,AI会先激活xlsx技能,然后自己生成openpyxl的Python代码,在沙箱里执行完,直接把文件链接甩给你。这就是“延迟加载”的威力——平时不占Token,用到时再拉起。
⚠️ 避坑指南:这种让AI直接跑Shell脚本的方式很爽,但也极其危险。千万别把这套直接暴露在公网,务必做好容器隔离,否则黑客一句“rm -rf /”就能让你重新装系统。
下篇:JavaClaw —— 用Spring思维重塑AI骨架
如果说RuoYi-AI是拿来做企业级落地的,那JobRunr大佬写的JavaClaw,则是一份写给Java开发者的“AI原生应用教科书”。
它没用任何偏门技术,纯纯的 Spring Boot 4 + Spring AI 2 + JobRunr。但正是这种“正统”,让它成了拆解Agent原理的最佳标本。
一句话看透本质:模型是引擎,代码是底盘
HashiCorp的创始人提过一个概念叫“载体工程”,套用在JavaClaw上再合适不过:
你不是大模型,你就是造底盘的。
LLM再聪明,也只是个V8发动机。你得给它接上油管、装上方向盘、配上刹车片,它才能变成一辆能上路的跑车。JavaClaw干的事,就是用Spring生态造了一套极其优雅的底盘。
核心解剖:没有while循环的“心跳机制”
看开源项目,直接找主循环。但你在JavaClaw里翻遍代码,绝对找不到一个while(true)去控制AI的思考与行动。
为什么?因为它用的是Spring AI最精髓的Advisor拦截器链。
chatClientBuilder
.defaultAdvisors(new SimpleLoggerAdvisor()) // 最外层:监控探头
.defaultAdvisors(
ToolCallAdvisor.builder().build(), // 中间层:变速箱(执行工具)
MessageChatMemoryAdvisor.builder(chatMemory).build() // 最内层:记忆中枢
);
这其实是个套娃结构:
-
记忆中枢在底层,负责调用前把历史聊天记录塞进去,调用后把新对话存下来。 -
变速箱在中间,它盯紧大模型的输出。如果大模型说“我要调用某个工具”,它立马截停,执行对应的Java @Tool方法,把结果再塞回给大模型,逼着大模型继续想。 -
这个过程自动递归,直到大模型觉得“活干完了”,输出纯文本为止。
这就是ReAct在Java中的最优解——不写死循环,用声明式的管道拦截代替命令式的代码控制。极度Spring,极度优雅。
为什么任务管理不用数据库?
这是我看完源码最意外的点。做任务调度,不上MySQL,不用Redis,居然直接写本地Markdown文件!
---
task: 调研 Spring AI 最新版本特性
createdAt: 2026-04-10T10:00:00Z
status: todo
---
初看很土,但细品绝了。对于这种单机版的个人AI助手,文件系统的“人机共读”属性是数据库给不了的。你可以直接用VS Code打开那个.md文件,看AI把它拆解成了什么样子,甚至你能手动把状态改成completed。你跟AI看的是同一份实体文件,这种掌控感是黑盒数据库做不到的。
技能弹药匣与万能插座
技能:在workspace/skills/下丢个.md文件,AI就自动学会了一门新手艺。为了防止几百个技能把大模型的上下文窗口撑爆,它搞了个“目录机制”——平时只把技能名字加载进去,等真要用到了,才把具体的指令文档拉到内存里。
MCP(Model Context Protocol):被称为AI界的USB-C。JavaClaw直接把这个协议接入了Spring Boot。你可以通过配置文件接外部工具,甚至能在聊天时让AI动态去拉起一个新的MCP服务。改完配置不用重启整个服务,它有个监听器会自动重载Spring上下文(虽然粗暴,但对个人工具来说足够好用)。
彩蛋:白嫖Claude Code的凭证
如果你电脑上装了Claude Code,JavaClaw有个极其骚的操作:在配置API Key的地方填上<claude-code-bearer-token>,它就会自动去你的系统钥匙串里偷Claude Code的OAuth鉴权。直接省去了自己去Anthropic官网申请Key的麻烦。
终局思考:Javaer的反击战
把这两个项目放在一起看,你会发现Java社区正在走出一条不同于Python的Agent之路。
| 对比维度 | RuoYi-AI v3.0 | JavaClaw |
|---|---|---|
| 核心定位 | 拿来即用的企业级数字员工框架 | 搞懂底层逻辑的极客教科书 |
| 编排逻辑 | Supervisor多Agent协同,适合复杂业务 | ChatClient单链路深度流转,轻量敏捷 |
| 状态与记忆 | 依赖常规中间件,偏传统稳重型 | 拥抱文件系统与YAML,追求极致透明度 |
| 扩展方式 | Java硬编码工具类 + Skills动态脚本 | 约定大于配置,丢个MD文件或加个Bean即可 |
Python有极致的灵活性,TS有庞大的前端生态,但Java有企业级应用最看重的“确定性”。当别人还在用脚本语言写玩具时,Spring AI的@Tool注解、JobRunr的后台调度、Advisor的强类型拦截,已经为AI应用搭起了一座钢铁大厦。
大模型的下半场,拼的不再是“谁能写出最花的Prompt”,而是“谁能用工程化的手段,把大模型不可控的创造力,关进安全、可观测、可审计的笼子里”。
从这个角度看,RuoYi-AI和JavaClaw,仅仅是Java反击的开始。
附:多语言Agent生态版图(截至发文) 除了文中提到的Java双雄,目前各语言阵营的排位如下:
TS/JS:OpenClaw(霸主,349k+ Star)与NanoClaw(轻量化) Rust:内卷最严重,IronClaw(强调安全沙箱)、OpenCrust(单文件16MB)、MicroClaw三足鼎立 Go:GoClaw主打高并发多租户隔离 **C#**:微软官方下场维护Windows原生套件 Python:CowAgent领跑,但正面临其他语言的强力围剿
本文由 mdnice 多平台发布
更多推荐


所有评论(0)