Py学习  »  Python

EasyAi:让 Java 程序员挺直腰杆做 AI,不用在 Python 门口罚站

码流笔记 • 18 小时前 • 25 次点击  

EasyAi:让 Java 程序员挺直腰杆做 AI,不用在 Python 门口罚站

告别“AI 必须从 Python 开始”的刻板印象。一个原生 Java、零第三方依赖、Maven 一键引入的 AI 算法框架,正在给 Java 开发者补上一条很实用的路。


你的痛,我懂

场景一。

老板走过来说:“咱们系统加个人脸识别吧。”

你打开搜索引擎,扑面而来一堆 Python 项目、模型环境、依赖版本、显卡配置。

再看看公司那台 8 核 16G 的老服务器。

它沉默。

你也沉默。

场景二。

团队清一色 Java 程序员,业务系统全是 Spring Boot。

现在要做一个目标检测需求,大家硬着头皮拆出一套 Python 推理服务。

然后就是接口调用、服务部署、模型版本对齐、日志排查、线上联调。

本来只是想识别一张图片。

最后像是在给系统加一个外地亲戚。

麻烦。

所以今天这个项目,我觉得 Java 程序员可以认真看看:

EasyAi,一个 Dromara 社区下的原生 Java 人工智能算法框架。

它做的事很直接:

让 Java 程序员,用 Java 的方式,写 AI。


EasyAi 不是“大模型接口套壳”

现在很多项目一说自己是 AI,最后打开代码一看:

调接口。

拼 Prompt。

包一层 Controller。

然后起个很热闹的名字。

EasyAi 不是这个路子。

它不是某个大模型 API 的 Java 包装层,而是一个原生 Java AI 算法框架。

官网文档里写得很明确:EasyAi 无任何依赖,可以 Maven 一键引入 Java 项目,不需要额外环境配置。

项目当前文档版本是 V1.6.5。

接入方式也很 Java:


  org.dromara.easyai
  easyAi
  1.6.5

这段依赖一出来,Java 程序员就舒服了。

不用先装 Python。

不用先配一堆环境。

不用先把业务系统拆成“Java 写业务,Python 跑模型”。

先引入。

再开干。

这就是 EasyAi 最讨喜的地方。


它不是玩具,能力是分层的

我看完项目和官方文档后,感觉 EasyAi 不是一个只给你展示效果图的 demo。

它大概可以分成三层。

第一层:封装好的应用能力。

比如图像目标检测、图像抠图、人脸识别相关能力,以及基于 EasyAi 封装的智能客服项目 sayOrder。

这些适合想先跑起来的人。

你不一定要一开始就研究底层网络,先看它怎么处理样本、怎么训练、怎么识别、怎么接进 Java 服务。

第二层:中层算法能力。

源码里能看到 yolo、unet、resnet、transFormer、naturalLanguage、randomForest、recommend、regressionForest、pso 等模块。

这说明它不是只停在“调用现成服务”。

它确实在把一批 AI 算法能力放进 Java 工程里。

第三层:底层数学和工程基础。

比如矩阵运算、激活函数、神经网络管理器、图像三通道矩阵、求导/反向传播相关工具。

这些东西不是每个业务开发都要马上碰。

但它们决定了一个框架有没有继续往下做的空间。

你可以把 EasyAi 理解成一张工作台:

上层能力直接用,中层算法按需调,底层工具留给真正想深挖的人。


三个让 Java 程序员心动的点

第一,真的轻。

EasyAi 的主包没有第三方依赖。

这点对很多企业项目很重要。

因为现实里不是每个团队都有算法平台,也不是每台服务器都有显卡,更不是每个业务系统都适合再挂一套 Python 推理服务。

如果只是做垂直场景的小微模型,Java 项目里直接跑,会少很多工程摩擦。

第二,它盯的是业务小模型。

EasyAi 官方文档反复提到一个方向:让开发者根据自身业务,开发符合自己业务的小微模型。

这个定位很实在。

不是每家公司都要造通用大模型。

