ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

Java大模型应用开发指南:Spring AI与Agent实战

Java大模型应用开发指南:Spring AI与Agent实战 很多 Java 团队最近都在纠结同一件事业务系统已经稳定跑了好几年突然发现隔壁 Python 组已经开始用 LangChain 写 Agent甚至做出了能自动处理工单的智能客服。而自己这边连“大模型应用开发该从哪入手”这个问题都还没想清楚。更让人焦虑的是网上一搜教程十个里面有九个是 Python 写的。于是很多 Java 开发者下意识觉得想搞大模型是不是得先转语言我的判断很明确不一定。Java 开发者不需要把技术栈推倒重来大模型应用开发的核心能力也不是 Python 语法而是对模型能力边界的理解、对调用链路的掌控、对 Agent 状态流的拆解。这些能力在 Java 生态里同样能练出来而且有 Spring AI 和 Spring AI Alibaba 这类框架兜底工程化落地甚至比 Python 脚本更稳。这篇文章想解决三个问题第一Java 开发者做 AI 应用Spring AI、Spring AI Alibaba、LangChain 这些框架到底怎么选第二Agent 到底是个什么技术形态怎么从“看懂概念”走到“写出能跑的代码”第三如果准备大模型相关的面试核心考点会集中在哪些方向。全文以实战为主线不铺概念所有代码都可以直接落盘运行。1. 这篇文章真正要解决的问题先说痛点。现在的 Java 开发者普遍面临一个错位业务代码写得很熟练Spring Boot 那一套信手拈来但遇到“接入大模型”这个需求时突然不知道技术方案该怎么设计。用 HTTP 请求硬调模型 API那是最原始的做法只解决“能通”的问题接下来你要自己处理多轮对话历史、工具调用参数、流式输出解析、异常重试、上下文裁剪……每一项都是重复造轮子。用 Python 重写一套服务那更不现实。现有团队是 Java 的运维体系是 JVM 的中间件是 Spring Cloud 那套的为了一个 AI 功能引入一套完全不同的语言技术栈后续维护成本是灾难级的。所以真正值得关注的是 Spring AI 和 Spring AI Alibaba 这条路线。它做的事情本质上和 LangChain 在 Python 生态里做的事情一样只是把编程模型换成了 Java 开发者熟悉的 Spring 风格依赖注入、自动配置、Starter、统一接口。这篇文章适合以下读者有 Java 基础想进入大模型应用开发但不知道第一个项目该怎么做。团队准备把 AI 能力接入现有业务系统需要评估框架选型。面试前需要快速梳理大模型应用、Agent、RAG、Function Calling 等高频考点。读完这篇文章你会得到一条完整的技术路径从大模型基础概念到 Spring AI Alibaba 落地示例再到 Agent 开发选型和面试题梳理。文章不含“三天精通大模型”之类的废话每节内容都以能动手为底线。2. 大模型应用开发的核心概念地图在写代码之前建议先把几个高频概念放在同一张地图里看。很多开发者面试答不上来不是因为不知道定义而是因为概念之间是割裂的。2.1 大模型 API一切应用的底层入口大模型本身是部署在服务端的权重参数普通人不会直接操作模型而是通过 API 调用。当前主流的模型服务商都提供兼容接口你发送一组消息包括系统提示词、用户输入、历史记录模型返回生成结果。从 Java 开发者的角度看大模型 API 就是一个远程 HTTP 服务只不过它返回的内容需要特殊处理可能是流式 token、可能是带工具调用的结构化指令、可能是嵌入向量。2.2 Prompt你是怎么写指令的Prompt 就是发给模型的指令。同一个模型不同的 Prompt 写出来的效果差异极大。比如你直接问“写个 Java 单例”模型可能给你写个懒汉式就结束了但如果加上“请基于双重检查锁实现并解释线程安全性”输出质量完全不同。Prompt 工程的核心不是“措辞华丽”而是把约束条件显式化角色、目标、输入格式、输出格式、注意事项。2.3 Function Calling让模型调用你的函数大模型本身不执行代码它只能生成文本。但通过 Function Calling 机制模型可以在回答过程中决定“我需要调某个函数”然后框架帮你执行这个函数并把返回值再交给模型最终生成完整的回答。这是 Agent 最核心的底层机制之一。2.4 RAG给模型外挂知识库大模型的知识有截止日期也没有你的私有数据。RAGRetrieval-Augmented Generation的思路是先把文档切块、向量化、存入向量数据库用户提问时先检索出相关的文档片段再把这些片段拼进 Prompt 一起发给模型。这样模型就能基于你提供的资料来回答而不是凭空发挥。2.5 Agent从“对话”到“完成任务”Agent 可以理解为“能使用工具、能自主决策执行步骤的对话系统”。它不再一问一答而是根据用户目标自己规划步骤、调用工具、观察结果直到任务完成。下面用一个表格快速对照这些概念概念解决什么问题一句话解释大模型 API接入模型能力远程调用模型传入消息返回结果Prompt控制输出质量用指令约束模型的回答行为Function Calling让模型使用外部工具模型决定调函数框架执行后再返回RAG补充私有知识检索资料并拼入上下文减少幻觉Agent完成多步骤任务模型 工具 循环决策自动执行这五个概念不是并列关系而是递进关系。会调 API 只是入门能设计 Prompt 才算上手能打通 Function Calling 和 RAG才真正具备做 Agent 的基础。3. Spring AI 与 Spring AI AlibabaJava 生态的大模型开发框架3.1 为什么 Java 生态需要 Spring AI在没有 Spring AI 之前Java 开发者的选择很尴尬。最原始的方式是直接用 RestTemplate 或 WebClient 调模型接口。这样做能用但问题是不同模型服务商的接口格式不同今天接 OpenAI明天换通义千问代码就要重写多轮对话的历史消息要手动拼装流式输出要自己解析 SSE 协议模型返回 JSON 时还要手写解析器。这些工作不是不能做而是每个接入大模型的项目都要做一遍严重浪费人力。Spring AI 的定位就是解决这个问题。它提供了一套统一的编程模型把“模型提供商差异”封装在内部。你在代码里通过 ChatModel 接口调用模型至于背后是 OpenAI、通义千问还是本地 Ollama只影响配置不影响业务代码。3.2 Spring AI Alibaba 是什么Spring AI Alibaba 是阿里开源的一套基于 Spring AI 的适配与扩展实现。它的核心价值在于让 Spring AI 应用可以更方便地接入阿里云的模型服务比如 DashScope 平台上托管的通义千问系列模型同时也会针对流式输出、工具调用、结构化输出等场景做更贴近国内使用习惯的增强。从开发者的视角看Spring AI Alibaba 做的事情可以这样理解它本身是 Spring AI 生态的一员不是另一个竞争对手。它解决了“国内开发者想用 Spring AI 但不知道怎么接国内模型”的体验问题。对于已经在使用阿里云服务的团队链路更顺畅。3.3 Spring AI 与 LangChain 的定位差异很多面试题会问“Spring AI 和 LangChain 有什么区别”更准确的说法是它们解决的是同一类问题但服务的人群不同。LangChain 诞生于 Python 生态生态起步早组件丰富社区活跃在大模型应用开发的方法论上有很大贡献。LangChain 的 Agent、Chain、Memory 等概念影响了后续几乎所有 AI 编排框架。Spring AI 的目标是把这些能力带入 JVM 生态。它吸收了类似的设计思想但编程模型是 Spring 式的。对 Java 团队来说选择 Spring AI 意味着团队不需要新学一门语言也能完成大模型应用开发。下面用一张对比表来看对比维度Spring AILangChain裸调模型 API编程语言Java / JVMPython / JS任意语言统一模型抽象支持支持不支持工具调用 / Agent支持支持需自研工程化能力强天然适合 Spring 生态脚本化更顺手全部自研国内模型接入Spring AI Alibaba 增强需自行适配手动实现4. LangChain 与 LangGraphAgent 开发框架怎么选LangChain 相关内容在 Python 生态里讨论度很高Java 开发者虽然不直接用但在面试和方案评审中经常被问到也经常因为搞不清 LangChain 和 LangGraph 的区别而吃亏。4.1 LangChain 解决的是什么LangChain 的核心贡献是把大模型应用拆成了可组合的模块模型、Prompt 模板、输出解析器、内存、检索器、工具、Agent。也就是说原来你需要自己写的“调用模型 → 拼 Prompt → 解析输出 → 存取历史”这套样板代码LangChain 帮你封装成了标准组件。你可以像搭积木一样搭建一条处理链Chain。4.2 LangGraph 解决的是什么LangChain 给开发者带来便利的同时也暴露了一个问题它早期对复杂流程的支持不够灵活。很多 Agent 场景需要的是条件分支、循环、人工介入、状态持久化而 Chain 是一种线性结构做这些事很别扭。LangGraph 换个思路把 Agent 执行流程建模成一张图Graph。节点是处理步骤边是状态跳转。你可以清楚地定义“如果工具返回错误就回到重试节点”也可以让 Agent 在多个工具之间循环调用。这个思路本质上和 Spring 状态机、流程编排引擎是一个套路Java 开发者理解起来不难。4.3 选型判断如果你是 Python 技术栈做简单问答、文档处理LangChain 足够如果做复杂的多工具 AgentLangGraph 更合适。如果你是 Java 技术栈其实不需要纠结这两个框架更务实的路线是用 Spring AI 做基础接入用 Spring AI Alibaba 接国内模型Agent 的编排逻辑自己用代码实现或者结合业务系统已有的流程引擎来做。因为在企业级 Java 项目里Agent 不是孤立运行的它往往要和权限、审批、工单系统、消息队列打通这些能力 Spring 生态本来就比 Python 生态成熟。5. Agent 开发的本质与常见误区5.1 Agent 到底是怎么工作的抛开玄学说法Agent 的本质是一个循环用户目标 → 模型规划下一步 → 调用工具或直接回答 → 返回结果 → 模型观察结果 → 继续规划或结束这里的关键是模型是大脑工具是手脚循环是流程控制。没有工具模型只会空谈没有循环只能完成单次调用没有状态管理多轮任务就会失忆。用 Java 开发的思维方式来说Agent 就是一个“带状态机的服务”。它接收一个用户请求维护一份运行上下文在多个工具之间流转直到满足终止条件。5.2 最常见的三个误区第一个误区以为 Agent 什么都能干。实际上模型的能力边界决定了 Agent 的上限。如果模型本身逻辑推理能力不行再好的 Agent 框架也救不了。Agent 适合的是“把明确的任务拆成步骤”而不是“请想象一个能解决所有问题的智能体”。第二个误区轻视工具调用的稳定性。工具是 Agent 与真实世界交互的通道。工具参数传错了、工具接口超时了、返回值格式不合法都会导致 Agent 流程中断。很多 Agent 项目挂在 demo 阶段就是因为工具层没有做好异常兜底。第三个误区不考虑状态管理。Agent 的执行不是一次 HTTP 请求就结束的。用户可能在中间修改需求工具可能调用到一半失败系统可能需要审计每一步的动作。如果设计之初不规划好状态持久化后面扩容和排查都会非常痛苦。5.3 一个典型 Agent 场景拆解假设要做一个“智能工单处理 Agent”用户说“帮我查一下订单 12345 的物流状态如果异常就发起退款。”拆解下来这一句话包含的步骤是模型从用户输入中识别出意图查询订单物流。模型决定调用工具 queryLogistics(orderId12345)。工具返回物流状态模型判断“异常”。模型决定调用工具 initiateRefund(orderId12345, reason物流异常)。工具返回退款已发起模型汇总结果回复用户。这中间的每一步都需要工程代码保障工具注册、参数提取、调用鉴权、结果校验、异常重试、日志审计。6. Spring AI Alibaba 实战从零搭建一个可运行的 AI 应用下面进入全文最核心的实操部分。目标是用 Spring AI Alibaba 搭建一个最简可运行的 AI 对话应用通过统一的 ChatModel 接口调用模型。6.1 环境准备与前置条件先说明环境约束。本文的代码基于 Java 17、Spring Boot 3.x 编写Maven 作为构建工具。如果你本机已经安装 JDK 8建议为这个项目单独配置 JDK 17 或更高版本因为 Spring Boot 3 的基线版本就是 JDK 17。还需要一个可用的模型 API。这里有两种选择云端 API注册 DashScope 等平台获取 API Key。这也是最直接的方式。本地模型通过 Ollama 部署一个开源模型把 Spring AI 的 base-url 指向本地。从学习成本来看云 API 更省心从数据隐私和离线场景看本地模型有独特价值。本文示例以云 API 为主但配置思路同样适用于本地。6.2 创建 Spring Boot 项目并添加依赖使用 Spring Initializr 创建一个空项目或者直接用 IDE 新建。核心依赖如下文件路径为pom.xml?xml version1.0 encodingUTF-8? project xmlnshttp://maven.apache.org/POM/4.0.0 xmlns:xsihttp://www.w3.org/2001/XMLSchema-instance xsi:schemaLocationhttp://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd modelVersion4.0.0/modelVersion parent groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter-parent/artifactId version3.3.5/version relativePath/ /parent groupIdcom.example/groupId artifactIdspring-ai-demo/artifactId version0.0.1-SNAPSHOT/version namespring-ai-demo/name descriptionSpring AI Alibaba demo/description properties java.version17/java.version !-- 版本请以官方发布情况为准 -- spring-ai.version1.0.0/spring-ai.version /properties dependencies dependency groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter-web/artifactId /dependency dependency groupIdcom.alibaba.cloud.ai/groupId artifactIdspring-ai-alibaba-starter/artifactId version${spring-ai.version}/version /dependency /dependencies build plugins plugin groupIdorg.springframework.boot/groupId artifactIdspring-boot-maven-plugin/artifactId /plugin /plugins /build /project这里有两个地方需要在真实项目中注意第一版本号不要照抄要以你创建项目时的最新稳定版本为准。AI 框架的版本迭代速度非常快我写的版本号只能说明“这种写法可行”不保证是当前最新版。第二Spring AI Alibaba 的坐标是com.alibaba.cloud.ai它和 Spring Cloud Alibaba 不是同一个仓库不要搞混。6.3 配置模型服务参数在src/main/resources/application.yml中配置模型连接信息server: port: 8080 spring: application: name: spring-ai-demo ai: dashscope: api-key: ${AI_API_KEY} base-url: https://dashscope.aliyuncs.com/api/v1 chat: options: model: qwen-plus temperature: 0.7这里的配置说明${AI_API_KEY}是环境变量占位符不要把真实的 Key 写在代码里生产环境可以放到配置中心或密钥管理服务。model指定使用的模型名称不同平台支持的模型名称不同。temperature控制输出的随机性值越大回答越发散值越小越保守。6.4 编写核心业务代码第一步创建 service在构造器中注入 ChatModel然后提供一个对话方法。文件路径是src/main/java/com/example/springaidemo/service/ChatService.javapackage com.example.springaidemo.service; import org.springframework.ai.chat.model.ChatModel; import org.springframework.ai.chat.prompt.Prompt; import org.springframework.ai.chat.model.Generation; import org.springframework.stereotype.Service; import java.util.List; Service public class ChatService { private final ChatModel chatModel; public ChatService(ChatModel chatModel) { this.chatModel chatModel; } public String chat(String userMessage) { Prompt prompt new Prompt(userMessage); ListGeneration generations chatModel.call(prompt).getResults(); if (generations null || generations.isEmpty()) { return 模型没有返回结果; } return generations.get(0).getOutput().getText(); } }这里最关键的一行是chatModel.call(prompt)。不管后端接的是哪个模型业务代码都可以保持不变模型差异全部由 Spring AI 的自动配置处理。第二步创建 controller暴露一个 HTTP 接口。文件路径是src/main/java/com/example/springaidemo/controller/ChatController.javapackage com.example.springaidemo.controller; import com.example.springaidemo.service.ChatService; import org.springframework.web.bind.annotation.*; import java.util.Map; RestController RequestMapping(/api/chat) public class ChatController { private final ChatService chatService; public ChatController(ChatService chatService) { this.chatService chatService; } PostMapping public MapString, String chat(RequestBody MapString, String request) { String message request.get(message); if (message null || message.isBlank()) { return Map.of(error, message 不能为空); } String reply chatService.chat(message); return Map.of(reply, reply); } }第三步可选地输出一条启动日志方便确认配置是否正确加载。文件路径是src/main/java/com/example/springaidemo/SpringAiDemoApplication.javapackage com.example.springaidemo; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; SpringBootApplication public class SpringAiDemoApplication { public static void main(String[] args) { SpringApplication.run(SpringAiDemoApplication.class, args); } }7. 运行验证与问题排查代码写完之后进入验证环节。7.1 启动应用在终端执行# 先设置环境变量 export AI_API_KEY你的真实APIKey # 然后启动 mvn spring-boot:run启动成功后日志中会出现 Tomcat started on port 8080 之类的信息。7.2 调用测试接口打开新的终端用 curl 发送一个测试请求curl -X POST http://localhost:8080/api/chat \ -H Content-Type: application/json \ -d {message: 用一句话介绍 Spring AI}如果一切正常响应会是一个 JSON里面包含模型的回复文本。例如{reply:Spring AI 是 Java 生态的大模型应用开发框架提供了统一的模型调用抽象和丰富的工具链。}这里要说明一下模型回复内容不固定出现不同文本是正常的只要接口能返回reply字段就说明链路已经打通。7.3 失败时怎么排查很多同学第一次跑通会遇到问题下面列出最常见的情况问题现象可能原因排查方式解决方案启动报错提示 API Key 为空环境变量没设置或拼写错误检查启动终端是否 export 了 AI_API_KEY重新设置环境变量后重启启动报错依赖版本冲突Spring Boot 与 Spring AI 版本不匹配运行mvn dependency:tree查看依赖树统一 Spring Boot 版本到官方推荐版本调用接口报 401 或 403API Key 无效或没有对应模型权限在平台控制台验证 Key 是否可用重新生成 Key 或开通模型服务调用接口超时网络到模型服务不通curl 测试模型服务 base-url 连通性检查网络策略确认可以访问外部 API返回内容为空Prompt 问题或模型参数配置导致输出为空查看服务端日志中的异常信息尝试更换模型名降低 temperature一个比较重要的排查技巧是先把问题拆成“网络层、认证层、框架层、业务层”四个层面。比如 HTTP 状态码是 401那基本可以确定不是代码逻辑问题而是认证问题如果 200 但返回内容是空的才需要去看框架层和模型参数。8. 大模型部署与模型选型建议很多 Java 项目对数据安全有严格要求模型服务不能随便走外部 API这就涉及大模型部署的问题。8.1 云端 API 与本地部署怎么选下面是两种选型的详细对比对比维度云端 API本地部署部署成本低注册即用高需要 GPU 资源数据隐私数据经过第三方服务数据完全本地模型效果通常更强取决于模型规格运维复杂度低需要维护推理服务成本模型按调用量付费固定硬件成本 电费从材料看本地部署的开源模型在轻量任务上完全够用而且不存在按量付费的焦虑。商业模型和开源模型的边界正在变得模糊很多开源模型在推理、编码等任务上也达到了不错的水平。8.2 用 Ollama 跑本地模型的思路Ollama 是目前最常见的本地模型部署方式之一使用方式比较友好。如果你想把 Spring AI 的模型配置切到本地可以先安装 Ollama然后拉取一个模型ollama pull qwen2.5启动后Ollama 默认会监听本地端口。Spring AI 的配置可以改成这样spring: ai: ollama: base-url: http://localhost:11434 chat: options: model: qwen2.5当然这里我写的是通用思路不同版本的 Spring AI 对 Ollama 的配置项名称可能略有变化以官方文档为准。这种方案的价值在于开发阶段可以完全离线调试代码不消耗任何 API 费用等到联调和生产阶段再切换回云端更强模型。架构层面只需要改配置业务代码不用动。8.3 免费 API 的注意事项“免费大模型 API”是搜索热词但免费通常意味着有约束条件有调用频率限制、有并发上限、不保证 SLA、输入输出可能被用于模型训练。如果只是学习和技术验证免费额度完全够用如果是生产环境建议把可靠性放在第一位不要因为省成本而牺牲稳定性。更稳妥的做法是在开发环境用免费额度或本地模型在生产环境用正规的商业 API 或私有化部署。9. 大模型面试考点与典型问题现在来到很多读者最关心的部分大模型相关的面试到底考什么。Java 岗位的大模型面试不会要求你推导 Transformer 的注意力公式但会考察你对“应用层技术栈”的掌握程度。下面的问题都是高频考点我按难度分层整理。9.1 基础层问题一大模型 API 调用时的 temperature 参数作用是什么temperature 控制生成结果的随机性。值越低模型越倾向选择概率最高的 token回答更稳定值越高结果更多样化但可能出现不准确的内容。知识类问答适合低 temperature创意写作适合高 temperature。问题二什么是多轮对话实现时需要注意什么多轮对话需要把历史消息也发送给模型。实现时要注意不能无限追加历史因为上下文窗口有限超出窗口后需要做缩减策略比如丢弃更早的消息或对历史做摘要压缩。问题三什么是 Prompt EngineeringPrompt Engineering 是通过设计输入指令来引导模型输出。它会直接影响模型回答的质量、格式和准确性。常见手段包括角色设定、示例输入输出Few-shot、约束格式、区分“需要模型做什么”和“不能做什么”。9.2 进阶层问题四请解释 Function Calling 的原理。Function Calling 分为四步开发者定义一组工具函数及 JSON Schema把工具定义传给模型模型根据用户输入判断是否需要调用工具并返回结构化的调用参数应用执行函数把结果传回模型模型生成最终回答。问题五什么是 RAG它解决了什么问题RAG 是检索增强生成先检索外部知识库中与问题相关的片段再把这些片段拼接进 Prompt 让模型生成答案。它主要解决两个问题模型不知道私有数据模型会幻觉出不存在的事实。问题六RAG 和模型微调有什么区别RAG 不改变模型权重只是动态补充上下文适合知识库类场景更新方便。微调是调整模型参数适合改变模型的表达风格或特定任务能力但训练成本高更新需要重新训练。9.3 高级层问题七Agent 和普通对话的差别是什么普通对话系统是“用户问模型答”每次交互是独立的。Agent 具备目标拆解、工具调用、结果观察和循环决策的能力可以自主完成多步骤任务比如查物流、比对价格、生成报告并能根据中间结果修正后续动作。问题八如何降低大模型的幻觉问题常见手段包括使用 RAG 将可信资料注入上下文在 Prompt 中明确要求“基于给定资料回答不要臆测”对输出做后校验比如非法值校验、引用来源校验关键业务场景引入人工审核环节。问题九如何评估一个 RAG 系统的质量评估分两部分检索质量看召回率和排序是否准确生成质量看回答与检索文档的相关性、回答是否忠实地遵循文档内容。实践中可以用一组标注好的评测集跑批量测试计算准确率、忠实度等指标。问题十大模型应用的成本主要有哪些成本主要来自三部分模型 API 调用费用Token 费用、上下文长度越长费用越高向量数据库和检索服务的机器成本开发调试阶段反复调用的隐性成本。生产中可以通过缓存相同问题、控制上下文长度、选用更小模型等方式降本。10. 工程最佳实践与避坑建议代码能跑通只是第一步真正上线还需要考虑工程化细节。下面这些建议来自实际项目中的常见问题不是理论推演。10.1 API Key 的安全管理所有模型服务商的 API Key 本质上都是资金账户。泄露出去轻则被盗刷额度重则被恶意调用造成巨额账单。正确做法是不把 Key 提交到 Git 仓库。开发环境用环境变量或本地配置文件。生产环境使用配置中心或密钥管理服务配合权限管控。设置用量预警和配额限制。10.2 超时、重试与熔断模型 API 是外部依赖不是本地方法调用。外部服务可能慢、可能挂、可能限流。所以必须为模型调用配置超时时间和重试策略。一个合理的策略是首次调用设置合理超时超时后最多重试两次重试依然失败时走降级方案比如返回缓存结果或提示用户稍后再试。对于关键链路还要做熔断防止上游故障打垮自己的服务。10.3 响应校验与结构化输出模型输出是不可预料的即使你要求它返回 JSON它也可能带着语气词或者反引号。生产中不能把模型输出直接拿去解析必须做容错。做法是在 Prompt 中严格要求输出格式同时使用输出解析器或手动提取 JSON 片段解析失败时要有兜底逻辑。很多框架提供了结构化输出能力底层就是把输出转成目标类型并处理常见格式错误。10.4 日志与可观测性AI 应用的排查难度比普通接口高因为你不知道用户输入了什么、模型思考了什么、工具返回了什么。建议在关键节点加上日志用户原始输入。Prompt 最后组装的样子在脱敏前提下。模型返回的原始内容。每次工具调用的入参和出参。耗时和 Token 消耗。有条件的团队可以引入链路追踪把一次 Agent 执行的完整流程串联起来。这样出了问题至少能知道是哪一步断了。10.5 成本控制与灰度发布大模型项目上线要设置 Token 消耗监控。同一类功能不同用户的使用量可能差很多。建议按业务场景拆分模型配置简单问答用轻量模型复杂推理用高级模型。灰度发布也很重要。AI 功能有不确定性先让一小部分用户试用观察效果和成本再逐步放开。不要第一天就直接全量上线。11. 总结与后续学习方向这篇文章从 Java 开发者的视角把大模型应用开发的核心链路梳理了一遍重点落在 Spring AI、Spring AI Alibaba、LangChain 与 Agent 这几个关键环节上。现在可以回答开头的问题了Java 开发者进入大模型应用开发不是非学 Python 不可。Spring AI 这套框架把 LangChain 在 Python 生态里解决的问题搬到了 JVM 生态让 Java 团队可以用自己熟悉的工程能力完成 AI 应用落地。真正决定你能不能做出好东西的因素不是语言而是你对模型能力边界的理解、对工具调用的掌控、对 Agent 状态流的拆解能力。接下来可以按三步继续深入第一步把本文的 Spring AI Alibaba 示例跑通然后尝试替换模型配置接一个本地 Ollama 模型感受不同模型服务的切换过程有多简便。第二步给项目增加 RAG 能力。引入一个向量数据库把一份文档切块、向量化做一个“基于知识库问答”的接口。这一步能让你真正理解 RAG 的工程细节。第三步做一个多工具 Agent。设计两个工具函数例如查天气、查数据库订单状态然后让模型根据用户问题自动选择并调用。跑通之后再考虑状态持久化、流程审计、异常重试这些生产级问题。最后一个提醒不要被“大模型”这个词吓住。它的底层是数学和系统工程但应用层已经高度工程化了。Java 开发者现在入场时间刚刚好。
返回列表