Spring Boot + JDK 21 + LangChain4j:大模型应用开发实战教程(收藏版,小白也能学会) 本文将带你从零开始通过Spring Boot、JDK 21和LangChain4j框架实现与大模型的交互。涵盖Maven依赖添加、配置、核心概念解析、基础功能实现如AI对话接口、提示词管理、高级功能会话记忆、结构化输出以及RAG实战。适合想要入门AI应用开发的程序员和小白助你快速掌握大模型开发技能。如今AI开发已经深入到各行各业不管在工作中还是找工作的时候掌握AI应用开发的技能都是必不可少的。LangChain4j 是目前 Java 生态中最流行的 LLM大语言模型应用开发框架它简化了与大模型的交互、RAG检索增强生成和工具调用的复杂度。1.准备工作技术版本说明JavaJDK 21利用虚拟线程Project Loom、Record、模式匹配等新特性Spring Boot3.5.9必须支持 Jakarta EE 9与 JDK 21 兼容LangChain4j1.10.0本教程核心框架提供AI应用开发能力构建工具Maven项目依赖管理LLM模型OpenAI / DeepSeek / Ollama / 阿里百炼演示使用支持多种模型提供商2.添加Maven依赖!-- LangChain4j 核心库 -- dependency groupIddev.langchain4j/groupId artifactIdlangchain4j/artifactId version1.10.0/version /dependency !-- 集成阿里云通义千问 (DashScope) -- dependency groupIddev.langchain4j/groupId artifactIdlangchain4j-community-dashscope-spring-boot-starter/artifactId version1.10.0-beta18/version /dependency3.配置spring.application.namelangchain4j server.port8080 # 通义千问 (DashScope) 配置 langchain4j.community.dashscope.chat-model.api-keyxxx langchain4j.community.dashscope.chat-model.model-nameqwen-max langchain4j.community.dashscope.embedding-model.api-keyxxx langchain4j.community.dashscope.embedding-model.model-nametext-embedding-v3“ 提示在生产环境中强烈建议通过环境变量或配置中心如 Spring Cloud Config来管理 API Key避免将敏感信息提交到代码仓库中。”4.LangChain4j 核心概念在开始编码之前理解 LangChain4j 的核心概念至关重要。核心概念英文名称描述与作用常见实现消息Message对话中的基本单元分为用户消息、AI消息、系统消息等。UserMessage,AiMessage,SystemMessage语言模型ChatModel与大模型交互的核心接口负责生成文本。QwenChatModelAI服务AiServicesLangChain4j 的精髓 通过声明式接口定义 AI 的能力自动生成实现类。通过SystemMessage,UserMessage等注解定义会话记忆ChatMemory管理对话历史为 AI 提供上下文实现多轮对话。MessageWindowChatMemory,TokenWindowChatMemory嵌入模型EmbeddingModel将文本转换为向量用于语义搜索和相似度计算。OpenAiEmbeddingModel,DashScopeEmbeddingModel向量存储EmbeddingStore存储和检索文本向量是 RAG 系统的核心。InMemoryEmbeddingStore,PgVectorEmbeddingStore工具Tool允许 AI 调用外部函数或 API扩展其能力如查询数据库、调用网络服务。通过Tool注解定义方法5.基础功能5.1 第一个AI对话接口AI服务接口package com.example.langchain4j.service; import dev.langchain4j.service.SystemMessage; import dev.langchain4j.service.UserMessage; import dev.langchain4j.service.spring.AiService; AiService // 标记这是一个 AI 服务LangChain4j 会自动生成实现类 public interface ChatAssistant { SystemMessage(你是一个友好、专业的AI助手。你的主要任务是用简洁易懂的语言回答用户的问题。) // 系统提示词定义 AI 的角色和行为 String chat(UserMessage String userMessage); // 用户消息方法参数即用户输入 }Controllerpackage com.example.langchain4j.controller; import com.example.langchain4j.service.ChatAssistant; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; RestController publicclass ChatController { privatefinal ChatAssistant chatAssistant; // 构造器注入Spring 自动注入 ChatAssistant 的实现 public ChatController(ChatAssistant chatAssistant) { this.chatAssistant chatAssistant; } GetMapping(/chat) public String chat(RequestParam(value message, defaultValue 你好) String message) { return chatAssistant.chat(message); } }运行测试5.2 管理提示词复杂的系统提示词可以放在resources目录下的文本文件中便于管理。创建提示词文件src/main/resources/system-prompt.txt你是一位资深的Java技术专家和职业导师。 你的目标是帮助Java开发者规划清晰的学习路线提供项目学习建议并给出程序员求职全流程指南包括简历优化、投递技巧等。 请用简洁、鼓励性和专业的语言回答助力用户高效学习与职业发展。 当前时间是{{current_date}}新增一个AI服务使用SystemMessage(fromResource ...)AiService public interface CareerCoach { // 从 resources 目录下的文件读取系统提示词 SystemMessage(fromResource /system-prompt.txt) String coach(UserMessage String userQuestion, V(current_date) String currentDate); }新增一个ControllerRestController publicclass CareerController { privatefinal CareerCoach careerCoach; public CareerController(CareerCoach careerCoach) { this.careerCoach careerCoach; } GetMapping(/coach) public String coach(RequestParam String question) { // 传入当前日期替换提示词中的 {{current_date}} 占位符 return careerCoach.coach(question, java.time.LocalDate.now().toString()); } }测试6.高级功能6.1 会话记忆让 AI 记住之前的对话内容实现多轮连续对话。新建带有记忆的会话接口package com.example.langchain4j.service; import dev.langchain4j.service.MemoryId; import dev.langchain4j.service.SystemMessage; import dev.langchain4j.service.UserMessage; import dev.langchain4j.service.spring.AiService; AiService public interface ChatWithMemoryAssistant { SystemMessage(你是一个友好的聊天机器人。请用自然、流畅的中文与用户交流。) String chat(UserMessage String userMessage, MemoryId String sessionId); // MemoryId 用于区分不同会话 }配置记忆存储package com.example.langchain4j.config; import dev.langchain4j.memory.chat.ChatMemoryProvider; import dev.langchain4j.memory.chat.MessageWindowChatMemory; import dev.langchain4j.store.memory.chat.InMemoryChatMemoryStore; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; Configuration publicclass ChatMemoryConfig { Bean public InMemoryChatMemoryStore chatMemoryStore() { // 使用内存存储会话历史生产环境可替换为 Redis、数据库等 returnnew InMemoryChatMemoryStore(); } Bean public ChatMemoryProvider chatMemoryProvider(InMemoryChatMemoryStore chatMemoryStore) { return memoryId - MessageWindowChatMemory.builder() .id(memoryId) // 设置会话ID用于隔离不同会话的记忆 .maxMessages(10) // 保留最近10条消息5轮对话 .chatMemoryStore(chatMemoryStore) // 使用上面定义的存储 .build(); } }新建Controllerpackage com.example.langchain4j.controller; import com.example.langchain4j.service.ChatWithMemoryAssistant; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; RestController publicclass ChatMemoryController { privatefinal ChatWithMemoryAssistant chatAssistant; public ChatMemoryController(ChatWithMemoryAssistant chatAssistant) { this.chatAssistant chatAssistant; } GetMapping(/chat/memory) public String chatWithMemory(RequestParam String message, RequestParam String sessionId) { // sessionId 用于标识同一个会话例如可以使用UUID或用户ID return chatAssistant.chat(message, sessionId); } }测试6.2 结构化输出让 AI 以 JSON 等结构化格式返回数据便于程序处理。定义返回的数据结构package com.example.langchain4j.dto; public record LearningReport( String level, // 学习阶段初级/中级/高级 String[] strengths, // 优势领域 String[] weaknesses, // 需要改进的领域 String nextStep // 下一步学习建议 ) {}定义AI接口package com.example.langchain4j.service; import com.example.langchain4j.dto.LearningReport; import dev.langchain4j.service.SystemMessage; import dev.langchain4j.service.UserMessage; import dev.langchain4j.service.spring.AiService; AiService public interface StructuredOutputAssistant { SystemMessage(你是一位学习分析师。请根据用户的自我描述生成一份结构化的学习报告。) LearningReport generateReport(UserMessage String userDescription); }创建Controllerpackage com.example.langchain4j.controller; import com.example.langchain4j.dto.LearningReport; import com.example.langchain4j.service.StructuredOutputAssistant; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; RestController publicclass StructuredOutputController { privatefinal StructuredOutputAssistant structuredAssistant; public StructuredOutputController(StructuredOutputAssistant structuredAssistant) { this.structuredAssistant structuredAssistant; } GetMapping(/report) public LearningReport generateReport(RequestParam String description) { return structuredAssistant.generateReport(description); } }测试问题我是一名Java后端程序员学习Java半年了熟悉集合和多线程但对Spring框架和微服务不太了解7.RAG实战7.1 添加maven依赖!-- RAG 相关依赖 -- dependency groupIddev.langchain4j/groupId artifactIdlangchain4j-easy-rag/artifactId version1.10.0-beta18/version /dependency7.2 准备知识库文档在src/main/resources/documents/目录下放入一些 PDF 文档例如Java学习笔记、公司内部文档等。7.3 代码实现创建RAG服务package com.example.langchain4j.service; import dev.langchain4j.community.model.dashscope.QwenChatModel; import dev.langchain4j.community.model.dashscope.QwenLanguageModel; import dev.langchain4j.data.document.Document; import dev.langchain4j.data.document.DocumentSplitter; import dev.langchain4j.data.document.loader.FileSystemDocumentLoader; import dev.langchain4j.data.document.splitter.DocumentByCharacterSplitter; import dev.langchain4j.data.segment.TextSegment; import dev.langchain4j.model.chat.ChatModel; import dev.langchain4j.model.embedding.EmbeddingModel; import dev.langchain4j.model.language.LanguageModel; import dev.langchain4j.rag.content.retriever.ContentRetriever; import dev.langchain4j.rag.content.retriever.EmbeddingStoreContentRetriever; import dev.langchain4j.service.AiServices; import dev.langchain4j.store.embedding.EmbeddingStore; import dev.langchain4j.store.embedding.inmemory.InMemoryEmbeddingStore; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import jakarta.annotation.PostConstruct; import java.nio.file.Path; import java.nio.file.Paths; import java.util.List; Service publicclass RagService { privatefinal ChatModel chatModel; privatefinal EmbeddingModel embeddingModel; private EmbeddingStoreTextSegment embeddingStore; private ContentRetriever contentRetriever; public RagService(QwenChatModel qwenChatModel, EmbeddingModel embeddingModel) { this.chatModel qwenChatModel; this.embeddingModel embeddingModel; } PostConstruct// 在Bean初始化后执行加载文档并构建向量库 public void init() { // 1. 加载文档 Path path Paths.get(src/main/resources/documents); ListDocument documents FileSystemDocumentLoader.loadDocuments(path); // 2. 文本分块 (将大文档切分成小的文本段) DocumentSplitter splitter new DocumentByCharacterSplitter(500, 50); // 每块500字符重叠50字符 ListTextSegment allSegmentsFromCharSplitter new java.util.ArrayList(); for (Document doc : documents) { // 对每个文档进行分割并收集所有片段 ListTextSegment segments splitter.split(doc); allSegmentsFromCharSplitter.addAll(segments); } // 3. 生成向量并存储 (InMemoryEmbeddingStore 存储在内存中) this.embeddingStore new InMemoryEmbeddingStore(); for (TextSegment segment : allSegmentsFromCharSplitter) { embeddingStore.add(embeddingModel.embed(segment).content(), segment); } // 4. 创建内容检索器 (用于根据问题向量检索相关文档片段) this.contentRetriever EmbeddingStoreContentRetriever.builder() .embeddingStore(embeddingStore) .embeddingModel(embeddingModel) .maxResults(3) // 最多检索3个最相关的文档片段 .minScore(0.7) // 相似度阈值低于0.7的片段不返回 .build(); } / * 根据用户问题检索相关文档片段并生成答案 public String chat(String userQuestion) { RagChatAssistant aiService AiServices.builder(RagChatAssistant.class) // 传入自定义接口 .chatModel(chatModel) // 注入底层模型 .contentRetriever(contentRetriever) // 注入检索器 .build(); // 构建代理实例 // 调用代理的 chat 方法AiServices 会自动处理 RAG 逻辑 return aiService.chat(userQuestion); } }package com.example.langchain4j.service; import dev.langchain4j.service.UserMessage; import dev.langchain4j.service.spring.AiService; AiService public interface RagChatAssistant { String chat(UserMessage String message); }创建Controllerpackage com.example.langchain4j.controller; import com.example.langchain4j.service.RagService; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; RestController publicclass RagController { privatefinal RagService ragService; public RagController(RagService ragService) { this.ragService ragService; } / * 智能问答接口 GetMapping(/rag/chat) public String chat(RequestParam String question) { if (question null || question.trim().isEmpty()) { return请输入有效的问题; } // 调用 RAG 服务 return ragService.chat(question); } }测试8.总结最后如果说程序员已经是高薪职业那么干AI的程序员就是高薪中的高薪。现在的市场已经用数据给程序员指明了方向学AI大模型就是冲刺高薪的最优解看着身边越来越多的同行转型大模型、拿到高薪offer很多人心里都动了心但真正的难题来了零基础小白不知道从哪入门有基础的程序员找不到系统学习路径实战项目练手无门面试不知道考什么别慌今天就给大家整理了一份【2026年最新版】AI大模型免费学习资源包覆盖从入门到实战、从理论到面试、从基础到进阶的全流程所有资料均已整理归档无冗余、无套路免费分享给每一位想抓住AI风口的程序员和小白扫码免费领取全部内容1、大模型系统化学习路线2、大模型学习书籍文档3、AI大模型最新行业报告4、大模型项目实战配套源码5、大模型大厂面试真题四阶段精细化学习规划附时间节点可直接照做结合上述资源给大家整理了一份可直接落地的四阶段学习规划总时长约2个月小白可循序渐进程序员可根据自身基础调整节奏高效掌握大模型核心能力快速实现从“入门”到“能落地、能面试”的跨越。第一阶段10天初阶应用该阶段让大家对大模型 AI有一个最前沿的认识对大模型 AI 的理解超过 95% 的人可以在相关讨论时发表高级、不跟风、又接地气的见解别人只会和 AI 聊天而你能调教 AI并能用代码将大模型和业务衔接。大模型 AI 能干什么大模型是怎样获得「智能」的用好 AI 的核心心法大模型应用业务架构大模型应用技术架构代码示例向 GPT-3.5 灌入新知识提示工程的意义和核心思想Prompt 典型构成指令调优方法论思维链和思维树Prompt 攻击和防范…第二阶段30天高阶应用该阶段我们正式进入大模型 AI 进阶实战学习学会构造私有知识库扩展 AI 的能力。快速开发一个完整的基于 agent 对话机器人。掌握功能最强的大模型开发框架抓住最新的技术进展适合 Python 和 JavaScript 程序员。为什么要做 RAG搭建一个简单的 ChatPDF检索的基础概念什么是向量表示Embeddings向量数据库与向量检索基于向量检索的 RAG搭建 RAG 系统的扩展知识混合检索与 RAG-Fusion 简介向量模型本地部署…第三阶段30天模型训练恭喜你如果学到这里你基本可以找到一份大模型 AI相关的工作自己也能训练 GPT 了通过微调训练自己的垂直大模型能独立训练开源多模态大模型掌握更多技术方案。到此为止大概2个月的时间。你已经成为了一名“AI小子”。那么你还想往下探索吗为什么要做 RAG什么是模型什么是模型训练求解器 损失函数简介小实验2手写一个简单的神经网络并训练它什么是训练/预训练/微调/轻量化微调Transformer结构简介轻量化微调实验数据集的构建…第四阶段20天商业闭环对全球大模型从性能、吞吐量、成本等方面有一定的认知可以在云端和本地等多种环境下部署大模型找到适合自己的项目/创业方向做一名被 AI 武装的产品经理。硬件选型带你了解全球大模型使用国产大模型服务搭建 OpenAI 代理热身基于阿里云 PAI 部署 Stable Diffusion在本地计算机运行大模型大模型的私有化部署基于 vLLM 部署大模型案例如何优雅地在阿里云私有部署开源大模型部署一套开源 LLM 项目内容安全互联网信息服务算法备案…扫码免费领取全部内容6、这些资料真的有用吗这份资料由我和鲁为民博士(北京清华大学学士和美国加州理工学院博士)共同整理现任上海殷泊信息科技CEO其创立的MoPaaS云平台获Forrester全球’强劲表现者’认证服务航天科工、国家电网等1000企业以第一作者在IEEE Transactions发表论文50篇获NASA JPL火星探测系统强化学习专利等35项中美专利。本套AI大模型课程由清华大学-加州理工双料博士、吴文俊人工智能奖得主鲁为民教授领衔研发。资料内容涵盖了从入门到进阶的各类视频教程和实战项目无论你是小白还是有些技术基础的技术人员这份资料都绝对能帮助你提升薪资待遇转行大模型岗位。这份完整版的大模型 AI 学习资料已经上传CSDN朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】https://mp.weixin.qq.com/s/2P64VRSHoOz31E2oAT_ZpQ