更多公司需要的是:

识别货架上的商品。

判断图片里有没有某类物体。

把用户咨询分到正确的业务类型。

从一句话里抓出时间、地点、诉求。

做一个只懂自己业务的智能客服。

这些问题不一定需要巨大的模型。

但它们需要和业务系统靠得很近。

而 Java 的主场,恰好就是业务系统。

第三,CPU 能跑,GPU 也留了口子。

EasyAi 默认就是 Java 依赖引入。

如果你有 NVIDIA 显卡,官方文档也提供 CUDA 12.0.0 扩展包。

注意,这个是扩展,不是前置条件。

扩展依赖类似这样:


  org.dromara.easyai.extensions
  easyai-extensions-cuda-12.0.0
  ${CUDA扩展版本}
  ${平台架构}

文档里也说明了版本对应关系:EasyAI 版本大于等于 1.5.4 时,对应 CUDA 扩展版本 1.0.1。

这就比较灵活。

没有显卡,先跑小模型。

有显卡,再考虑训练加速。


来点实在的代码:FastYolo 怎么跑?

你给我一张图,我能不能在 Java 里做目标检测?

EasyAi 文档里给出的路线是这样的。

先准备图像检测配置:

YoloConfig yoloConfig = new YoloConfig();

// 示例:具体参数要根据图片尺寸、目标大小、类别数量调整
yoloConfig.setTypeNub(3);
yoloConfig.setWindowWidth(120);
yoloConfig.setWindowHeight(120);
yoloConfig.setShowLog(true);

然后初始化 FastYolo:

FastYolo fastYolo = new FastYolo(yoloConfig);

训练阶段,准备好样本标注集合:

List yoloSamples = new ArrayList<>();

// yoloSamples 里需要放入标注好的训练样本
// 每个样本包含图片信息和目标框标注

// true:训练类别网络
fastYolo.toStudy(yoloSamples, null, true);

YoloModel typeModel = fastYolo.getModel();

// 保存 typeModel 为 JSON,下一步再加载后训练位置网络

文档中特别提醒:FastYolo 里有类别网络和位置网络,所以训练要分两次。

一次训练类别。

一次训练位置。

识别阶段,服务启动时初始化并注入训练好的模型:

YoloConfig yoloConfig = new YoloConfig();

// 这里的配置必须和训练时保持一致
FastYolo fastYolo = new FastYolo(yoloConfig);

// readYoloModel() 代表你从 JSON 中反序列化出来的 YoloModel
fastYolo.insertModel(readYoloModel());

真正识别图片时,把图片解析成三通道矩阵,再调用 `look`:

ThreeChannelMatrix matrix =
    Picture.getThreeMatrix("D:/images/test.jpg", false);

List boxes = fastYolo.look(matrix, System.nanoTime(), null);

if (boxes != null) {
    for (OutBox box : boxes) {
        System.out.println("类型:" + box.getTypeID());
        System.out.println("位置:x=" + box.getX() + ", y=" + box.getY());
    }
}

这里有几个点要注意:

`FastYolo` 要单例。

识别前要先 `insertModel`。

训练时的配置和线上识别时的配置要一致。

`look` 的 eventID 要在本次识别生命周期里保持唯一,保证线程安全。

这就不是那种“伪代码写得很爽,跑起来全靠猜”的介绍了。

它是一个真实框架会面对的工程细节。


再看自然语言:不是只能做图片

EasyAi 也有自然语言方向。

比如语义分类、关键词抓取、问答训练、基于 TransFormer 的文本处理能力。

如果只是做一个固定业务里的意图识别,它的思路会比较适合。

例如你有一批客服语句:

“我要退款。”

“订单什么时候发货?”

“帮我改一下地址。”

你不一定需要一个通用聊天大模型。

你可能只需要识别用户属于哪个业务意图,再把关键字段抓出来。

EasyAi 生态里的 sayOrder 就是这类方向的封装项目。

它可以分析用户输入的语义,通过 typeID 区分用户意图,并抓取系统关心的关键词。

