Spring AI 极简入门:Java 开发者快速上手 AI 开发

Spring AI 是 Spring 官方推出的 AI 应用开发框架,让 Java 开发者用熟悉的 Spring Boot 方式,快速对接大模型,不用再死记不同 AI 平台的复杂 API,一套代码适配 OpenAI、通义千问、讯飞星火等主流模型。

一、核心优势(3 句话记住)

  1. 统一接口:用 ChatClient 一套 API 调用所有大模型,切换模型只改配置,不动业务代码。
  2. 零门槛集成:基于 Spring Boot 自动配置,引入依赖、配个密钥就能用。
  3. 功能齐全:支持聊天对话、上下文记忆、向量嵌入、RAG 知识库、结构化输出,满足日常 AI 需求。

二、基础快速上手(5 分钟跑通)

1. Maven 基础依赖

复制代码
<!-- OpenAI通用启动器 -->
<dependency>
    <groupId>org.springframework.ai</groupId>
    <artifactId>spring-ai-openai-spring-boot-starter</artifactId>
    <version>1.1.6</version>
</dependency>
<!-- 通义千问适配依赖 -->
<dependency>
    <groupId>org.springframework.ai</groupId>
    <artifactId>spring-ai-alibaba-spring-boot-starter</artifactId>
    <version>1.1.6</version>
</dependency>
<!-- 内存向量库(本地测试用) -->
<dependency>
    <groupId>org.springframework.ai</groupId>
    <artifactId>spring-ai-chroma-store-spring-boot-starter</artifactId>
    <version>1.1.6</version>
</dependency>

2. OpenAI 基础配置 application.yml

复制代码
spring:
  ai:
    openai:
      api-key: 你的OpenAI密钥
      chat:
        options:
          model: gpt-3.5-turbo

3. 基础对话接口

复制代码
@RestController
@RequestMapping("/ai")
public class AiController {
    private final ChatClient chatClient;

    public AiController(ChatClient.Builder builder) {
        this.chatClient = builder.defaultSystem("你是友好的AI助手").build();
    }

    // 单次无记忆对话
    @GetMapping("/chat")
    public String chat(@RequestParam String msg) {
        return chatClient.prompt().user(msg).call().content();
    }
}

三、扩展 1:上下文记忆(多轮对话,AI 记住历史聊天)

默认单次对话无记忆,每次请求都是全新会话,Spring AI 自带MessageChatMemory实现会话记忆。

改造 Controller

复制代码
@RestController
@RequestMapping("/ai")
public class AiController {
    private final ChatClient chatClient;
    // 内存会话存储,生产环境可换Redis持久化
    private final ChatMemory chatMemory = new InMemoryChatMemory();

    public AiController(ChatClient.Builder builder) {
        this.chatClient = builder
                .defaultSystem("你是友好的AI助手,记住我们之前的对话")
                .build();
    }

    // 带上下文多轮对话,sessionId区分不同用户会话
    @GetMapping("/chat/memory")
    public String chatWithMemory(@RequestParam String msg, @RequestParam String sessionId) {
        String res = chatClient.prompt()
                .user(msg)
                // 绑定会话记忆
                .chatMemory(chatMemory, sessionId)
                .call()
                .content();
        return res;
    }

    // 清空指定会话历史
    @DeleteMapping("/chat/clear")
    public String clearMemory(@RequestParam String sessionId) {
        chatMemory.clear(sessionId);
        return "会话" + sessionId + "历史已清空";
    }
}

使用示例

  1. 第一次请求:/ai/chat/memory?sessionId=user001&msg=我叫小明
  2. 第二次请求:/ai/chat/memory?sessionId=user001&msg=我叫什么名字? AI 会读取历史消息,正确回答你叫小明。

四、扩展 2:向量数据库 + RAG 知识库(本地文档问答)

场景:上传本地文档,AI 只基于文档内容回答,不胡说(RAG 检索增强生成)

1. 配置 Chroma 内存向量库

复制代码
spring:
  ai:
    chroma:
      client:
        host: localhost
        port: 8000

2. 向量工具类(文档入库、检索)

复制代码
@Service
public class RagService {
    private final VectorStore vectorStore;
    private final ChatClient chatClient;

    public RagService(VectorStore vectorStore, ChatClient.Builder builder) {
        this.vectorStore = vectorStore;
        this.chatClient = builder.defaultSystem("只根据提供的文档内容回答,不知道就说没有相关信息").build();
    }

    // 加载本地txt文档写入向量库
    public void loadDoc(File file) {
        DocumentReader reader = new TextReader(file);
        List<Document> docs = reader.get();
        // 文档切片
        TokenTextSplitter splitter = new TokenTextSplitter();
        List<Document> splitDocs = splitter.split(docs);
        // 存入向量库
        vectorStore.add(splitDocs);
    }

