文章目录

前言

一、大模型基础:了解你的AI伙伴

1. 人工智能发展脉络

2. Transformer:大模型的“发动机”

3. 预训练与微调

4. 部署方式对比

二、Spring AI 入门

1. 环境要求

2. 核心架构

3. 快速上手:一个简单的聊天机器人

三、高级特性实战

1. 会话记忆(Chat Memory)

2. 提示词工程与安全

4. RAG(检索增强生成)

5. 多模态(Multimodal)

四、智能体(Agent)架构设计

五、MCP(模型上下文协议)—— 下一代AI集成标准

1. MCP Client(调用外部工具)

2. MCP Server(暴露自定义工具)

六、本地部署:Ollama + Spring AI

七、结语与展望


前言

随着大语言模型(LLM)的爆发式增长,如何将AI能力高效地集成到企业级Java应用中,成为了一个热门方向。Spring AI 正是为此而生——它将Spring生态的设计哲学(如依赖注入、工厂模式、AOP)带入人工智能领域,提供了一套统一、标准化的接口来对接各类大模型(如DeepSeek、OpenAI、阿里云百炼等)。

本文将带你系统性地梳理:从大模型基础原理,到Spring AI环境搭建,再到RAG、Function Calling、智能体和MCP协议等高级实战

一、大模型基础:了解你的AI伙伴

1. 人工智能发展脉络

  • 机器学习:基于数据统计训练模型。

  • 深度学习:模仿人脑神经网络,应用于图像识别、自然语言处理(NLP)。

  • 大语言模型(LLM):NLP领域的前沿成果,核心是基于Transformer架构。

2. Transformer:大模型的“发动机”

Transformer的核心是自注意力机制(Self-Attention)

  • 输入向量化:将文字转为数字(Embedding)。

  • 注意力计算:让模型同时“看到”一句话中所有词,并计算彼此间的关联强度。

  • 多层叠加:每一层提炼更复杂的语义,最终输出概率分布,预测下一个Token(文字单元)。

3. 预训练与微调

  • 预训练:在海量通用数据上学习语言规律,形成“知识库”。

  • 微调(Fine-tuning):针对特定领域(如法律、医疗),用专业数据进一步训练,提升专业表现。

4. 部署方式对比

方式 优点 缺点
云部署 前期成本低、运维简单、弹性扩展、全球访问 数据隐私风险、依赖网络、长期成本高
本地部署(如Ollama) 数据安全、无网络依赖、长期成本低、可定制 初期硬件投入大、运维复杂、部署周期长
开放API服务(如阿里云百炼) 零运维、即开即用、全球访问 数据隐私顾虑、长期成本累积、定制能力受限

二、Spring AI 入门

1. 环境要求

  • JDK版本:17 及以上。

2. 核心架构

Spring AI 提供了统一的ChatClient,通过配置不同的Starter依赖,可无缝切换模型提供商。

3. 快速上手:一个简单的聊天机器人

步骤1:引入依赖

<!-- Spring AI 父依赖管理 -->
<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework.ai</groupId>
            <artifactId>spring-ai-bom</artifactId>
            <version>最新版本</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

<!-- 具体模型依赖(例如OpenAI风格) -->
<dependency>
    <groupId>org.springframework.ai</groupId>
    <artifactId>spring-ai-openai-spring-boot-starter</artifactId>
</dependency>

步骤2:配置application.yml

spring:
  ai:
    openai:
      api-key: ${AI_API_KEY}
      base-url: ${AI_BASE_URL}  # 如使用DeepSeek,可替换为第三方代理地址
      chat:
        options:
          model: gpt-4
          temperature: 0.7

步骤3:编写Service

@Service
public class AIChatService {
    private final ChatClient chatClient;

    public AIChatService(ChatClient.Builder builder) {
        this.chatClient = builder
                .defaultSystem("你是一个专业的Java技术顾问。")
                .build();
    }

    public String chat(String userMessage) {
        return chatClient.prompt(userMessage).call().content();
    }
}

步骤4:流式输出(响应式编程)

public Flux<String> streamChat(String userMessage) {
    return chatClient.prompt(userMessage).stream().content();
}

注意:流式输出需配置对应的编码和解码器,前端需支持SSE或WebSocket。

三、高级特性实战

1. 会话记忆(Chat Memory)

大模型本身是无状态的。Spring AI通过ChatMemory接口和Advisor实现记忆管理。

实现方案

  • 定义ChatMemory Bean(可基于内存Map或Redis)。

  • ChatClient中通过Advisor引入:

@Bean
public ChatClient chatClient(ChatClient.Builder builder, ChatMemory chatMemory) {
    return builder
            .defaultAdvisors(new MessageChatMemoryAdvisor(chatMemory))
            .build();
}
  • 前端每次请求传递sessionId,相同ID自动共享历史上下文。

