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