Java大模型开发实战:Spring AI与LangChain4j技术全景指南

Java大模型开发实战:Spring AI与LangChain4j技术全景指南 Java 开发者这两年的处境有点微妙一方面业务系统里大模型相关的需求越来越多另一方面大部分 AI 教程默认用 PythonSpring 技术栈的人总感觉隔了一层。这次我们直接把这套技术栈拆开讲清楚Spring AI、Spring AI Alibaba、LangChain/LangChain4j、Agent再到本地大模型部署和面试考点一条线串完。先给结论这套体系不虚它是 Java 生态里目前最值得投入的 AI 工程化路线。Spring AI 负责统一接入大模型Spring AI Alibaba 补上国内模型和 Agent 编排能力LangChain4j 解决复杂任务拆解和工具调用再加上本地部署的 Ollama / 微调实践基本覆盖了 Java 后端工程师参与 AI 应用开发所需的全部技能点。本文会用“技术全景图 环境准备 代码接入 功能验证 面试考点 问题排查”的形式展开所有代码示例都给出可运行模板。没有真实实测数据的部分我会标注清楚避免误导。1. 核心能力速览能力项说明技术栈定位Java 后端接入大模型应用的工程化方案集合核心框架Spring AI、Spring AI Alibaba、LangChain4j、Agent 编排大模型接入OpenAI 协议兼容接口、通义千问、DeepSeek 等国内模型、本地 Ollama 部署模型Agent 能力工具调用、任务规划、多 Agent 协作、图编排本地部署Ollama 拉起 7B/14B 量级模型需关注显存占用API 服务Spring Boot 提供 REST 接口支持同步 / 流式返回批量任务通过任务队列 Agent 编排实现多轮批量处理面试核心大模型基础、Prompt、RAG、Function Calling、Agent、LangChain 体系适合人群Java 后端工程师、Spring 技术栈开发者、准备 AI 方向面试的候选人这里要说明本文所有代码均为通用模板具体依赖版本需要按 Spring AI Alibaba 官方文档和你的 Spring Boot 版本调整。不要直接复制后期待一次跑通这不符合 Java 生态的版本管理习惯。2. 适用场景与使用边界2.1 适合谁第一类是企业级 Java 后端工程师。你的项目里可能已经接入了某个大模型 API但调用逻辑散落在 Service 层没有统一封装。Spring AI 的价值就是把模型调用、Prompt 管理、输出解析统一成 Spring 风格配合Service、Configuration这些你已经熟悉的概念直接使用。第二类是准备 AI 方向面试的候选人。现在的 Java 面试不是只问八股文了越来越多的岗位要求理解大模型应用开发。Spring AI Alibaba、LangChain4j、Agent 这些名词会高频出现在 JD 描述里。第三类是希望降低大模型成本的技术负责人。与其每个业务线各接一套模型 SDK不如用 Spring AI 做一层统一抽象模型切换只改配置不改业务代码。2.2 不适合什么场景不适合纯算法岗位。模型训练、调参、提示词工程的深度研究更建议直接学 Python 生态的 PyTorch、HuggingFace TransformersJava 侧的封装解决的是工程接入问题不是模型能力问题。不适合对响应延迟极度敏感的场景。Java 技术栈本身没问题但如果你需要的是微秒级响应的端侧推理那架构上要考虑的就不是框架选型而是纯 C / TensorRT 推理管线。不适合没有模型服务来源的离线环境。如果生产环境不允许访问外部 API也不允许部署本地模型那么任何 AI 技术栈都很难落地。2.3 合规边界无论使用云厂商 API 还是本地部署模型都要注意以下几点调用外部大模型 API 前确认数据合规要求不能把未脱敏的客户隐私数据直接发送到第三方服务。本地部署模型也不能逃避责任训练数据中可能包含有版权或敏感内容使用前需要确认模型的开源协议。Agent 自动调用工具时要限制权限范围避免 AI 自主执行高权限操作。涉及人脸、声音、肖像、版权素材的生成类应用必须有明确授权。3. Java 大模型技术全景图先建立一个全局认知再动手写代码。3.1 基础层大模型本身大模型是理解并生成文本的核心。Java 应用不直接和大模型底层交互而是通过 HTTP 调用模型服务。常见的模型服务来源有三类云厂商 APIOpenAI、通义千问、DeepSeek、智谱等开箱即用但按 token 计费。本地部署Ollama、vLLM、Xinference 等工具拉起开源模型数据不出内网但需要 GPU 资源。企业私有化模型公司内部训练的模型通过内部网关暴露 OpenAI 兼容接口。对于 Java 后端来说不管模型部署在哪接入方式基本一致只要模型服务暴露了 OpenAI 兼容的 HTTP 接口Spring AI 都可以通过统一配置接入。3.2 框架层Spring AI 与 Spring AI AlibabaSpring AI 是 Spring 官方推出的大模型应用开发框架对标 Python 生态的 LangChain。它提供ChatClient、PromptTemplate、OutputParser、EmbeddingModel等核心抽象开发者可以用类似 JdbcTemplate 的方式调用大模型。Spring AI Alibaba 是阿里巴巴在 Spring AI 基础上做的企业级扩展。它的价值点在于适配国内模型服务通义千问、DeepSeek、DashScope。提供更完整的 Agent 编排能力包括动态规划、工具调用、图执行。提供spring-ai-alibaba-graph这类图编排组件适合多步骤复杂任务。绑定阿里云基础服务方便配合函数计算、LogService 使用。Spring AI 和 Spring AI Alibaba 的关系不是二选一而是基础库与扩展包的关系。如果你用通义千问或者需要 Agent 能力直接引入 spring-ai-alibaba 即可它内部会依赖 Spring AI 核心。3.3 框架层LangChain 与 LangChain4jLangChain 是 Python 生态的 AI 应用框架它首创了很多概念Chain、Agent、Retriever、Tool、Memory。Java 开发者学 LangChain 主要是学概念和设计思路因为实际项目里你大概率不会在 Java 应用中直接调 Python 的 LangChain。Java 生态对应的实现是 LangChain4j它把 LangChain 中的 Chain、Agent、Tool、RAG 等模式用 Java 重写了一遍。对 Java 工程师来说LangChain4j 和 Spring AI 有部分功能重叠但侧重点不同Spring AI 更强调 Spring Boot 原生集成配置化程度更高。LangChain4j 更接近 Python 生态的设计概念更贴近 LangChain。两者都支持 ChatModel、EmbeddingModel、Tool Calling也都有各自生态的扩展。如果你的团队已经熟悉 LangChain 的设计理念可以选 LangChain4j如果你希望代码风格完全融入 Spring 约束选 Spring AI 或 Spring AI Alibaba 更顺手。3.4 Agent 层Agent 是 2025 年 Java 面试最热的概念。它本质上是一个由大模型驱动的任务执行器模型不仅生成文本还会根据任务自主决定调用哪些工具、按什么顺序调用、如何根据结果调整下一步。和传统代码逻辑相比Agent 的核心差异在于控制流不再由开发者硬编码而是由模型在推理过程中动态决定。这也是 Agent 强大和风险并存的点你无法 100% 预测 Agent 的每一步操作所以工具权限、执行日志、人工复核都不可或缺。当前 Agent 的实现形态包括ReAct 模式模型先思考Reasoning再行动Act循环直到完成。Function Calling模型输出结构化工具调用参数由程序执行函数再把结果返回给模型继续推理。多 Agent 协作多个 Agent 各有角色分工通过消息传递协作完成任务。Graph 编排把任务抽象成有向无环图节点是 Agent 或工具边是流转条件适合稳定流程。这些模式在 Spring AI Alibaba 和 LangChain4j 中都有对应实现。4. 本地部署环境准备4.1 通用前置检查在写代码之前先确认本机环境。Java AI 应用开发和普通 Spring Boot 开发相比多了一个前提你需要有一个可访问的大模型服务要么是云 API 的 Key要么是本地部署模型的端口。环境清单如下项目要求说明JDKJDK 17Spring Boot 3.x 强制要求 JDK 17Maven3.8项目管理需要配置阿里云镜像加速IDEIDEA 2023需要支持 Spring Boot 3.x 注解处理模型服务API Key 或本地 Ollama根据开发阶段选择GPU可选本地部署 7B 模型建议 8G 以上显存实际占用不定磁盘30G 以上本地部署模型文件较大4.2 本地大模型服务Ollama本地模型部署最省心的方式是 Ollama。它不是一个 Java 组件而是独立运行的模型管理工具通过 HTTP 端口暴露 APISpring AI 可以直接接入。安装完成后启动服务并拉取模型# 拉取 Qwen 2.5 7B 模型也可以按需替换 ollama pull qwen2.5:7b # 启动 Ollama 服务 ollama serve启动后可以通过 curl 验证模型服务是否可用curl http://localhost:11434/api/generate -d { model: qwen2.5:7b, prompt: 你好请简单介绍一下你自己, stream: false }如果返回了 JSON 且包含response字段说明本地模型服务正常。注意拉取模型的速度取决于网络情况非中国大陆网络环境可能需要配置镜像源下载请以 Ollama 官方文档说明为准。从社区常见经验来看7B 量级量化模型在 8G 显存显卡上可以运行实际显存占用会随上下文长度和并发请求波动。14B 或更大模型建议 16G 以上显存。没有 GPU 的机器也可以用 CPU 跑但生成速度会明显变慢。这个结论不针对任何具体显卡型号实际表现要你做本地观察。4.3 Spring Boot 项目初始化创建 Spring Boot 项目建议用 Spring Initializr 生成基础骨架依赖选择Web、Lombok即可AI 相关依赖稍后单独引入。# 使用 Spring Initializr 生成工程 curl https://start.spring.io/starter.zip \ -d namejava-ai-demo \ -d groupIdcom.example \ -d artifactIdjava-ai-demo \ -d dependenciesweb,lombok \ -d javaVersion17 \ -o java-ai-demo.zip解压后用 IDEA 打开确认 Maven 能正常拉取依赖。如果网络拉取慢在~/.m2/settings.xml中配置阿里云镜像。5. Spring AI 快速接入5.1 引入依赖Spring AI 依赖分为核心包和模型适配包下面是通用模板。由于版本号迭代较快具体版本请以 Spring AI 官方文档为准这里只给出依赖骨架dependencies !-- Spring AI 核心 -- dependency groupIdorg.springframework.ai/groupId artifactIdspring-ai-core/artifactId /dependency !-- 接入 OpenAI 兼容接口 -- dependency groupIdorg.springframework.ai/groupId artifactIdspring-ai-openai/artifactId /dependency !-- 接入 Ollama 本地模型 -- dependency groupIdorg.springframework.ai/groupId artifactIdspring-ai-ollama/artifactId /dependency /dependenciesSpring AI 的依赖管理通常通过 BOMBill of Materials控制版本你需要额外引入dependencyManagement dependencies dependency groupIdorg.springframework.ai/groupId artifactIdspring-ai-bom/artifactId version${spring-ai.version}/version typepom/type scopeimport/scope /dependency /dependencies /dependencyManagement这里不写死具体版本号因为 Spring AI 的版本迭代一直很快你要根据自己项目的 Spring Boot 版本选择兼容的 Spring AI 版本。应用配置spring: ai: ollama: base-url: http://localhost:11434 chat: options: model: qwen2.5:7b temperature: 0.7如果使用云端 API则配置 API Key 和模型名spring: ai: openai: api-key: ${AI_API_KEY} chat: options: model: qwen-plus注意不同模型服务商对接口路径和模型名的叫法不同你需要按实际服务商调整配置。5.2 写一个 ChatClient 服务Spring AI 的核心入口是ChatClient。在 Spring Boot 3.x 中可以通过构造注入获得import org.springframework.ai.chat.model.ChatModel; import org.springframework.ai.chat.model.ChatResponse; import org.springframework.ai.chat.prompt.Prompt; import org.springframework.stereotype.Service; Service public class ChatService { private final ChatModel chatModel; public ChatService(ChatModel chatModel) { this.chatModel chatModel; } public String chat(String message) { ChatResponse response chatModel.call(new Prompt(message)); return response.getResult().getOutput().getText(); } }再写一个 Controller 暴露接口import org.springframework.web.bind.annotation.*; RestController RequestMapping(/api/chat) public class ChatController { private final ChatService chatService; public ChatController(ChatService chatService) { this.chatService chatService; } PostMapping public String chat(RequestBody String message) { return chatService.chat(message); } }启动应用后测试curl -X POST http://localhost:8080/api/chat \ -H Content-Type: text/plain \ -d 用一句话介绍 Java 和 AI 的关系预期结果是模型返回一段文本控制台没有明显报错。这里的关键点Spring AI 通过ChatModel接口屏蔽了底层模型差异。你切换模型时只需要改配置和依赖Service 层代码基本不动。这就是统一抽象的价值。5.3 流式输出大模型生成需要时间长文本场景下串行等待用户体验差。Spring AI 提供了流式接口响应以 SSE 格式逐步返回import org.springframework.ai.chat.model.ChatModel; import org.springframework.ai.chat.prompt.Prompt; import org.springframework.stereotype.Service; import reactor.core.publisher.Flux; Service public class StreamChatService { private final ChatModel chatModel; public StreamChatService(ChatModel chatModel) { this.chatModel chatModel; } public FluxString streamChat(String message) { return chatModel.stream(new Prompt(message)) .map(response - response.getResult().getOutput().getText()); } }Controller 对应import org.springframework.web.bind.annotation.*; import reactor.core.publisher.Flux; RestController RequestMapping(/api/chat) public class StreamChatController { private final StreamChatService streamChatService; public StreamChatController(StreamChatService streamChatService) { this.streamChatService streamChatService; } PostMapping(value /stream, produces text/event-stream) public FluxString streamChat(RequestBody String message) { return streamChatService.streamChat(message); } }测试方式curl -N -X POST http://localhost:8080/api/chat/stream \ -H Content-Type: text/plain \ -d 介绍一下 Spring AI 的核心概念-N参数让 curl 不缓冲输出你会看到文字逐步打印。流式接口是生产环境落地的关键能力特别是聊天类应用几乎必备。6. Spring AI Alibaba 集成6.1 为什么需要它Spring AI 官方核心包已经涵盖了模型接入、Prompt 管理、Function Calling 等能力但在 Agent 编排、国内模型适配、图流程执行这些企业级场景中Spring AI Alibaba 走得更快。它在 Spring AI 基础上的核心增强包括更完善的 Agent 开发套件支持 AI Agent 的动态规划、多轮对话。Graph 编排引擎把复杂任务拆成节点和执行条件适合稳定业务流。国内大模型通义千问、DeepSeek的深度适配。与阿里云函数计算、日志服务的集成方案。社区中常见的提问是“Spring AI Alibaba 可以实现 skills 吗”。Skills 是某些 Agent 框架中把一组 Prompt 工具 执行逻辑封装成可复用能力的概念。Spring AI Alibaba 中对应的是 Agent 工具和 DataSource 能力可以通过注册自定义Tool来实现类似效果具体 API 形态需以官方文档为准。6.2 依赖引入dependency groupIdcom.alibaba.cloud.ai/groupId artifactIdspring-ai-alibaba-starter/artifactId /dependency配置通义千问模型spring: ai: dashscope: api-key: ${DASHSCOPE_API_KEY} chat: options: model: qwen-plus如果是 DeepSeekspring: ai: dashscope: base-url: https://api.deepseek.com api-key: ${DEEPSEEK_API_KEY} chat: options: model: deepseek-chat具体的 base-url 和 model 名称要以模型服务商最新文档为准上面只是通用配置结构。6.3 实现一个带工具调用的 AgentAgent 最核心的能力是 Function Calling模型生成结构化参数程序执行真实函数再把结果回传给模型继续推理。假设我们要实现一个“查询天气并生成出行建议”的 Agent。先定义一个工具类import org.springframework.ai.tool.annotation.Tool; import org.springframework.ai.tool.annotation.ToolParam; import org.springframework.stereotype.Component; Component public class WeatherTools { Tool(description 查询指定城市的实时天气) public String getWeather(ToolParam(description 城市名称) String city) { // 实际项目中这里调用天气服务 API // 演示环境返回固定数据 if (北京.equals(city)) { return 晴25 度东北风 2 级; } return 多云22 度西南风 1 级; } }在 Spring AI Alibaba 中工具类通常通过ToolCallback注册到 ChatClientimport org.springframework.ai.chat.client.ChatClient; import org.springframework.ai.tool.ToolCallbackProvider; import org.springframework.ai.tool.MethodToolCallbackProvider; import org.springframework.stereotype.Service; Service public class AgentService { private final ChatClient chatClient; public AgentService(ChatClient.Builder chatClientBuilder, WeatherTools weatherTools) { ToolCallbackProvider toolProvider MethodToolCallbackProvider.builder() .toolObjects(weatherTools) .build(); this.chatClient chatClientBuilder .defaultTools(toolProvider) .build(); } public String askAgent(String userMessage) { return chatClient.prompt() .user(userMessage) .call() .content(); } }测试String result agentService.askAgent(北京今天的天气怎么样适合穿短袖吗); System.out.println(result);预期过程是模型识别到需要查询天气输出工具调用参数{city: 北京}程序执行getWeather方法返回天气结果模型基于结果生成最终回答。这是 Agent 入门最经典的示例也是面试中常问的 Function Calling 落地案例。6.4 Graph 编排复杂业务流程如果完全交给模型自由决策稳定性不可控。Spring AI Alibaba 提供的 Graph 能力允许开发者用代码定义执行流程节点是处理单元边是条件判断。这类编排的典型场景是客服工单处理意图识别节点 - 查询订单节点 - 生成回复节点每一步都有明确输入输出。这样做的好处是流程主干稳定模型只在节点内部做决策。// 示意代码实际 API 需要按官方文档核对 // Graph graph new Graph(); // graph.addNode(intent, new IntentNode()); // graph.addNode(queryOrder, new QueryOrderNode()); // graph.addNode(reply, new ReplyNode()); // graph.connect(intent, queryOrder, new ContainsCondition(order)); // graph.connect(queryOrder, reply);这里只给出伪代码骨架。原因是 Graph API 在不同版本中有较多变化建议你到 Spring AI Alibaba 官方文档中查找spring-ai-alibaba-graph的最新示例。7. LangChain 与 LangChain4j概念对比与实践7.1 LangChain 的核心概念LangChain 是 Python 生态的 AI 应用框架核心贡献是定义了 AI 应用编程模式。在很多 Java 岗位面试中面试官会问 LangChain 的经验所以了解它的概念结构是必要的。五个核心概念Model封装大模型调用类似 Spring AI 的 ChatModel。Prompt Templates把固定提示词和动态参数拼接避免在业务代码里拼接字符串。Chains把多个处理环节串起来比如先检索再生成。Agents让模型动态决定执行步骤、调用工具。Memory保留对话历史让多轮对话上下文连贯。7.2 LangChain 与 LangGraph 的区别LangChain 是线性链式抽象适合流程相对固定的应用。LangGraph 则在 LangChain 基础上引入图结构把任务拆成节点和有向边支持更复杂的条件分支、循环、人工干预。用代码开发的角度来理解LangChain 的 Chain 是“从上到下依次执行”LangGraph 的 Graph 是“根据状态动态决定下一跳”。Java 生态中如果你熟悉 LangGraph 的图执行思想再去看 Spring AI Alibaba Graph 会非常容易上手。7.3 LangChain4j 实战LangChain4j 是 Java 生态复刻 LangChain 设计模式的开源库。核心依赖dependency groupIddev.langchain4j/groupId artifactIdlangchain4j/artifactId /dependency dependency groupIddev.langchain4j/groupId artifactIdlangchain4j-open-ai/artifactId /dependency一个最简的 LangChain4j 调用示例import dev.langchain4j.model.chat.ChatLanguageModel; import dev.langchain4j.model.openai.OpenAiChatModel; public class LangChain4jDemo { public static void main(String[] args) { ChatLanguageModel model OpenAiChatModel.builder() .apiKey(System.getenv(AI_API_KEY)) .modelName(qwen-plus) .build(); String answer model.chat(用一句话介绍 LangChain4j); System.out.println(answer); } }对 Java 开发者来说LangChain4j 的学习价值在于概念完整性它有完整的 AiService 注解、MessageWindowMemory、Retriever、Tool 支持。如果你想深入理解 Agent 和 RAG 设计建议把它作为 Spring AI Alibaba 之外的补充学习素材。8. Agent 开发实践8.1 Agent 开发模式Agent 的工程实现有几种常见模式理解它们可以帮助你设计系统单 Agent 工具集一个 Agent 控制多个工具适合垂直领域任务开发成本低。主管 子 Agent主管 Agent 负责任务拆解子 Agent 各管一个领域适合复杂任务。Graph 驱动流程图固定节点内部由 Agent 决策最可控。Spring AI Alibaba 提供的 Agent 能力覆盖了后两种模式的实现基础。如果你搜索过spring ai alibaba agentdemo会发现官方仓库提供了完整的可运行示例建议在本地跑一遍。8.2 一个完整的批量任务 Agent 示例假设场景给一批商品标题生成电商文案。这不是一对一调用模型那么简单而是需要批量处理 失败重试 结果结构化输出。设计思路Controller 接收批量请求。Service 层把任务丢进线程池或消息队列。Agent 对每个标题执行提示词模板、调用模型、解析结果。结果写入输出目录。失败任务记录日志并重试。批量处理时建议先用小批量验证例如 3 条数据跑通逻辑再扩大范围。Agent 任务和普通接口调用的关键差异在于Agent 可能调用多个工具、存在多轮交互单次任务耗时远高于普通接口调用批量任务需要更宽的超时设置。import org.springframework.scheduling.annotation.Async; import org.springframework.stereotype.Service; Service public class BatchAgentService { private final AgentService agentService; public BatchAgentService(AgentService agentService) { this.agentService agentService; } Async public void processTitle(String title, String outputPath) { String prompt 你是一位电商运营专家请对以下商品标题生成 3 条推广文案。 要求每条不超过 50 字突出卖点。标题 title; String result agentService.askAgent(prompt); // 实际项目中这里将 result 写入 outputPath 文件 System.out.println(处理完成: title); System.out.println(结果: result); } }需要开启异步支持import org.springframework.context.annotation.Configuration; import org.springframework.scheduling.annotation.EnableAsync; Configuration EnableAsync public class AsyncConfig { }批量任务的核心难点不在调用模型而在失败恢复和幂等。模型接口偶尔超时、返回格式偶尔异常这些都需要在实际测试中做补偿逻辑。8.3 Agent 工程化注意事项工具权限最小化Agent 能调用哪些工具要按业务场景严格收敛尤其是数据库写入、文件删除、支付类工具。限制递归次数Agent 可能陷入循环代码里必须设置最大迭代次数。日志全链路记录每一步 Agent 的思考过程、工具调用参数、返回结果都应记录。人工复核机制关键操作不能让 Agent 直接执行应该生成建议草案人工确认后执行。测试用例覆盖Agent 的输入输出比普通函数更不可控需要积累一批测试集做回归。9. 大模型部署与本地推理9.1 Ollama 本地模型部署本地部署的价值在于数据安全和成本控制。对于 Java 应用来说接入本地模型和接入云 API 的代码差异非常小Spring AI 的 Ollama 模块已经把 HTTP 交互封装好了。部署前先看硬件# Linux 下查看 GPU 显存 nvidia-smi # macOS 下查看内存 sysctl hw.memsize拉取模型命令ollama pull qwen2.5:7b运行模型ollama run qwen2.5:7b需要确认的是模型文件较大下载时间取决于网络条件。通过 Spring AI 接入时Ollama 服务保持运行即可。9.2 通过 API 验证本地模型Ollama 暴露了 HTTP API可以在不写 Java 代码的情况下验证模型的可用性。常用接口是/api/generate和/api/chat。curl -X POST http://localhost:11434/api/chat \ -H Content-Type: application/json \ -d { model: qwen2.5:7b, messages: [ {role: user, content: 用 Java 写一个冒泡排序} ], stream: false }返回结果中会包含message.content、eval_count、eval_duration等字段其中eval_duration可以帮助你估算生成速度。9.3 大模型微调的定位微调是很多 Java 开发者容易误解的概念。实际上绝大多数 Java 后端项目不需要微调模型。你的业务需求如果可以通过 Prompt 设计、RAG、Function Calling 解决就不应该微调。什么时候需要微调模型输出格式有硬性要求且 Prompt 无法稳定约束。特定领域术语、语言风格需要长期固定。希望在减少 Prompt 长度的同时提升局部效果。微调本身是数据工程驱动的技术工作需要准备高质量训练集、验证集涉及模型训练框架。Java 开发者如果只是要解决业务问题优先走工程路线不要一上来就微调。10. 大模型面试考点整理这一节结合当前 Java 岗位面试中出现频率较高的 AI 问题做一次结构化梳理。10.1 大模型基础类Q1Transformer 的核心机制是什么回答要点自注意力机制Self-Attention、多头注意力、位置编码、Encoder-Decoder 结构。重点说明自注意力允许每个 token 关注序列中所有其他 token解决长距离依赖问题。Q2什么是 Token如何估算成本Token 是模型处理文本的基本单位中文场景下通常 1 个汉字对应 1 到 2 个 Token不同模型的分词器策略不同。成本估算公式总 Token 数 输入 Token 输出 Token乘以单价。Q3大模型为什么需要 Prompt Engineering大模型的能力边界受提示词影响很大设计良好的提示词可以约束输出格式、注入领域知识、降低幻觉。10.2 Spring AI 与 Java 生态类Q1Spring AI 和直接调用 HTTP API 有什么区别回答要点统一抽象、配置化切换模型、内嵌 Prompt 管理和输出解析、和 Spring Boot 的生态无缝集成。直接调 API 在原型阶段没问题但生产环境模型切换代价高。Q2Spring AI Alibaba 相比 Spring AI 增强了什么回答要点国内模型适配、Agent 能力、Graph 编排、企业级监控和阿里云生态集成。Q3你在项目中用 Spring AI 做过哪些功能建议准备一个完整项目经历包括技术选型、模型选择、Prompt 设计、接口封装、踩过的坑。10.3 LangChain 与 Agent 类Q1LangChain 和 LangGraph 的区别是什么LangChain 是线性链式抽象LangGraph 引入图状态流转更适合复杂分支和循环任务。LangGraph 还能通过检查点机制实现任务暂停、恢复和人工介入。Q2什么是 Function CallingFunction Calling 是模型输出结构化工具调用参数的能力。模型本身不执行函数它只是生成 JSON 格式的调用意图由应用程序解析并执行真实函数结果回传给模型继续推理。Q3什么是 ReAct 模式ReAct 是 Reasoning Acting 的缩写模型交替进行推理和行动。典型流程观察问题 - 思考下一步 - 调用工具 - 观察结果 - 继续思考 - 生成最终回答。Q4Agent 和传统代码的差别是什么传统代码控制流固定Agent 的控制流由模型动态决定。Agent 更适合未知步骤的开放式任务但可预测性和可控性更差需要配套工程保障。Q5什么是 RAG为什么不直接用模型记忆RAG检索增强生成先检索外部知识库再把检索结果注入 Prompt 让模型生成答案。它的核心作用是通过外部知识控制模型输出减少幻觉且支持知识实时更新不用重新训练模型。10.4 场景设计类高频场景题包括设计一个基于大模型的智能客服系统。设计一个工单自动分类系统。设计一个文档问答系统。设计一个支持多轮对话的 Agent。如何评估大模型输出质量。准备这些题目时避免只背概念要画出架构图讲清楚数据流用户输入 - 网关 - 服务编排 - 模型调用 - 工具调用 - 输出解析 - 结果返回。11. 常见问题与排查方法问题现象可能原因排查方式解决方案Spring Boot 启动失败提示 AI 依赖版本冲突Spring AI 版本与 Spring Boot 版本不兼容查看 Maven 依赖树mvn dependency:tree升级或降级 Spring AI BOM 版本调用模型接口超时模型服务未启动、网络不通、响应时间过长curl 测试模型服务地址确认模型服务端口增加 HttpClient 超时时间使用 Ollama 时提示连接拒绝Ollama 服务未启动或端口不匹配ps -ef | grep ollamacurl localhost:11434启动 Ollama 服务确认 base-url显存不足导致生成失败模型过大或并发过高nvidia-smi观察显存占用换更小模型、降低并发、开启量化Agent 循环调用工具不停止缺少最大迭代次数限制查看日志中工具调用链路加入迭代上限和超时控制批量任务部分失败单次模型调用异常查看任务日志定位失败批次增加失败重试和结果补偿输出内容不稳定Prompt 设计不合理或温度参数过高对比多次输出降低 temperature强化 Prompt 约束API 调用 401API Key 配置错误或过期检查环境变量和配置中心在模型服务商控制台重新生成 Key本地部署模型时最需要关注的是显存。实际显存占用取决于模型参数量、量化精度、上下文长度、并发数四个维度。建议第一次跑通时逐个变量测试先用最小上下文、单人访问跑通再逐步加大输入。12. 最佳实践与学习路线12.1 开发阶段的工程约定第一先跑通最小链路。不要一开始就设计复杂的 Agent 和 Graph。先把 Spring Boot Spring AI 一个模型接口跑通确认网络、依赖、模型服务全部正常再逐步引入工具调用和多 Agent 架构。第二配置和代码分离。API Key、模型名称、base-url 不要硬编码放到application.yml或环境变量中。不同环境用不同配置生产环境通过配置中心管理。第三设计一套统一的大模型调用日志。建议包含如下字段字段说明requestId请求唯一 IDmodel使用的模型名称prompt用户输入response模型输出durationMs耗时tokenCountToken 数toolCalls工具调用记录cost成本估算timestamp调用时间这组日志不仅是问题排查的依据也是成本分析和效果评估的数据基础。第四为 Agent 增加“护栏”。常见护栏包括输入内容检查、指定可调用的工具白名单、输出格式校验、敏感词过滤、最大执行步数限制、人工确认节点。12.2 推荐的学习顺序如果你是要从零开始掌握这套技术栈建议按这个顺序掌握大模型基础Token、上下文窗口、温度、Top-P、模型选择。跑通 Spring AI直接调用模型 API完成一个最简单的问答接口。学习提示词工程掌握角色设定、上下文注入、输出格式约束。深入 Spring AI Alibaba重点看 Agentdemo、Graph 示例和工具调用。学习 RAG理解 Embedding、向量数据库、检索和重排。学习 LangChain4j对照 LangChain 的概念模型理解 Java 实现。研究 Agent 编排ReAct、Function Calling、多 Agent、人工介入。本地模型部署用 Ollama 拉起模型了解显存占用和推理速度。面试题复习把项目经历整理成 STAR 模型突出技术决策和踩坑经历。12.3 场景选择建议如果业务目标是快速交付优先用云端模型 API Spring AI成本可控也稳定。如果业务有数据隔离要求用 Ollama 等工具本地部署开源模型通过 Spring AI 接入。如果业务流程复杂涉及多种工具和数据源用 Spring AI Alibaba 的 Agent 和 Graph 能力做编排。如果团队已经熟悉 LangChain 设计模式可以引入 LangChain4j在 Java 服务中复用这些概念。13. 总结Java 大模型这条路已经走通了而且工程化的方向越来越明确。Spring AI 统一了模型接入Spring AI Alibaba 补齐了国内模型和 Agent 编排能力LangChain4j 提供了更贴近 Python 生态的概念实现Agent 和 Function Calling 让模型从“对话工具”变成“任务执行器”。对 Java 开发者来说真正的机会不是去和算法工程师竞争训练模型而是发挥后端工程化的优势把模型能力稳定、安全、高效地嵌入业务系统。如果你准备今天就动手建议先做两件事第一拉一个 Spring Boot 工程把 Spring AI 的 ChatClient 跑通第二用 Ollama 拉起一个本地 7B 模型验证本地推理链路。这两步跑通后再逐步引入工具调用、批量任务、Agent 编排。最容易踩的坑是版本兼容、模型服务地址配置、超时时间设置和显存不足把这些问题在测试环境全部验证一遍再上生产。后续方向可以根据业务需求选 RAG、多 Agent 协作或 Graph 流程编排但要记住业务问题优先用工程手段解决不要盲目追求复杂的 Agent 架构。