这种能力放在企业系统里很常见:

工单分类。

售后分流。

客服预处理。

表单自动补全。

内部流程引导。

它不追求“什么都能聊”。

它追求的是:

在你的固定业务里,把用户真正想办的事识别出来。


EasyAi 和 Spring AI 是什么关系?

很多人容易把这两个混在一起。

其实它们不是一类东西。

Spring AI 更像是 AI 集成框架。

它擅长帮你接大模型、接向量库、做 RAG、做 ChatClient、做 Agent 相关集成。

EasyAi 更像是 AI 算法框架。

它强调的是本地小微模型、传统图像/自然语言能力、Java 原生算法实现。

可以这么理解:

维度
EasyAi
Spring AI
核心定位
AI 算法框架
AI 集成框架
主要对象
小微模型、图像/NLP/传统算法
LLM、RAG、Agent、模型 API
运行方式
Java 工程内运行
对接外部模型和基础设施
适合场景
本地识别、业务定制模型、边缘/垂直场景
知识库问答、聊天应用、大模型编排

所以它俩不是敌人。

更像两个不同工种。

一个负责把小模型嵌进业务。

一个负责把大模型接进应用。

真要做复杂系统,完全可以组合起来。

比如 EasyAi 做本地图像预处理,Spring AI 再接大模型做文本解释和流程编排。


写这种项目,最重要的是别吹过头

写开源项目推广文,最怕一激动就写成万能神器。

EasyAi 值得关注,但它不是要替代所有 Python AI 生态。

它更像是给 Java 开发者补上一条路线:

在业务场景明确、模型规模可控、团队主要技术栈是 Java 的情况下,用更低的工程摩擦,把 AI 能力塞进现有系统。

这已经足够有价值。

官方 README 提到的图像检测、图像抠图、seeFace 人脸识别、sayOrder 智能客服,已经能支撑一篇很有看点的文章。

源码里能看到 yolo、unet、transFormer、randomForest、pso、matrixTools 等模块,也能说明它不是一个只会调接口的壳。

CUDA 扩展在官方文档里也有说明,可以作为“可选增强”来写。

这些点都是真材实料。

真实,反而更有说服力。


如果你想试,建议这样开始

第一步:先跑官方 Demo。

不要一上来就研究所有算法。

先看图像检测或者自然语言快速开始。

先让它在你的 Java 工程里跑起来。

第二步:选一个窄场景。

不要上来就做“通用智能客服”。

先做一个很小的问题:

识别某类商品。

判断咨询类型。

抓取一句话里的业务关键词。

给某个流程做分类。

越窄,越容易成功。

第三步:再理解 DIO 模式。

EasyAi 文档里有一个 DIO 开发模式。

数据。

输入。

输出。

训练状态。

执行状态。

这个思路很适合 Java 程序员入门。

它会让你意识到,AI 开发不是玄学。

它也可以被拆成工程流程。


写在最后

过去很长一段时间里,Java 程序员在 AI 领域的处境有点尴尬。

业务系统是 Java 写的。

权限、订单、支付、流程、消息、后台,全是 Java 扛着。

但一涉及“智能”两个字,就好像必须去另一个技术世界拜码头。

EasyAi 想做的事情,其实很朴素:

让 Java 程序员用自己熟悉的方式,在自己熟悉的生态里,解决一部分真实 AI 问题。

不用一上来换语言。

不用一上来配一堆环境。

不用一上来拆一套跨语言服务。

先从 Maven 依赖开始。

先从一个小模型开始。

先从一个业务问题开始。

这就是 EasyAi 最值得关注的地方。

它不是让 Java 程序员去蹭 AI 的热闹。

它是在告诉你:

别只把 AI 当成外部接口。

试着让 AI 能力,长进你的 Java 业务系统里。

项目地址:

https://gitee.com/dromara/easyAi.git

官方文档:

https://www.myeasyai.cn/#/README

案例 Demo:

https://gitee.com/ldp_dpsmax/easy-ai-demo



Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/196725