Java家族出列:十款值得關(guān)注的生成式AI工具與框架 原創(chuàng)
Python開(kāi)發(fā)者獨(dú)享AI話語(yǔ)權(quán)的時(shí)代該結(jié)束了。以下十款高人氣Java工具,將助你將AI深度集成到Java應(yīng)用與工作流中。?
盡管Java并非大多數(shù)程序員構(gòu)建AI/ML項(xiàng)目的首選語(yǔ)言——畢竟Python擁有更龐大的AI/ML框架生態(tài)——但Java在AI、機(jī)器學(xué)習(xí)及生成式AI革命中仍占據(jù)重要席位。其技術(shù)優(yōu)勢(shì)和廣泛的生態(tài)系統(tǒng)使其成為許多開(kāi)發(fā)者的首選,尤其是那些偏好嚴(yán)格類(lèi)型定義和JVM高性能的開(kāi)發(fā)者。甚至部分Python愛(ài)好者也會(huì)通過(guò)Jython運(yùn)行代碼以發(fā)揮JVM的速度優(yōu)勢(shì)。
歷經(jīng)Sun與甲骨文三十年的持續(xù)創(chuàng)新,加之OpenJDK項(xiàng)目的持續(xù)演進(jìn),Java在保持向下兼容的同時(shí)不斷引入新特性。這種"穩(wěn)健優(yōu)先"的理念,使得開(kāi)發(fā)者無(wú)需離開(kāi)熟悉的強(qiáng)類(lèi)型Java環(huán)境,即可獲得豐富的AI/ML解決方案。
配合以下工具清單,我們堅(jiān)信Java團(tuán)隊(duì)完全能高效實(shí)現(xiàn)AI集成;換言之,Python開(kāi)發(fā)者獨(dú)享AI話語(yǔ)權(quán)的時(shí)代該結(jié)束了。
1.Spring AI?
多年來(lái),Spring一直是構(gòu)建從Web應(yīng)用到微服務(wù)各類(lèi)項(xiàng)目的可靠基礎(chǔ)。如今Spring AI通過(guò)提供一套組織AI集成流程的抽象層,進(jìn)一步簡(jiǎn)化了將任意類(lèi)型AI引入該生態(tài)的可能。
開(kāi)發(fā)者可通過(guò)Spring AI抽象層快速集成Anthropic、OpenAI等主流提供商的模型,處理聊天補(bǔ)全、內(nèi)容審核等任務(wù)。所有主流商業(yè)及開(kāi)源模型均受支持。
需要本地存儲(chǔ)向量數(shù)據(jù)時(shí),可直接接入Milvus、Pinecone等十余種數(shù)據(jù)庫(kù)。Spring AI會(huì)自動(dòng)處理嵌入向量的序列化/反序列化,確保開(kāi)發(fā)者在操作Java對(duì)象的同時(shí),由數(shù)據(jù)庫(kù)存儲(chǔ)純向量數(shù)據(jù)。
Spring AI還內(nèi)置了多項(xiàng)現(xiàn)代應(yīng)用開(kāi)發(fā)標(biāo)配功能,包括自動(dòng)存儲(chǔ)聊天記錄以便追溯、AI模型元評(píng)估功能以減少/標(biāo)記模型幻覺(jué)等。
2.LangChain4j?
許多應(yīng)用需要將向量數(shù)據(jù)庫(kù)與多個(gè)大語(yǔ)言模型(LLM)整合到統(tǒng)一門(mén)戶。例如生成式AI模型輸出文本后,圖像生成LLM進(jìn)行配圖,且全流程由審核AI監(jiān)控內(nèi)容合規(guī)性。
LangChain4j是JavaScript/Python社區(qū)中極具人氣的LangChain框架的Java實(shí)現(xiàn)版本。它通過(guò)強(qiáng)大的抽象層將不同模型和數(shù)據(jù)存儲(chǔ)統(tǒng)一整合。數(shù)十種模型與數(shù)據(jù)存儲(chǔ)通過(guò)標(biāo)準(zhǔn)化接口捆綁,共同構(gòu)成開(kāi)發(fā)中樞。
3.Deeplearning4J?
面對(duì)AI分類(lèi)任務(wù)的Java開(kāi)發(fā)者,可求助于Eclipse Deeplearning4J(DL4J)生態(tài)。該框架支持廣泛的機(jī)器學(xué)習(xí)算法,輸入原始數(shù)據(jù)即可輸出調(diào)優(yōu)后的決策模型。
核心引擎libnd4j采用C++編寫(xiě),確保核心ML原語(yǔ)的高效執(zhí)行。通過(guò)nd4j(數(shù)值計(jì)算)和Samediff(自動(dòng)微分)兩大模塊、NumPy以及TensorFlow/PyTorch的可鏈接操作實(shí)現(xiàn)算法。數(shù)據(jù)流則由Apache Spark負(fù)責(zé)定義。
盡管框架統(tǒng)一使用Java接口,但Deeplearning4J亦支持多語(yǔ)言實(shí)驗(yàn)——Kotlin、Scala等JVM語(yǔ)言可直接交互,Python算法可通過(guò)Python4j運(yùn)行。開(kāi)源項(xiàng)目文檔提供了豐富示例。
4.Apache Spark MLib?
處理大規(guī)模數(shù)據(jù)集的數(shù)據(jù)科學(xué)家長(zhǎng)期依賴Spark這一Apache項(xiàng)目,而MLlib正是其專為機(jī)器學(xué)習(xí)算法優(yōu)化的擴(kuò)展層。
數(shù)據(jù)可存儲(chǔ)于任何Hadoop風(fēng)格存儲(chǔ)系統(tǒng)。算法可以用任何一種主要語(yǔ)言進(jìn)行編碼。Java、Scala或任何以JVM為中心的語(yǔ)言均可支持。此外,Spark用戶也添加了膠水代碼來(lái)使用Python或R,借此享受這兩種語(yǔ)言在數(shù)據(jù)分析領(lǐng)域的優(yōu)勢(shì)。
MLlib的核心吸引力在于預(yù)置了決策樹(shù)、聚類(lèi)、交替最小二乘等經(jīng)典算法。像大量矩陣的奇異值分解這樣的大型計(jì)算可以分布在多臺(tái)機(jī)器上,在極大提升性能的同時(shí),開(kāi)發(fā)者甚至無(wú)需編寫(xiě)大量代碼。Spark的迭代式流水線設(shè)計(jì),亦使得MLlib速度較MapReduce快百倍。
5.Testcontainers?
多數(shù)LLM運(yùn)行在Docker容器中,因此容器管理工具也非常重要。Testcontainers是開(kāi)源的容器生命周期管理庫(kù),可輕松啟動(dòng)/關(guān)閉容器并管理IO通道,是集成LLM的最簡(jiǎn)方案。其預(yù)置模塊還支持?jǐn)?shù)據(jù)庫(kù)、消息隊(duì)列等常見(jiàn)組件的快速部署。
6.GraalPy?
從名稱上看,GraalPy似乎專為Python設(shè)計(jì),但實(shí)則不然。GraalPy是優(yōu)化后的Python3嵌入版本,可在JVM內(nèi)高效運(yùn)行Python代碼。Java開(kāi)發(fā)者可借此利用全部Python生態(tài),且項(xiàng)目宣稱保持著JVM內(nèi)Python的執(zhí)行速度紀(jì)錄。作為GraalVM項(xiàng)目的一部分,GraalPy旨在簡(jiǎn)化虛擬環(huán)境中的技術(shù)棧部署。
7.Apache OpenNLP?
文本學(xué)習(xí)離不開(kāi)大量預(yù)處理任務(wù):清除排版指令、分段、分塊等。Apache OpenNLP提供基礎(chǔ)算法構(gòu)建ML基礎(chǔ),涵蓋從分詞到句法分析的全流程。
其工具涵蓋了從低級(jí)分割和令牌化、再到高級(jí)解析的各個(gè)領(lǐng)域。語(yǔ)言檢測(cè)與命名實(shí)體提取等附加功能可以根據(jù)需要隨時(shí)部署。OpenNLP的JAR文件中直接提供超過(guò)32種語(yǔ)言的模型,開(kāi)發(fā)者也可以從零訓(xùn)練自己的模型。
這款工具與Java生態(tài)系統(tǒng)集成良好。UIMA及Solr等多個(gè)項(xiàng)目已經(jīng)在利用OpenNLP來(lái)解鎖自然語(yǔ)言文本中的模式。與Maven和Gradle的集成也使其啟動(dòng)變得格外簡(jiǎn)單。
8.Neo4j?
當(dāng)應(yīng)用需要檢索增強(qiáng)型(RAG)數(shù)據(jù)存儲(chǔ)時(shí),圖數(shù)據(jù)庫(kù)Neo4j就成了絕佳解決方案。其Java基礎(chǔ)使其能輕松整合RAG應(yīng)用與圖數(shù)據(jù)庫(kù),提供統(tǒng)一的GraphRAG存儲(chǔ)方案。
9.Stanford CoreNLP?
斯坦福NLP團(tuán)隊(duì)開(kāi)發(fā)的CoreNLP提供另一套NLP工具鏈,可處理文本分割、標(biāo)準(zhǔn)化(如數(shù)字/日期)等任務(wù)。
開(kāi)發(fā)者對(duì)其高精度預(yù)置模型(如情感分析、指代消解)和高級(jí)解析算法普遍贊賞有加。該庫(kù)的高級(jí)功能也降低了復(fù)雜解析算法與策略的實(shí)現(xiàn)門(mén)檻。CoreNLP支持九大主要語(yǔ)言,且可與Gradle/Maven輕松集成。
10.Jllama?
在某些特定場(chǎng)景下,依托本地可控JVM運(yùn)行模型往往較調(diào)用遠(yuǎn)程云API更具優(yōu)勢(shì),例如硬件成本低、隱私安全可控。Jllama還可加載Gemma、Llama、Qwen、Granite等開(kāi)源模型進(jìn)行推理,并支持聊天、提示補(bǔ)全、OpenAI API兼容等功能。
項(xiàng)目代碼利用到一系列最新Java特性,比如Vector API和支持simd的擴(kuò)展,這些擴(kuò)展可以加速LLM推理的并行執(zhí)行。其代碼還將工作負(fù)載劃分為多個(gè)部分,并將其分布在集群中的可用計(jì)算資源之上。
原文標(biāo)題:??10 Java-based tools and frameworks for generative AI??,作者:Peter Wayner
