Spring AI 全方位指南:从基础入门到高级实战

摘要

本文是一份关于 Spring AI 的综合性指南,旨在为 Java 开发者提供一个从零开始、逐步深入到高级应用的完整学习路径。文章将首先介绍 Spring AI 的核心价值、基础概念、核心依赖及基础用法。随后,将深入探讨如何通过引入智能顾问 (Intelligent Consultant)外部工具 (External Tools)模型上下文协议 (MCP - Model Context Protocol) 等高级概念,并结合编排器 (Orchestrator) 实现复杂业务逻辑,构建能够执行复杂任务的真正智能的应用。


1. Spring AI 是什么?

Spring AI 是一个旨在简化 AI 应用开发的 Spring 项目。其核心目标是提供一个统一的、遵循 Spring 设计哲学的编程模型,让开发者可以用一套标准的接口与多种背后的大语言模型(LLM)及 AI 服务进行交互。


2. 核心依赖解析 (Maven)

要使用 Spring AI,你需要在项目中添加对应的依赖。

  1. Spring AI BOM (Bill of Materials)

    dependencyManagement 中引入 BOM 以统一管理版本。

    xml 复制代码
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.ai</groupId>
                <artifactId>spring-ai-bom</artifactId>
                <version>1.0.0-M1</version> <!-- 请使用最新版本 -->
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>
  2. 核心与模型依赖

    • spring-ai-spring-boot-starter: 必需的核心依赖。
    • spring-ai-openai-spring-boot-starterspring-ai-tongyi-spring-boot-starter: 根据你选择的 LLM 提供商添加。
  3. MCP 与工具依赖 (关键)

    • spring-ai-mcp-client-boot-starter: 在你的主 AI 应用中添加,用于连接到远程的 MCP 服务器。
    • spring-ai-mcp-server-boot-starter: 用于创建一个独立的 Spring Boot 应用,作为 MCP 服务器来托管工具。

3. 基础核心概念

  • ChatClient / EmbeddingClient: 分别用于聊天和向量化文本的核心接口。
  • Prompt / PromptTemplate: 用于构建发送给模型的输入。
  • 记忆与上下文 (Memory and Context): LLM 本身是无状态的,必须在每次请求中手动传递对话历史。
  • RAG (检索增强生成): 让模型基于私有知识库回答问题的技术。

4. 基础使用方式

此部分与之前版本相同,主要展示不含外部工具时的 ChatClient 基础用法。


5. 高级概念:构建智能应用核心

  • 智能顾问 (Intelligent Consultant) - 决定"我是谁" : 通过系统提示 (System Prompt),为 AI 设定一个精准的专家角色和行为准则。

  • 外部工具 (External Tools) - 决定"我能做什么": 指的是 AI 可调用的 Java 方法。这些工具通过 MCP 协议暴露给 AI 模型。

  • 模型上下文协议 (MCP - Model Context Protocol) - 连接 AI 与真实世界 :

    根据 Spring AI 官方文档,MCP 是一套标准化协议 ,它使 AI 模型能够通过一致的接口 与外部工具和资源(如数据库、API)进行交互。它充当了 AI 模型与真实世界之间的桥梁 。MCP 最强大的特性在于它支持客户端/服务器 (Client/Server) 架构,允许将工具的实现与 AI 的核心逻辑解耦。

  • 编排器 (Orchestrator) - 业务流程的指挥官 :

    你应用中的业务逻辑层(如@Service),负责组合"顾问"身份、管理对话历史,并利用 MCP 机制(函数调用)与外部工具交互,以完成复杂任务。


6. 高级实战:打造智能顾问

此部分与之前版本相同,主要展示如何使用 SystemMessage 设定角色。


7. 高级实战:通过 MCP 集成外部工具

MCP 提供了两种集成外部工具的方式:本地函数客户端/服务器架构

方式一:本地函数 (In-Process) - 简单、一体化

这是最简单的方式,工具的定义和 AI 的调用逻辑在同一个 Spring Boot 应用中。

步骤 1: 在主应用中定义工具 Bean
java 复制代码
// 在你的主 AI 应用中
@Configuration
public class AiToolsConfig {
    @Bean
    @Description("获取指定城市的实时天气信息")
    public Function<WeatherRequest, String> weatherService() {
        return request -> {
            // ... 实际业务逻辑 ...
            return request.city() + "目前晴,25°C。";
        };
    }
}
步骤 2: 在主应用中启用工具

application.properties 中启用该函数。

properties 复制代码
spring.ai.openai.chat.options.model=gpt-4o
spring.ai.openai.chat.options.functions=weatherService

这种方式简单直接,适用于小型项目或工具与主业务逻辑紧密耦合的场景。

方式二:客户端/服务器架构 (Distributed) - 灵活、可扩展

这是 MCP 更强大、更推荐的用法,它将工具的实现与 AI 应用完全分离。

步骤 1: 创建一个独立的 MCP 服务器应用

