作为一名深耕Java生态多年的开发者,你是否也曾羡慕Python程序员在AI领域的游刃有余?别急,2026年的春天,Java终于迎来了一场漂亮的翻身仗。Google开源的Gemma 4模型,搭配LangChain4j和Ollama,让你用Maven几行配置就能在本地跑起大模型。本文手把手教你实现,让Java应用像调用Spring Bean一样丝滑调用AI。
为什么Java程序员不再需要“AI自卑”
“AI开发必须用Python”这句话,曾让无数Java开发者感到焦虑。但技术生态正在悄然改变。Google DeepMind开源的Gemma 4系列模型(从2B到31B四个版本),采用Apache 2.0许可证,完全商用友好。其中26B的MoE版本尤为惊艳——仅激活4B参数,就能媲美传统20B模型的效果,且显存需求更低。
更重要的是,Ollama对Gemma 4的官方支持,意味着Java开发者无需处理复杂的模型加载逻辑。结合成熟的LangChain4j框架,我们完全可以在Java生态内闭环解决AI需求,无需引入Python或C++。这对于追求稳定性和企业级架构的团队来说,简直是天赐良机。
技术选型:为什么LangChain4j比Spring AI更合适?
Spring AI固然是官方亲儿子,但截至2026年初,其在本地模型部署方面的成熟度仍不及LangChain4j(LC4j)。LC4j的优势体现在:
- 模型支持丰富:从OpenAI、Anthropic到Ollama、LocalAI,甚至Docker Model Runner,一应俱全。
- 社区活跃:GitHub Star数持续攀升,文档质量远超Spring AI。
- Spring Boot集成完美:有专门的starter,写法与Spring AI几乎一致,迁移成本极低。
最关键的是,LC4j对Ollama的支持是无缝的。而Ollama,是目前本地运行Gemma 4最省心的方案——它就像“模型快递站”,自动下载模型并启动HTTP服务(默认端口11434),等着Java程序来取件。
⚙️ 环境准备:5分钟搞定Ollama与Gemma 4
1. 安装Ollama
Mac/Linux用户直接在终端执行安装命令:
curl -fsSL https://ollama.com/install.sh | sh
Windows用户前往官网下载安装包,一路“下一步”即可。
2. 拉取Gemma 4模型
建议先从4B版本开始试水(大多数笔记本8-16GB显存即可):
ollama pull gemma4:4b
如果你想体验MoE版本的“以小博大”:
ollama pull gemma4:26b
⚠️ 首次拉取需要下载数GB文件,建议趁喝咖啡或与产品经理“友好交流”时进行。
3. 验证服务
ollama run gemma4:4b
如果看到交互式命令行,输入“你好”测试中文回应。按Ctrl+D退出。
Maven配置:三行依赖打通AI通道
打开你的Spring Boot项目(Java 17+),在pom.xml中加入:
dev.langchain4j
langchain4j-spring-boot-starter
1.4.0
仅两个依赖,版本对齐即可。没有Python的conda环境、没有CUDA版本匹配、没有PyTorch与TensorFlow的“爱恨情仇”。这就是Java生态的魅力——约定大于配置,稳定压倒一切。
代码实战:比写Controller还简单
配置文件
在application.properties中设置:
langchain4j.ollama.chat-model.base-url=http://localhost:11434
langchain4j.ollama.chat-model.model-name=gemma4:4b
langchain4j.ollama.chat-model.temperature=0.7
langchain4j.ollama.chat-model.timeout=PT120S
冷启动可能较慢,timeout建议设120秒以上,避免SocketTimeoutException。
定义AI服务接口
LC4j最骚的操作:只需定义接口,实现由框架自动生成:
import dev.langchain4j.service.SystemMessage;
import dev.langchain4j.service.spring.AiService;
@AiService
public interface JavaCodeAssistant {
@SystemMessage("你是一位资深的Java架构师,拥有15年企业级开发经验。回答问题时请给出具体的代码示例,并解释最佳实践。")
String ask(String question);
}
@SystemMessage 设定AI“人设”,@AiService 让Spring自动生成实现类。这种声明式编程,比Spring Data JPA还爽。
Controller层调用
@RestController
@RequestMapping("/api/ai")
public class AIController {
@Autowired
private JavaCodeAssistant assistant;
@GetMapping("/ask")
public ResponseEntity ask(@RequestParam String question) {
String answer = assistant.ask(question);
return ResponseEntity.ok(answer);
}
}
启动应用,浏览器访问:
http://localhost:8080/api/ai/ask?question=如何用Java 21的虚拟线程优化高并发场景?
Gemma 4会为你写出从ExecutorService到StructuredTaskScope的完整代码。此时,你可以截图发给Python算法同事:“看,Java也能本地跑大模型!”
进阶玩法:RAG让AI读懂你的代码库
如果想让AI帮你改bug、写注释,需要RAG(检索增强生成)。原理是给AI配一个“外接大脑”——将代码库切碎存入向量数据库,提问时先检索相关片段再喂给模型。LC4j内置内存向量存储,测试极方便:
import dev.langchain4j.data.document.parser.TextDocumentParser;
import dev.langchain4j.store.embedding.inmemory.InMemoryEmbeddingStore;
import dev.langchain4j.rag.content.retriever.EmbeddingStoreContentRetriever;
import dev.langchain4j.data.document.Document;
import dev.langchain4j.data.document.loader.FileSystemDocumentLoader;
import static dev.langchain4j.data.document.splitter.DocumentSplitters.recursive;
// 加载你的代码文件
List documents = FileSystemDocumentLoader.loadDocuments("/path/to/your/src", new TextDocumentParser());
// 创建内存向量库(生产环境换成Chroma或Milvus)
InMemoryEmbeddingStore embeddingStore = new InMemoryEmbeddingStore<>();
// 分割并入库
EmbeddingStoreIngestor ingestor = EmbeddingStoreIngestor.builder()
.documentSplitter(recursive(500, 0))
.embeddingStore(embeddingStore)
.build();
ingestor.ingest(documents);
// 在Assistant里加上ContentRetriever
@Bean
JavaCodeAssistant createAssistant(ChatLanguageModel model) {
return AiServices.builder(JavaCodeAssistant.class)
.chatLanguageModel(model)
.contentRetriever(EmbeddingStoreContentRetriever.from(embeddingStore))
.build();
}
现在,你可以问:“UserService类是干嘛的?” AI会先检索UserService.java内容,再结合推理能力给出解释。这就像给新员工配了一位24小时在线、永不疲倦的技术导师。
[AFFILIATE_SLOT_1]性能调优:让Gemma 4在你的笔记本上飞起来
本地跑大模型,最怕“一核有难,八核围观”。优化策略如下:
Ollama侧优化
- 使用量化版本(如Q4_K_M):
ollama pull gemma4:4b-q4_0
export OLLAMA_NUM_PARALLEL=1
export OLLAMA_MAX_LOADED_MODELS=1
Java侧优化
@Bean
ChatLanguageModel chatLanguageModel() {
return OllamaChatModel.builder()
.baseUrl("http://localhost:11434")
.modelName("gemma4:4b")
.timeout(Duration.ofSeconds(120))
.build();
}
若有多张显卡,Ollama会自动分配,Java端无需修改。这就是抽象层的魅力——复杂留给自己,简单留给用户。
⚠️ 避坑指南:血泪教训总结
- 中文乱码:Ollama启动时加
OLLAMA_ORIGINS=*环境变量,或升级到最新版。 - 内存溢出:4B模型需至少8GB内存,26B建议32GB+。16GB硬跑26B可能触发OOM Killer。
- 上下文长度:Gemma 4支持128K-256K上下文,但Ollama默认可能未开大。在Modelfile中调整
num_ctx参数。 - 首次加载慢:应用启动后做“预热调用”:
@EventListener(ApplicationReadyEvent.class)
public void warmUp() {
// 启动时预热,避免用户第一次访问等待
assistant.ask("你好");
}
[AFFILIATE_SLOT_2]
结语:Java+AI的未来已来
Gemma 4 + LangChain4j + Ollama的组合,为Java开发者提供了完全在生态内闭环的AI解决方案。数据安全(本地运行)、成本控制(零API费用)、响应速度(毫秒级延迟),这三张王牌足以说服任何技术领导。别再纠结“要不要转Python搞AI”了,拿起Maven,让Gemma 4在你的Spring Boot应用里跑起来吧。毕竟,能驾驭企业级复杂业务逻辑的程序员,没理由搞不定AI。
浙公网安备 33010602011771号