别再以为 AI 开发只能用 Python 了。Spring AI 让 Java 开发者也能轻松接入大模型,本文将带你从零搭建一个智能对话应用。

前言

最近两年,AI 大模型的热度居高不下。作为 Java 开发者,我一度觉得这场盛宴与自己无关——毕竟市面上大部分 AI 教程都是 Python 的。

直到我发现了 Spring AI——一个专为 Spring 生态设计的 AI 应用开发框架。它让我能用熟悉的 Java 语法,快速调用大模型 API,构建智能应用。

今天我就带你用 Spring AI + 智谱 AI,从零搭建一个智能对话应用。整个过程不到 20 行代码。
 

一、什么是 Spring AI?

Spring AI 是 Spring 官方推出的 AI 开发框架,它的设计理念和 Spring Data、Spring Cloud 一脉相承——统一抽象、降低复杂度

Spring AI 的核心能力:

能力 说明
统一 API 一套代码对接 OpenAI、智谱、文心、通义等多家大模型
提示词模板 支持模板化 Prompt,便于复用
结构化输出 可将模型输出自动映射为 Java 对象
RAG 支持 内置文档加载、向量存储、检索增强
函数调用 支持 Tool Calling,让模型调用你的业务函数

简单说:用 Spring AI,你可以像写普通 Spring 代码一样开发 AI 应用。


二、环境准备

2.1 开发环境

  • JDK 17+

  • Maven 3.6+

  • IntelliJ IDEA

2.2 创建项目

访问 Spring Initializr,选择以下依赖:

  • Spring Web

  • Spring AI (需要添加 Spring Milestone 仓库)

或者直接使用我准备好的 pom.xml

xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
         http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>3.2.0</version>
    </parent>

    <groupId>com.example</groupId>
    <artifactId>spring-ai-demo</artifactId>
    <version>1.0.0</version>

    <properties>
        <java.version>17</java.version>
        <spring-ai.version>0.8.1</spring-ai.version>
    </properties>

    <repositories>
        <repository>
            <id>spring-milestones</id>
            <name>Spring Milestones</name>
            <url>https://repo.spring.io/milestone</url>
        </repository>
    </repositories>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.ai</groupId>
            <artifactId>spring-ai-zhipuai-spring-boot-starter</artifactId>
            <version>${spring-ai.version}</version>
        </dependency>
    </dependencies>
</project>

2.3 获取 API Key

去 智谱 AI 开放平台 注册账号,申请 API Key。新用户通常有免费额度,够你体验了。


三、配置与开发

3.1 配置文件

在 application.yml 中配置:

yaml

spring:
  ai:
    zhipuai:
      api-key: YOUR_API_KEY_HERE
      model: glm-4-flash

3.2 编写对话接口

创建一个 Controller:

java

package com.example.demo;

import org.springframework.ai.chat.ChatClient;
import org.springframework.ai.chat.ChatResponse;
import org.springframework.ai.chat.prompt.Prompt;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

@RestController
@RequestMapping("/ai")
public class AiController {

    @Autowired
    private ChatClient chatClient;

    @GetMapping("/chat")
    public String chat(@RequestParam String message) {
        // 直接调用大模型
        ChatResponse response = chatClient.call(new Prompt(message));
        return response.getResult().getOutput().getContent();
    }
}

就这么简单!启动项目,访问:

text

http://localhost:8080/ai/chat?message=你好,请介绍一下自己

你的第一个 Spring AI 应用就跑起来了。


四、进阶:带记忆的智能对话

上面的例子每次都是独立请求,没有上下文记忆。我们来加上对话历史。

4.1 添加内存管理

java

@Component
public class ChatService {

    private final ChatClient chatClient;
    private final Map<String, List<Message>> sessionHistory = new ConcurrentHashMap<>();

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

    public String chat(String sessionId, String userMessage) {
        // 获取或创建会话历史
        List<Message> history = sessionHistory.computeIfAbsent(sessionId, 
            k -> new ArrayList<>());
        
        // 添加用户消息
        history.add(new Message("user", userMessage));
        
        // 构建提示词(保留最近10轮对话)
        List<Message> recent = history.stream()
            .skip(Math.max(0, history.size() - 20))
            .collect(Collectors.toList());
        
        Prompt prompt = new Prompt(recent);
        ChatResponse response = chatClient.call(prompt);
        String aiMessage = response.getResult().getOutput().getContent();
        
        // 保存 AI 回复
        history.add(new Message("assistant", aiMessage));
        
        return aiMessage;
    }
    
    record Message(String role, String content) {}
}

4.2 添加接口

java

@RestController
@RequestMapping("/ai")
public class AiController {

    @Autowired
    private ChatService chatService;

    @GetMapping("/chat")
    public String chat(@RequestParam String sessionId, @RequestParam String message) {
        return chatService.chat(sessionId, message);
    }
}

现在你可以实现多轮对话了:

text

GET /ai/chat?sessionId=user001&message=我叫小明
GET /ai/chat?sessionId=user001&message=我叫什么名字?  // AI 会记得

五、实战案例:AI 编程助手

基于上面的框架,我们可以快速搭建一个 AI 编程助手,专门回答 Java 技术问题。

java

@Component
public class JavaAssistant {

    private final ChatClient chatClient;

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

    public String ask(String question) {
        String systemPrompt = """
            你是一个资深的 Java 技术专家,擅长 Spring Boot、微服务、并发编程等。
            请用中文回答,尽量给出代码示例,回答要简洁实用。
            """;
        
        Prompt prompt = new Prompt(List.of(
            new Message("system", systemPrompt),
            new Message("user", question)
        ));
        
        return chatClient.call(prompt).getResult().getOutput().getContent();
    }
}

六、总结

本文带你完成了:

  1. Spring AI 环境搭建 —— 5 分钟跑通第一个 AI 应用

  2. 对话记忆实现 —— 支持多轮对话

  3. Java 编程助手 —— 垂直场景应用

如果你想系统学习 AI 应用开发(Java + Python 双方向),我们整理了一套完整的课程体系,涵盖 Spring AI、LangChain、RAG 等企业级实战项目。课程大纲和学员作品可以在探维世纪官网JavaAI课程页查看。

Spring AI 让 Java 开发者不再被 AI 浪潮“抛弃”。你可以用熟悉的 Spring 生态,快速构建智能客服、代码助手、文档问答等应用。


互动话题:你用 Java 开发过 AI 应用吗?遇到过哪些坑?欢迎评论区交流。


本文为技术分享,部分代码已脱敏处理。如需转载,请联系作者。

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