这是一个全新的、独立的 Spring Boot 项目,它的职责就是托管和暴露工具。

  1. 添加依赖 : 在这个新项目的 pom.xml 中,添加 spring-ai-mcp-server-boot-starter
  2. 暴露工具 : 使用 @McpController@McpTool 注解来暴露你的工具方法。
java 复制代码
// 在 MCP 服务器应用中
import org.springframework.ai.mcp.McpController;
import org.springframework.ai.mcp.McpTool;
import org.springframework.stereotype.Component;

@Component
@McpController
public class WeatherToolProvider {

    public record WeatherRequest(String city, String unit) {}
    public record WeatherResponse(String temperature, String condition) {}

    @McpTool(name = "getRealTimeWeather", description = "获取指定城市的实时天气")
    public WeatherResponse getWeather(WeatherRequest request) {
        // ... 实际调用天气API的逻辑 ...
        return new WeatherResponse("25°" + request.unit(), "晴朗");
    }
}
  1. 配置并启动 : 在 application.properties 中配置服务器端口(例如 server.port=8081),然后像普通 Spring Boot 应用一样启动它。
步骤 2: 在主 AI 应用中配置 MCP 客户端

现在回到你的主 AI 应用(包含 ChatClient 的那个)。

  1. 添加依赖 : 确保 pom.xml 中有 spring-ai-mcp-client-boot-starter
  2. 配置客户端 : 在 application.properties 中,不再需要 spring.ai.openai.chat.options.functions。取而代之的是配置 MCP 客户端,指向刚刚创建的服务器。
properties 复制代码
# 在主 AI 应用的 application.properties 中
spring.ai.mcp.client.base-url=http://localhost:8081 # 指向你的 MCP 服务器地址
spring.ai.mcp.client.name=weather-client
# 启用该客户端发现的工具
spring.ai.openai.chat.options.mcp=weather-client 
优势
  • 关注点分离: AI 逻辑与工具的业务逻辑完全解耦。
  • 独立扩展: 工具服务器可以独立于 AI 应用进行部署、扩展和更新。
  • 集中管理: 可以创建一个中央工具服务器,为公司内的多个 AI 应用提供服务。
  • 多语言潜力: 理论上,任何能够实现 MCP 协议的服务都可以作为工具服务器。

8. 高级实战:业务编排 (Orchestrator)

无论你使用本地函数还是 C/S 架构,编排器的代码保持不变。这就是 Spring AI 抽象的强大之处。

java 复制代码
@Service
public class TravelOrchestrator {

    private final ChatClient chatClient;

    public TravelOrchestrator(ChatClient chatClient) {
        this.chatClient = chatClient;
    }

    public String planTrip(String destination) {
        String query = "我下周要去 " + destination + " 旅行,当地天气怎么样?帮我规划下行程。";
        
        // 这段代码完全不知道 getRealTimeWeather 工具是本地的还是远程的。
        // Spring AI 和 MCP 客户端在底层处理了所有发现和调用细节。
        return chatClient.call(query);
    }
}

9. 优化与最佳实践

  • 提示工程: 依然是第一要素。
  • 工具描述质量 : @Description@McpTool 中的描述必须清晰、准确。
  • 架构选择: 根据项目规模和团队结构,在"本地函数"和"C/S架构"之间做出明智选择。新项目或复杂系统推荐使用 C/S 架构。
  • 上下文管理: 在长对话中,需要考虑上下文窗口限制,采用滑动窗口或总结等策略。

结论

Spring AI 通过模型上下文协议(MCP)提供了一套强大且灵活的工具集成方案。从简单的本地函数到功能完善的客户端/服务器架构,MCP 真正地将 AI 的推理能力与 Spring 应用的工程能力、以及真实世界的业务系统连接在了一起,为构建能够处理复杂、多步骤任务的下一代企业级智能应用铺平了道路。

相关推荐
jieshenai几秒前
如何使用 AutoModel 保存与加载自定义模型
人工智能·自然语言处理
WangUnionpub几秒前
2026 国自然基金申请全周期时间线
大数据·人工智能·物联网·机器学习·计算机视觉
꧁Q༒ོγ꧂1 分钟前
算法详解(二)--算法思想基础
java·数据结构·算法
却道天凉_好个秋2 分钟前
OpenCV(五十三):Haar人脸识别
人工智能·opencv·目标跟踪·haar人脸识别
早日退休!!!3 分钟前
基于开源LLVM构建AI编译器的核心工作与原理解析
人工智能·开源
次元工程师!3 分钟前
Sa-Token完成路由鉴权
java·服务器·前端
Coding茶水间4 分钟前
基于深度学习的车型识别系统演示与介绍(YOLOv12/v11/v8/v5模型+Pyqt5界面+训练代码+数据集)
人工智能·深度学习·机器学习
Clarence Liu5 分钟前
LLM (1) 如何下载模型(mac)
人工智能·后端·深度学习
雨大王5126 分钟前
汽车总装参数优化如何提升生产效率?实战案例分享
人工智能
IT_陈寒7 分钟前
Redis 7.0 实战:5个被低估但超实用的新特性,让你的QPS提升40%
前端·人工智能·后端