大模型狂飙两年,如果在你眼里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?把它当成一个懂业务的老员工

别被学术名词吓到,你可以把它想象成一个真实员工的做事逻辑:

  1. 接活与琢磨:老板让查个数据,员工不会立刻敲键盘,而是先想“我该去哪张表查?需要什么权限?”
  2. 动手尝试:打开数据库客户端,敲SQL。
  3. 看结果调整:发现报错了,或者字段不对,看一眼报错信息,换个写法继续敲。
  4. 交付闭环:数据跑通了,整理成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() // 最内层:记忆中枢
    );

这其实是个套娃结构:

  1. 记忆中枢在底层,负责调用前把历史聊天记录塞进去,调用后把新对话存下来。
  2. 变速箱在中间,它盯紧大模型的输出。如果大模型说“我要调用某个工具”,它立马截停,执行对应的Java @Tool 方法,把结果再塞回给大模型,逼着大模型继续想。
  3. 这个过程自动递归,直到大模型觉得“活干完了”,输出纯文本为止。

这就是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领跑,但正面临其他语言的强力围剿
alt

本文由 mdnice 多平台发布

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