ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

Java 后端接入 DeepSeek:Spring AI 2.0 + LangChain4j + Alibaba 实战

Java 后端接入 DeepSeek:Spring AI 2.0 + LangChain4j + Alibaba 实战 如果你是一个 Java 后端开发者2026 年还想靠 Python 写原型、再让 Java 工程“翻译”一遍来接入大模型那你的开发速度已经落后一个时代了。更典型的一幕是Spring Boot 项目里想加一个“AI 对话能力”结果同事在 Service 层写了几百行 HTTP 调用自己拼 Prompt、解析 JSON、维护历史消息、还要处理超时和重试。这些工作有没有价值有但它不是你的业务价值。真正适合 Java 工程的做法是用一个统一的 AI 框架层把模型接入、Prompt 管理、结构化输出、向量检索、可观测性全部收口。这也是 Spring AI 2.0、LangChain4j、Spring AI Alibaba 这三个技术栈最近热度持续走高的原因。本文就围绕“Spring AI 2.0 Langchain4j DeepSeek Spring AI Alibaba”这条完整链路讲清楚它们各自解决什么问题、如何组合使用、如何最小成本跑通以及实际项目里最值得注意的坑。读完这篇文章你会得到一条可以直接落地的路线先接 DeepSeek 对话再引入 LangChain4j 做轻量模型调用最后通过 Spring AI Alibaba 的生态接入向量库和 RAG让应用真正具备“根据自己业务数据生成回答”的能力。文章偏实战代码都会给完整示例建议收藏备用。1. 这篇文章真正要解决的问题很多 Java 开发者在 AI 应用落地时卡住的不是“AI 概念”而是下面这三个具体问题。1.1 模型接入方式不统一国内能用的模型越来越多DeepSeek、通义千问、智谱、Kimi还有各类开源模型。OpenAI 兼容协议让它们可以互相替换但每个模型商的参数细节、限流策略、异常字段还是有差异。如果团队每个项目都自己封装一次 HTTP 客户端后续切换模型就是一次大重构。1.2 业务数据进不了模型对大模型只聊“你好”“帮我写个文案”没有工程价值。企业级 AI 应用的核心是让模型基于你自己的文档、数据库记录、知识库来回答。这件事需要把文本切块、向量化、存入向量数据库再在提问时做相似度召回。光这一步就涉及 Embedding、Milvus、ES、检索策略等多个组件手工做成本极高。1.3 输出结果不可控模型返回的是字符串但业务层想要的往往是“用户信息对象”“订单状态枚举”“抽取后的结构化数据”。没有工具辅助时只能靠正则去抠答案既脆弱又难维护。这也是“结构化输出”在搜索热词里频繁出现的原因。本文给出的解法不是某个单一框架而是一套组合Spring AI 2.0作为 Java 生态的大模型接入标准层负责模型调用、Prompt、输出解析的抽象。LangChain4j轻量、模型无关适合做 Agent、工具调用和快速原型。Spring AI Alibaba补齐 Spring AI 在阿里云生态、生产级组件如 Graph、Studio、向量检索方面的能力。三者各有分工可以单独用也可以按本文的组合方式一起用。2. 先理清三个关键概念2.1 Spring AI 2.0 是什么Spring AI 是 Spring 官方推出的 AI 应用开发框架目标是像 Spring JDBC 统一数据库访问一样统一大模型接入。它的核心价值是“抽象”你写业务代码时面向 ChatClient、ChatModel、EmbeddingModel 这些接口不直接绑定某个模型商的 SDK。Spring AI 2.0 在 1.x 的基础上做了大量工程化改进。从目前社区的演进方向看2.x 更强调以下几个方面更统一的ChatClient流式接口和同步接口。对结构化输出Structured Output提供更高层封装。对向量数据库、RAG 管道的集成更完善。更清晰的模型适配层方便接入 DeepSeek、通义千问等基于 OpenAI 兼容协议或国内特有协议的模型。很多人误以为 Spring AI 只能接 OpenAI这是一个常见误区。实际上Spring AI 通过配置base-url可以接所有 OpenAI 兼容的服务DeepSeek 的就是一个典型场景。2.2 LangChain4j 是什么LangChain4j 的名字借鉴了 Python 生态的 LangChain但它是完全独立的 Java 实现。它的设计更轻核心概念是ChatLanguageModel、EmbeddingModel、ContentRetriever、Tool等。LangChain4j 的优势在于不强制依赖 Spring在普通 Java 项目里也能用。Agent、工具调用的 API 设计比较直观。支持 AI Services可以通过接口定义来自动生成调用逻辑代码非常简洁。对本地模型、私有化部署的场景支持灵活。如果项目还没引入 Spring AI只想快速在 Service 里加一个模型调用LangChain4j 是成本很低的方案。2.3 Spring AI Alibaba 是什么Spring AI Alibaba 是阿里巴巴基于 Spring AI 生态扩展的一套组件。它一方面把通义千问等模型接入 Spring AI另一方面提供了更贴近生产环境的工具比如工作流编排能力Graph适合实现多步骤 Agent 流程。可视化调试能力Studio方便查看 Prompt、模型响应和链路信息。与阿里云基础设施的集成包括向量检索、表格问答等。从“Spring AI Alibaba 1.x 系列”和“spring alibaba ai graph”这些高频热词来看越来越多 Java 团队在把 Spring AI Alibaba 作为接入国内模型的首选桥梁。2.4 三者对比维度Spring AI 2.0LangChain4jSpring AI Alibaba核心定位Spring 官方 AI 抽象层轻量 Java AI 框架阿里系 AI 生产增强Spring 依赖强依赖天然整合不强制基于 Spring AI 扩展模型支持OpenAI 兼容为主模型无关通义、DeepSeek、开源模型特色能力结构化输出、RAGAgent、工具调用Graph、Studio、阿里云集成适用场景正规 Spring Boot 项目快速原型、轻量项目国内生产级 AI 应用一句话判断Spring Boot 项目优先选 Spring AI 2.0想要轻量不绑 Spring选 LangChain4j需要国内模型深度集成和生产级链路补上 Spring AI Alibaba。3. 环境准备与前置条件3.1 环境要求实操之前请先确认本机环境满足最低要求。环境项要求说明JDK17Spring AI 2.x 和 Spring Boot 3.x 都需要 JDK 17构建工具Maven 3.8 或 Gradle 7.x本文以 Maven 为例Spring Boot3.x版本以当前稳定版为准不建议直接使用过旧版本DeepSeek API Key在 DeepSeek 开放平台申请用于调用模型网络能访问模型 API 地址国内环境通常可直接访问版本说明因为 Spring AI、LangChain4j 和 Spring AI Alibaba 都处于快速迭代期不同小版本的 API 可能略有差异。本文写到的配置和代码属于核心通用用法不会把某个具体版本号写死。你在创建项目时以当前最新稳定版为准即可。3.2 申请 DeepSeek API Key访问 DeepSeek 开放平台注册账号后进入控制台创建 API Key。Key 的格式通常以sk-开头。创建之后马上复制保存因为关闭页面后可能无法再查看完整 Key。后续代码里我建议通过环境变量读取不要硬编码到代码仓库。3.3 新建 Spring Boot 项目推荐用 Spring Initializr 创建基础工程勾选依赖Spring WebSpring Boot Actuator可选用于健康检查Lombok可选减少样板代码创建完成后在pom.xml中引入 AI 相关依赖。4. 第一步Spring AI 2.0 DeepSeek 最小对话这一节的目标是跑通“Java 代码 → Spring AI → DeepSeek → 返回结果”的完整链路。先用最小示例建立概念再逐步深入业务场景。4.1 引入依赖以 Maven 为例添加 Spring AI 的核心依赖。因为 DeepSeek 走的是 OpenAI 兼容协议所以需要引入 OpenAI 适配模块!-- 文件路径pom.xml -- dependencies dependency groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter-web/artifactId /dependency dependency groupIdorg.springframework.ai/groupId artifactIdspring-ai-openai-spring-boot-starter/artifactId version${spring-ai.version}/version /dependency /dependencies关于版本号建议去 Spring AI 官方仓库查看当前稳定版本统一用一个spring-ai.version属性管理。这里不要随便填一个数字到生产项目里。4.2 配置 application.yml关键配置是base-url和api-key。DeepSeek 的 API 地址是https://api.deepseek.com# 文件路径src/main/resources/application.yml spring: ai: openai: base-url: https://api.deepseek.com api-key: ${DEEPSEEK_API_KEY} chat: options: model: deepseek-chat temperature: 0.7说明api-key从环境变量DEEPSEEK_API_KEY读取避免把密钥提交到 Git。deepseek-chat是 DeepSeek 的通用对话模型。具体使用哪个模型名以你在开放平台看到的当前模型为准。temperature控制随机性。做文案生成可以调高一些做抽取和分类建议调低。4.3 编写对话接口Spring AI 2.x 中最常用的是ChatClient。我们可以把ChatClient注入到 Service 中// 文件路径src/main/java/com/example/ai/service/ChatService.java Service public class ChatService { private final ChatClient chatClient; public ChatService(ChatClient.Builder builder) { this.chatClient builder.build(); } public String chat(String message) { return chatClient.prompt() .user(message) .call() .content(); } public String chatWithSystem(String message, String systemPrompt) { return chatClient.prompt() .system(systemPrompt) .user(message) .call() .content(); } }引入ChatClient时Spring AI 会自动从配置文件中读取模型信息。它有点类似RestTemplate是上层统一入口。prompt()方法返回一个 Prompt 构建器我们可以继续追加 system 消息、user 消息也可以指定输出格式。4.4 写一个 Controller 测试// 文件路径src/main/java/com/example/ai/controller/ChatController.java RestController RequestMapping(/api/chat) public class ChatController { private final ChatService chatService; public ChatController(ChatService chatService) { this.chatService chatService; } GetMapping(/hello) public String hello(RequestParam(defaultValue 你好请介绍一下你自己) String message) { return chatService.chat(message); } }启动项目后访问http://localhost:8080/api/chat/hello?message用一句话说明Spring AI是什么如果看到模型返回了一段自然语言回答说明 DeepSeek 接入已经成功。从这一步可以明显感受到Spring AI 把 HTTP 调用、请求头拼装、JSON 解析全部封装掉了。你的业务代码不再关心模型协议只关心 Prompt 和响应类型。这种抽象带来的直接好处是未来如果从 DeepSeek 切到通义千问大概率只需要改配置而不需要动业务代码。5. 第二步LangChain4j DeepSeek 快速上手如果你在非 Spring 环境或者只是想快速验证一个 AI 功能点LangChain4j 会更快。它也适合和 Spring AI 结合使用Spring AI 管工程化链路LangChain4j 做灵活的 Agent 编排。5.1 引入依赖!-- 文件路径pom.xml -- dependency groupIddev.langchain4j/groupId artifactIdlangchain4j/artifactId version${langchain4j.version}/version /dependency dependency groupIddev.langchain4j/groupId artifactIdlangchain4j-open-ai/artifactId version${langchain4j.version}/version /dependencylangchain4j是核心库langchain4j-open-ai是 OpenAI 兼容协议的适配模块。DeepSeek 的 API 也兼容这个协议。5.2 创建模型并对话// 文件路径src/main/java/com/example/ai/langchain4j/LangChain4jDemo.java 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(DEEPSEEK_API_KEY)) .baseUrl(https://api.deepseek.com) .modelName(deepseek-chat) .temperature(0.7) .build(); String response model.generate(用三句话解释什么是RAG); System.out.println(response); } }这段代码不依赖 Spring 容器直接放在main方法里就能跑通。baseUrl指向 DeepSeek 的 API 地址modelName指向对话模型。LangChain4j 的ChatLanguageModel是一个核心接口它定义了同步生成、流式生成、工具调用等方法。如果你有 Python 的 LangChain 使用经验会发现 LangChain4j 的概念映射很直接。5.3 更优雅的 AI Service 方式LangChain4j 有一个很有特色的功能AI Service。你只要定义一个接口框架会自动生成实现类。// 文件路径src/main/java/com/example/ai/langchain4j/Assistant.java import dev.langchain4j.service.SystemMessage; import dev.langchain4j.service.UserMessage; public interface Assistant { SystemMessage(你是一个耐心的Java技术专家回答要简洁实用。) String answer(UserMessage String question); }创建一个实例并调用Assistant assistant AiServices.builder(Assistant.class) .chatLanguageModel(model) .build(); String answer assistant.answer(Spring AI 2.0 和 LangChain4j 怎么选);接口上的SystemMessage和UserMessage注解把 Prompt 定义和 Java 接口绑定在一起。这种方式比字符串拼接清晰很多也非常适合团队里统一 Prompt 规范。热词里提到的spring ai system reminder本质上也是围绕系统提示词做文章LangChain4j 的注解式写法值得参考。5.4 Spring AI 和 LangChain4j 怎么选很多新手会纠结二选一。我的判断是如果你已经用了 Spring Boot并且团队看重工程规范优先 Spring AI。如果你要快速做 Agent、工具调用原型或者项目不是 Spring 体系LangChain4j 更顺手。两者不是互斥关系。大型项目里Spring AI 负责对话出口和 RAGLangChain4j 负责某一个复杂 Agent 子流程是完全可行的。6. 第三步Spring AI Alibaba 向量库做 RAG对话接通的下一步是让模型“用你自己的数据说话”。热词里频繁出现qwen embedding、Milvus 调用示例、混合检索跟重排、ES 文档覆盖这些都指向 RAG检索增强生成落地场景。RAG 的思路是不要指望模型记住你的私有知识而是把私有知识提前切块、向量化、存入向量库。用户提问时先从向量库检索最相关的片段再拼进 Prompt 一起交给模型。6.1 为什么需要向量库普通数据库存储的是精确文本无法理解“语义相近”。向量库通过 Embedding 模型把文本转成数百上千维的浮点向量然后用余弦相似度或内积来寻找语义接近的内容。常见的向量库选型向量库特点适用场景Milvus分布式、大规模、检索性能强生产级 RAGElasticsearch自带向量检索能力企业已广泛使用与日志、搜索统一技术栈Redis轻量支持向量搜索小规模、快速验证pgvector基于 PostgreSQL 扩展不需要额外组件时Milvus 在 Java 生态中的热度一直很高Spring AI 官方也提供了 Milvus 的集成模块可以按 vector store 的方式直接使用。6.2 引入 Spring AI Alibaba 和 Milvus 依赖Spring AI Alibaba 的一个重要价值就是把国内模型和向量化组件统一纳入了 Spring AI 的抽象层。我们可以用统一的VectorStore接口操作 Milvus而不必关心 Milvus 的底层 SDK 细节。!-- 文件路径pom.xml -- dependency groupIdcom.alibaba.cloud.ai/groupId artifactIdspring-ai-alibaba-starter/artifactId /dependency dependency groupIdorg.springframework.ai/groupId artifactIdspring-ai-milvus-store/artifactId /dependency配置项大致如下# 文件路径src/main/resources/application.yml spring: ai: alibaba: embedding: enabled: true milvus: client: host: localhost port: 19530 database: default collection: knowledge_baseMilvus 默认端口是 19530。生产环境推荐使用云服务或内网地址避免暴露在外网。6.3 文档写入向量库避免重复添加的坑热词里有一个非常典型的问题Spring AI 将文档作为向量存入 ES 时每次都会添加一个文档怎么实现覆盖这个问题的本质是向量库写入没有做幂等。处理思路一般有两种第一种按业务文档 ID 去重。在写入向量库之前先删除同一个业务文档 ID 对应的旧向量再写入新向量。第二种按 collection/索引级别的生命周期管理。例如每次知识库更新时把当前 partition 清空再整体重灌。下面给一个基于VectorStore接口的通用写入示例。具体的删除方法名以你引入的版本为准思路是一致的// 文件路径src/main/java/com/example/ai/service/KnowledgeBaseService.java Service public class KnowledgeBaseService { private final VectorStore vectorStore; public KnowledgeBaseService(VectorStore vectorStore) { this.vectorStore vectorStore; } /** * 写入向量库前先清理旧文档避免重复添加。 * 实际项目中应该用业务文档ID精确删除。 */ public void saveDocument(String docId, String content) { // 1. 按业务ID删除旧向量这里注意不能误删其他文档 ListString idsToDelete List.of(docId); vectorStore.delete(idsToDelete); // 2. 切块 向量化 存入向量库 ListDocument documentList splitDocument(content); vectorStore.add(documentList); } private ListDocument splitDocument(String content) { // 建议使用 Spring AI 提供的 TokenTextSplitter 或自定义切块逻辑 // 切块大小根据实际内容调整通常 500-1000 token 一段 return List.of(new Document(content)); } }这里最关键的是任何向量库写入都必须考虑幂等性。如果只写vectorStore.add()每次执行任务都会累积一份新向量最终导致检索结果被重复内容污染。这也是“ES 覆盖文档”这类问题高发的根本原因。6.4 查询与混合检索RAG 查询不只是简单的向量相似度。生产项目里通常还会叠加关键词过滤、元数据过滤、重排rerank等步骤也就是热词里的“混合检索跟重排”。检索流程通常如下用户提问向量化。在 Milvus/ES 中召回 Top K 候选文档。先按业务条件过滤如时间、分类、权限范围。可选地通过重排模型对召回结果二次排序。将最终结果拼入 Prompt交给大模型生成回答。示例检索逻辑// 文件路径src/main/java/com/example/ai/service/RetrievalService.java Service public class RetrievalService { private final VectorStore vectorStore; public RetrievalService(VectorStore vectorStore) { this.vectorStore vectorStore; } public ListDocument retrieve(String query, int topK) { SearchRequest request SearchRequest.builder() .query(query) .topK(topK) .similarityThreshold(0.5) .build(); return vectorStore.similaritySearch(request); } }similarityThreshold是相似度阈值。阈值过低会召回很多无关内容过高则可能召回过少。这个参数需要结合你的 Embedding 模型和业务数据做调优没有万能值。7. 实战问题结构化输出如何定义实体类热词搜索里频繁出现“spring ai structured out 结构化输出 如何定义实体类”。这是一个非常实际的需求业务系统不希望模型回答一坨闲聊式的文本而是希望直接得到一个 JSON反序列化后就能当成对象使用。7.1 为什么需要结构化输出假设你要做一个“招聘简历信息抽取”功能从一段 JD 文本中抽取职位名称、薪资范围、技能要求。如果模型返回自由文本解析逻辑会非常痛苦。更合理的做法是让模型直接输出符合你定义的 Java 实体结构的 JSON然后通过 Jackson 反序列化。7.2 定义实体类// 文件路径src/main/java/com/example/ai/model/JdInfo.java public record JdInfo( String jobTitle, String salaryRange, ListString skills ) { }使用record定义实体非常简洁Spring AI 和 Jackson 都能很好地支持。7.3 通过 ChatClient 获取结构化结果Spring AI 的ChatClient提供了.entity()方法可以在调用模型时直接把输出内容解析为目标类型// 文件路径src/main/java/com/example/ai/service/JdParserService.java Service public class JdParserService { private final ChatClient chatClient; public JdParserService(ChatClient.Builder builder) { this.chatClient builder.build(); } public JdInfo parseJd(String jdText) { return chatClient.prompt() .system(你是一个招聘信息抽取助手。请从用户输入的JD文本中提取关键信息并输出JSON格式不要输出多余内容。) .user(jdText) .call() .entity(JdInfo.class); } }调用.entity(JdInfo.class)时Spring AI 会在底层生成严格的 JSON Schema 约束并在拿到模型输出后自动反序列化成JdInfo对象。这里容易踩的坑有三个模型输出的 JSON 和实体字段对不上。解决方法是字段名尽量与业务语义一致并在 system prompt 里把每个字段的含义写清楚。不要贪婪地在实体里塞几十个字段。字段越多模型出错概率越高。建议先抽核心字段跑通后再扩展。如果对 JSON 格式要求严格建议在pom.xml中引入 Jackson 并开启严格反序列化避免未知字段导致异常。7.4 使用第三方 JSON 校验兜底哪怕有了结构化输出也不能完全信任模型输出。生产中建议增加一层校验逻辑比如用 Jackson 反序列化。判断关键字段是否为空。不符合要求时让模型重新生成一次或返回业务错误码。把“模型输出”当成外部输入来对待是 AI 工程化和纯 Demo 的重要区别。8. 常见问题与排查思路这一节整理实际项目中最常遇到的问题。如果你运行时遇到报错可以按表格顺序排查。问题现象可能原因排查方式解决方案启动报错找不到 ChatClient Bean依赖未引入或版本不匹配检查 pom.xml 依赖和 Maven 依赖树引入 openai starter统一 spring-ai.version调用接口返回 401API Key 缺失或错误检查环境变量和配置项确认 Key 正确改用环境变量注入调用接口返回 404base-url 配置错误打印配置值确认模型 API 地址将 base-url 改为 https://api.deepseek.com模型返回内容不符合业务格式Prompt 不够明确或结构化输出配置缺失在测试工具中直接调用模型查看输出细化 system prompt使用 .entity() 约束输出向量库每次灌数据都重复写入前没有按业务ID删除旧向量查看向量库集合文档数量写入前删除同 ID 文档或重建 partition检索结果不相关切块过大、Embedding 模型不匹配、阈值过低逐个检查召回结果和相似度分数调整切块大小、换 Embedding 模型、调高阈值混合检索顺序不对没有做重排只做了向量相似度查看召回排序是否合理引入 rerank 模型或按业务权重二次排序流式输出中断网络超时或连接不稳定查看框架日志中的连接异常配置超时和重试必要时使用异步流式回调使用推理模型时提示 reasoning_content 必须回传多轮对话没有保留思维链字段确认 API 是否要求回传推理字段按模型文档要求处理或关闭思维链模式Spring AI 连接本地千问失败本地模型服务地址或协议不兼容检查本地模型服务端口和响应格式确认本地服务暴露 OpenAI 兼容端点8.1 关于调用超时Spring AI 底层使用 RestClient 或 WebClient 调用模型生产环境必须配置超时时间。模型推理通常比普通 HTTP 接口慢如果没有超时设置一旦模型服务异常会拖垮整个调用链。8.2 关于上下文数量限制热门搜索词里有“spring ai 如何指定关联的上下文的数量限制”这是很多新手忽略的问题。把全部历史消息都塞给模型既费钱又容易超过模型的 token 上限。实践中要做两件事设置窗口大小只保留最近的 N 轮对话。对超长 Prompt 做裁剪或摘要。9. 最佳实践与工程建议技术跑通之后更重要的是工程化意识。下面这些建议来自真实项目里更稳妥的做法不是“能跑就行”的 Demo 标准。9.1 API Key 绝对不能在代码里硬编码无论是 DeepSeek、通义千问还是其他模型API Key 都属于敏感凭证。建议开发环境使用环境变量或.env。生产环境使用配置中心或密钥管理服务。Git 仓库中通过.gitignore排除所有包含密钥的文件。9.2 统一 AI 调用出口不要把ChatClient、ChatLanguageModel散落在各个 Service 里。建议定义一个AiGateway或LlmService作为统一出口统一处理日志、鉴权、限流、重试和异常。// 文件路径src/main/java/com/example/ai/gateway/AiGateway.java Service public class AiGateway { private final ChatClient chatClient; public AiGateway(ChatClient.Builder builder) { this.chatClient builder.build(); } public String chat(String userMessage) { // 这里可以统一加日志、耗时统计、敏感词过滤 return chatClient.prompt() .user(userMessage) .call() .content(); } }9.3 对模型输出做“外部输入”处理模型输出天然不稳定。工程上要把它当作外部输入来校验不能直接信任。必要的措施包括JSON 解析失败时降级。关键字段为空时重试。对敏感内容做过滤。记录模型原始输出便于排查。9.4 RAG 不是一锤子买卖向量库和知识库上线后文档增删改是常态。你可以考虑这样设计为每个知识文档分配唯一业务 ID。写入新的向量前先清理旧版本。定期重建索引或验证召回质量。对切块大小、召回数量、阈值等参数做 A/B 试验。9.5 关注成本和延迟AI 接口是按 token 计费的RAG 检索和长上下文会显著增加成本。建议对输入 Prompt 做精简。不要无脑把整个知识库塞进上下文。开启日志或监控追踪每次调用的 token 消耗。高并发场景下配置连接池和限流防止打爆模型服务。9.6 Spring AI 与前端项目联调热词里有spring ai vue。常见做法是后端暴露若干 REST 接口前端通过 POST 请求或 SSE 接收流式回答。流式比一次性返回更适合对话体验。Spring AI 的ChatClient支持.stream()前端配合EventSource或fetch的 stream 读取即可。10. 总结与后续学习方向到这里已经把 Spring AI 2.0、LangChain4j、DeepSeek、Spring AI Alibaba 这条组合链路梳理完了。核心就三句话第一Java 系统接大模型不要再从 HTTP 调用的底层开始搭。Spring AI 2.0 已经能帮你做好模型抽象、结构化输出和 RAG 的基础设施。第二LangChain4j 仍然是值得保留的“轻骑兵”。它不绑 SpringAgent 开发方便适合在子系统里快速实现 AI 能力。第三国内生产级落地绕不开 Spring AI Alibaba。无论是通义千问、DeepSeek还是 Milvus、ES 向量检索它都提供了更贴近国情的集成方案。你下一步可以这样实践先按第 4 节跑通 Spring AI DeepSeek 的最小对话。再用第 5 节试一下 LangChain4j 的 AI Service 注解式调用感受简化程度。然后引入 Milvus按第 6 节做一个基于自己文档的 RAG 问答。最后用第 7 节的结构化输出把一个真实业务字段抽取场景落地。Spring AI 生态还在快速演进API 可能还会有调整。但只要你理解了抽象层、模型适配、向量检索、结构化输出这四条主线后续不管它怎么更新你都能快速跟上。建议先收藏这篇动手跑通一个最小链路再对照排查表解决实际报错。
返回列表