    // RAG问答:先检索向量库再交给AI
    @GetMapping("/rag/query")
    public String ragQuery(@RequestParam String question) {
        // 相似度检索
        List<Document> similarDocs = vectorStore.similaritySearch(SearchRequest.query(question).withTopK(3));
        // 拼接检索到的文档内容
        String context = similarDocs.stream()
                .map(Document::getText)
                .collect(Collectors.joining("\n=====\n"));

        String prompt = """
                参考资料:
                {context}
                用户问题:{question}
                """;

        return chatClient.prompt()
                .user(u -> u.text(prompt).param("context", context).param("question", question))
                .call()
                .content();
    }
}

五、扩展 3:通义千问模型完整适配(阿里大模型切换)

1. application.yml 通义千问配置

复制代码
spring:
  ai:
    alibaba:
      api-key: 阿里云百炼获取的api-key
      chat:
        options:
          model: qwen-turbo # 可选 qwen-plus、qwen-max

2. 通义千问专用对话接口(自动切换模型,代码无需大改)

复制代码
@RestController
@RequestMapping("/ai/qwen")
public class QwenController {
    // 自动注入通义千问ChatClient,切换模型仅改配置
    private final ChatClient qwenChatClient;
    private final ChatMemory chatMemory = new InMemoryChatMemory();

    public QwenController(@Qualifier("alibabaChatClient") ChatClient.Builder builder) {
        this.qwenChatClient = builder.defaultSystem("你是通义千问AI助手").build();
    }

    // 通义千问多轮记忆对话
    @GetMapping("/chat")
    public String chat(@RequestParam String msg, @RequestParam String sessionId) {
        return qwenChatClient.prompt()
                .user(msg)
                .chatMemory(chatMemory, sessionId)
                .call()
                .content();
    }
}

多模型共存小技巧

项目同时引入 OpenAI 和通义千问依赖,通过@Qualifier("alibabaChatClient")区分模型客户端,一套项目同时调用多款大模型。

六、整体总结

  1. 上下文记忆 :依靠ChatMemory实现多轮对话,用 sessionId 隔离不同用户会话,生产可替换 Redis 持久化;
  2. 向量数据库 RAG:文档向量化存入向量库,提问时先检索相关文档,解决 AI 幻觉、私有知识库问答;
  3. 通义千问适配:Spring AI 阿里专用 starter,配置密钥即可切换国产大模型,业务代码几乎不用改动;

Spring AI 统一抽象层极大降低 Java 接入 AI 成本,先掌握基础对话,再拓展记忆、知识库、国产大模型,就能快速开发企业内部 AI 问答、智能客服、文档助手等业务。

补充小提示

  1. InMemoryChatMemory 仅适合测试,线上使用 RedisChatMemory 持久化会话;
  2. Chroma 适合本地开发,生产推荐 Milvus、PGVector 向量数据库;
  3. 阿里云通义千问 API Key 在「阿里云百炼」平台申请,免费额度可用于学习测试。
相关推荐
A8ai_napiai4 分钟前
GPT-5.6三档定档7月7日+GEO市场爆发+Anthropic最严封禁:模型商的价格战与AI搜索的新战场
人工智能·gpt
YuK.W27 分钟前
Leetcode100: 70.爬楼梯、118.杨辉三角、198.打家劫舍
java·算法·leetcode
IT_陈寒40 分钟前
React的setState竟然不是立刻生效的,害我调试半天
前端·人工智能·后端
这不小天嘛41 分钟前
JAVA八股——redis篇
java·开发语言·redis
腾讯云大数据1 小时前
腾讯云大数据计算智能:从结构化 SQL 到多模态 AI Workload 的融合范式
大数据·人工智能·腾讯云
AI职业加油站1 小时前
大数据采集工程师:技术栈全景图与实战路径
大数据·人工智能·数据分析
code 旭1 小时前
不会编程也能做AI 量化交易工具:基于 MCP 协议的自然语言交易思路不会编程也能做AI 量化交易工具:基于 MCP 协议的自然语言交易思路
人工智能·ai·量化交易·mcp
AI服务老曹1 小时前
视觉算法模型管理完整流程:多版本上线、灰度发布与回滚的落地实践
人工智能·docker·音视频
机器之心2 小时前
Anthropic发现Claude「类意识工作台」!神秘J空间藏着没说出口的想法
人工智能·openai
AI实践录2 小时前
大模型架构:理解大模型预测输出文本的底层逻辑
人工智能