2. 提示词工程与安全

  • 最佳实践:明确指令、使用分隔符、分步骤拆解、提供Few-shot示例、指定JSON输出格式。

  • 攻击防范

    • 提示注入:使用分隔符隔离用户输入。

    • 越狱攻击:接入内容审核API(如阿里云Moderation)。

    • DoS攻击:限制输入最大Token长度。

  • 实现步骤

1, 定义Tool类,使用@Tool注解描述功能。

@Component
public class OrderTool {
    @Tool(description = "根据商品ID下单,返回订单号")
    public String createOrder(String productId) {
        // 调用业务Service
        return "订单创建成功,订单号:12345";
    }
}

2, 注册Tool到ChatClient

@Bean
public ChatClient chatClient(ChatClient.Builder builder, OrderTool orderTool) {
    return builder
            .defaultTools(orderTool)
            .build();
}

3, 大模型自动根据用户问题,决定是否调用createOrder方法。

4. RAG(检索增强生成)

解决大模型知识陈旧、无法访问私有数据的问题。

工作流程

  • 离线阶段:文档加载 → 分块(Split)→ 向量化(Embedding)→ 存入向量数据库。

  • 在线阶段:用户提问 → 问题向量化 → 检索相似片段 → 拼接Prompt → 调用大模型生成回答。

Spring AI实现(以Elasticsearch为例):

spring:
  ai:
    vectorstore:
      elasticsearch:
        index-name: knowledge_index
        dimensions: 1536  # 与Embedding模型一致
// 检索并增强回答
String answer = chatClient.prompt()
        .user("Spring Boot 3.0有哪些新特性?")
        .advisors(new QuestionAnswerAdvisor(vectorStore, SearchRequest.defaults()))
        .call()
        .content();

5. 多模态(Multimodal)

支持图像、音频、视频等输入。以阿里云百炼的qwen-omni-turbo为例:

Media imageMedia = new Media(MimeTypeUtils.IMAGE_PNG, imageFile.getBytes());
String response = chatClient.prompt()
        .user("描述这张图片的内容")
        .media(imageMedia)
        .call()
        .content();

四、智能体(Agent)架构设计

单一Prompt难以处理复杂业务。智能体通过任务分解+工具调用协同工作。

架构模式 特点 适用场景
增强型(单Agent) 输入→LLM→输出,带记忆和工具 简单问答
链式工作流 上一输出作为下一输入 多步骤处理(如生成→翻译→润色)
路由工作流 根据意图分发给不同专家模型 多领域处理
并行工作流 多模型同时处理,结果汇总 高可靠性/多角度分析
协调器工作流 中心调度动态生成子任务 复杂业务编排
评估-优化工作流 生成结果后自我反思反馈 质量敏感场景

五、MCP(模型上下文协议)—— 下一代AI集成标准

MCP(Model Context Protocol)是一种标准化协议,让AI能以结构化方式与外部工具、数据源交互,突破传统Function Calling的单体限制。

1. MCP Client(调用外部工具)

示例:让AI直接“打开网页”并截图。

  • 安装MCP浏览器控制服务(如playwright-mcp-server)。

  • 配置mcp-servers.json

  • Spring AI中通过ToolCallbackProvider自动注册所有MCP工具。

@Bean
public ChatClient chatClient(ChatClient.Builder builder, 
                             ToolCallbackProvider mcpTools) {
    return builder
            .defaultTools(mcpTools)
            .build();
}

2. MCP Server(暴露自定义工具)

你也可以将Java服务封装为MCP Server,供其他AI客户端调用,实现跨语言、跨平台的工具生态。


六、本地部署:Ollama + Spring AI

对于数据敏感或成本敏感的项目,可使用Ollama本地部署模型(如DeepSeek、Qwen等)。

集成方式

<dependency>
    <groupId>org.springframework.ai</groupId>
    <artifactId>spring-ai-ollama-spring-boot-starter</artifactId>
</dependency>
spring:
  ai:
    ollama:
      base-url: http://localhost:11434
      chat:
        options:
          model: deepseek-coder:6.7b

七、结语与展望

通过Spring AI,Java开发者可以几乎零成本地切入大模型应用开发。从基础的聊天补全,到高级的RAG、Function Calling、智能体编排,再到面向未来的MCP协议,Spring AI提供了一套完整、熟悉且强大的工具箱。

下一步建议

  • 尝试将RAG与ES结合,打造企业级知识库问答系统。

  • 探索多模态应用,如图生文、视频摘要。

  • 实践智能体路由模式,构建多专家协同系统。

注意:生产环境请务必做好敏感词过滤、输入长度限制、内容安全审核,以及合理的超时和重试机制。

Logo

欢迎加入DeepSeek 技术社区。在这里,你可以找到志同道合的朋友,共同探索AI技术的奥秘。

更多推荐