Spring AI 真正进入现有 Java 系统时,首先需要解决的是 AI 能力应该放在哪个位置。实际设计可以归纳为三种典型方式:直接嵌入现有服务、独立建设 AI Service,以及为旧系统旁路增加 AI 服务。三种方式分别对应不同的业务规模、复用范围和改造成本。

一、AI 能力接入的架构问题
空白项目接入大模型通常只需要引入依赖、配置模型参数并创建 ChatClient。已有项目的情况复杂得多。AI 功能可能需要读取原有业务数据,复用用户身份和权限,经过统一网关访问,还可能依赖 Redis、数据库、配置中心等基础设施。因此,接入 Spring AI 时首先应确定 AI 能力与现有业务之间的关系。
这个判断可以从两个维度展开。第一个维度是业务耦合程度,即 AI 功能是否只属于某一个现有模块【 决定 AI 是否值得独立拆分,若只属于一个模块,那可以考虑直接嵌入该模块中**】** ;第二个维度是基础设施影响范围,即接入 Spring AI 是否需要改变原项目的 JDK、Spring Boot 或依赖体系【 若影响范围过大,则原系统不适合直接改造**】**。
基于这两个维度,可以进一步得到三种常见接入方式。
二、方式一:现有服务中的直接集成
第一种方式是在已有 Spring Boot 服务中直接加入 Spring AI 依赖,并把 AI 能力作为当前业务模块的一部分。
例如某个内容服务只需要增加标题生成、摘要生成或文本分类能力,这些功能与当前业务高度绑定,也不会被其他模块大量复用,此时直接集成通常最简单:
Content Service
├── 原有业务
├── 数据访问
└── Spring AI
└── ChatClient
这种方式的主要优势是调用链短。AI 代码可以直接使用当前 Service 已有的数据、权限和业务对象,无需额外增加远程接口。项目规模较小时,部署和调试成本也最低。
它适合三个条件:AI 功能数量较少;能力主要服务当前模块;现有 JDK 和 Spring Boot 版本可以满足 Spring AI 的依赖要求。
它的限制也很明确。随着 AI 功能继续增加,Prompt、Memory、RAG、Tool Calling 和模型配置会逐渐进入原业务服务。多个模块都需要 AI 时,还可能出现重复建设。因此,直接集成更适合作为轻量能力的接入方式。
三、方式二:独立 AI Service 的服务化设计
第二种方式是建立独立的 ai-service 或 aigc-service,把通用 AI 能力集中到一个服务中,再由其他业务模块调用**【独立服务,类似系统内部服务的一部分】**。
典型结构可以表示为:
Gateway
│
├── User Service
├── Order Service
├── Content Service
└── AI Service
├── Chat
├── RAG
├── Memory
└── Tool Calling
这种结构适合 AI 已经从单一功能发展为独立能力域的系统。例如多个业务同时需要知识问答、内容生成、语义检索和 Agent 能力,此时集中管理模型配置、Prompt、Memory 和 Tool,比把这些逻辑分别塞进不同业务服务更容易维护。
独立 AI Service 还有一个重要价值,就是可以按照 AI 请求自身的特点独立部署。模型请求通常具有较长响应时间,并且流式连接、Token 消耗和外部 Provider 调用与普通 CRUD 服务存在明显差异。将其拆成独立服务后,可以单独配置限流、扩容和资源监控,而不会直接影响核心业务模块。
因此,当 AI 能力开始被多个模块共享,或者已经形成明显独立的业务职责时,独立服务通常是更自然的选择。
四、方式三:旧系统的旁路接入方案
第三种方式主要面向历史系统。很多已有 Java 项目运行在较旧的 JDK 和 Spring Boot 版本上,如果为了接入 Spring AI 直接升级整个基础框架,可能同时引发 Spring Cloud、中间件客户端以及大量第三方依赖的兼容问题。
这类情况下,可以保持原系统基本不变,单独创建一个新的 AI 服务:
Legacy System
│
│ HTTP / RPC
↓
New AI Service
│
↓
LLM / Vector Store
旧系统只需要通过稳定接口向 AI Service 提供必要数据。新服务则使用符合 Spring AI 要求的运行环境,并独立管理模型、RAG 和 Agent 能力。【旁路服务,类似系统外部服务的一部分】
这种方案的核心价值是控制改造范围。原系统继续承担稳定业务,新服务承担新增 AI 能力。未来 AI 框架升级或模型 Provider 更换时,影响范围主要集中在新服务内部。
因此,对于运行时间较长、依赖复杂、升级风险较高的系统,旁路接入通常比整体升级更加稳妥。
五、三种方案的选型依据
三种方案没有固定的优先级,选择时可以依次判断四个问题。
第一,AI 能力是否只服务单一业务。功能非常轻且与当前模块强绑定时,可以直接集成。
第二,AI 能力是否会被多个业务复用。多个模块都需要模型、RAG 或 Agent 时,独立 AI Service 更容易形成统一能力。
第三,现有技术栈是否兼容。旧系统升级基础框架成本较高时,优先考虑旁路服务。
第四,AI 请求是否需要独立治理。如果需要独立扩缩容、限流或者隔离模型故障,服务化设计更合适。
因此,选型可以简化成:
轻量、单业务
→ 直接集成
多业务复用、AI 能力较多
→ 独立 AI Service
旧系统、升级风险较高
→ 旁路 AI Service
判断重点始终是业务边界和改造成本,而不是单纯追求更复杂的架构。
六、独立 AI Service 的最小工程结构
当确定需要建立独立 AI Service 后,第一版并不需要设计得过于复杂。一个最小结构已经足以支撑后续扩展:
ai-service/
├── pom.xml
├── AiApplication.java
├── controller/
│ └── ChatController.java
├── service/
│ └── ChatService.java
├── config/
│ └── SpringAiConfig.java
└── resources/
├── application.yml
└── application-local.yml
pom.xml负责引入 Spring AI 和模型 Provider 所需依赖;application.yml管理服务名称、端口和运行配置;SpringAiConfig装配 ChatClient 等核心组件;Controller 提供接口;Service 承担具体 AI 业务。
如果原系统已经使用服务注册中心和 Gateway,新 AI Service 应继续遵循原有约定,完成服务注册并增加对应路由。原系统采用多环境 Profile,新服务也应保持一致。这里真正需要坚持的原则是:AI Service 首先是已有工程体系中的一个正常 Java 服务,然后才是在这个服务内部加入模型能力。
七、总结
Spring AI 接入已有 Java 项目时,核心任务是确定 AI 能力与现有系统之间的边界。轻量且高度绑定的能力可以直接进入原服务;需要跨业务复用的能力适合建设独立 AI Service;旧系统存在较高升级风险时,可以通过旁路服务降低改造范围。
三种方式背后的判断逻辑始终一致:先分析业务耦合、能力复用、技术栈兼容和运行隔离需求,再决定 AI 应该放在哪里。Spring AI 提供的是模型应用开发能力,真正决定系统是否容易维护的,仍然是服务边界和接入方式本身。