Spring AI 开发实践

部署运行你感兴趣的模型镜像

一、 Spring AI 概述

1. Spring AI 简介

Spring AI 提供了统一的 API,让开发者可以方便地在 Spring Boot 项目中调用 AI 服务,支持文本生成、图像生成、聊天、嵌入等能力。

核心优势:

  • 屏蔽不同 AI 平台的差异
  • 提供统一的编程模型
  • 与 Spring Boot 无缝集成

2. 快速入门

2.1 添加依赖

假设你要集成 OpenAI,可以在 pom.xml 中添加:

<dependency>
    <groupId>org.springframework.ai</groupId>
    <artifactId>spring-ai-openai-spring-boot-starter</artifactId>
    <version>0.8.0</version>
</dependency>

其他平台如百度文心、阿里通义等也有对应 starter。


2.2 配置 API 密钥

在 application.yml 或 application.properties 中配置:

spring:
  ai:
    openai:
      api-key: sk-xxx
      base-url: https://api.openai.com/v1

2.3 编写代码示例

文本生成:

import org.springframework.ai.openai.OpenAiChatClient;
import org.springframework.ai.prompt.Prompt;
import org.springframework.ai.prompt.PromptTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

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

    @Autowired
    private OpenAiChatClient chatClient;

    @GetMapping("/chat")
    public String chat(@RequestParam String message) {
        Prompt prompt = new Prompt(message);
        return chatClient.call(prompt).getResult().getOutput();
    }
}

使用 PromptTemplate:

PromptTemplate template = new PromptTemplate("请用中文回答:{question}");
Prompt prompt = template.create(Map.of("question", "什么是Spring AI?"));
String answer = chatClient.call(prompt).getResult().getOutput();

3. 常用场景

  • 智能问答/客服机器人:集成聊天接口,实现自动回复。
  • 内容生成:自动生成文章、摘要、代码等。
  • 文本分析:情感分析、关键词提取、分类等。
  • 图像生成:调用 AI 绘图模型生成图片。
  • 嵌入/向量检索:用于知识库问答、语义搜索等场景。

4. 最佳实践建议

  1. 安全管理 API Key:使用环境变量或专用配置中心存储密钥。
  2. 合理设置超时和重试机制:避免因网络或服务故障导致请求失败。
  3. 限流与监控:防止滥用 API,及时发现异常流量。
  4. Prompt 设计:根据业务场景合理设计提示词,提升 AI 生成质量。
  5. 异常处理:对 AI 服务异常返回进行友好处理,提升用户体验。

5. 进阶功能

  • 多模型切换:Spring AI 支持配置多个模型,动态切换使用。
  • 自定义 Prompt 组件:可扩展 PromptTemplate,提高灵活性。
  • 与 Spring Data/Flow/Batch 集成:可用于数据处理、流程编排等场景。

6. 官方资源

二、Spring AI 主要功能详解

1. 统一集成主流 AI 服务商

Spring AI 支持对接多个主流 AI 平台,包括:

  • OpenAI(如 ChatGPT、GPT-4)
  • Azure OpenAI
  • Hugging Face
  • 百度文心一言
  • 阿里通义千问
  • Google Gemini
  • 其他逐步扩展的 AI 服务

开发者只需更换配置或依赖即可切换底层模型,无需修改业务代码。


2. 统一的 API 编程模型

Spring AI 提供了统一的接口和抽象类,开发者可以用一致的方式调用不同 AI 服务,包括:

  • 文本生成(Completion)
  • 聊天对话(Chat)
  • 图像生成(Image Generation)
  • 文本嵌入(Embeddings)
  • 文件/知识库问答(Retrieval Augmented Generation,RAG)

示例:

Prompt prompt = new Prompt("请用中文介绍Spring AI的主要功能。");
String result = chatClient.call(prompt).getResult().getOutput();

3. Prompt 管理与模板化

Spring AI 支持 PromptTemplate,可以灵活构建提示词,适用于复杂场景和参数化需求。

PromptTemplate template = new PromptTemplate("请用中文介绍:{topic}");
Prompt prompt = template.create(Map.of("topic", "Spring AI"));

4. 与 Spring 生态无缝集成

  • 支持 Spring Boot 自动配置
  • 与 Spring Web、Spring Data、Spring Flow 等深度集成
  • 支持通过依赖注入、REST API 暴露 AI 服务

5. RAG(检索增强生成)能力

Spring AI 提供 RAG 组件,支持将数据库、文档、知识库等结构化/非结构化数据与大模型结合,实现更精准的问答和信息检索。


6. 多模型/多服务切换

支持在同一个应用中配置和使用多个 AI 服务,实现灵活切换和负载均衡。


7. 流式响应与异步处理

Spring AI 支持流式输出(如 ChatGPT 的逐步生成),以及异步调用,提升用户体验和系统性能。


8. 安全、监控和扩展性

  • 支持 API Key 管理与安全配置
  • 支持限流、异常处理
  • 可扩展性强,方便定制和二次开发

总结

Spring AI 的主要功能就是让 Java/Spring 开发者可以以最简单、最一致的方式集成和使用主流 AI 能力,并且充分利用 Spring 生态的优势,实现高效、安全、可扩展的 AI 应用开发。

三、完整开发示例

1、项目准备

1.1 新建 Spring Boot 项目

可以用 IDEA 或 Spring Initializr 创建一个 Spring Boot 项目,选择依赖:

  • Spring Web
  • Spring AI OpenAI Starter

1.2 添加依赖

pom.xml 示例:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.ai</groupId>
    <artifactId>spring-ai-openai-spring-boot-starter</artifactId>
    <version>0.8.0</version>
</dependency>

版本号请参考 Spring AI 官网


2、配置 OpenAI API Key

application.yml 或 application.properties

spring:
  ai:
    openai:
      api-key: sk-xxx      # 你的 OpenAI 密钥
      base-url: https://api.openai.com/v1

3、核心代码开发

3.1 创建聊天接口

ChatController.java

package com.example.chatbot;

import org.springframework.ai.openai.OpenAiChatClient;
import org.springframework.ai.prompt.Prompt;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

@RestController
@RequestMapping("/chat")
public class ChatController {

    @Autowired
    private OpenAiChatClient chatClient;

    @PostMapping
    public String chat(@RequestBody ChatRequest request) {
        Prompt prompt = new Prompt(request.getMessage());
        return chatClient.call(prompt).getResult().getOutput();
    }
}

// 请求体模型
class ChatRequest {
    private String message;
    public String getMessage() { return message; }
    public void setMessage(String message) { this.message = message; }
}

3.2 可选:使用 PromptTemplate 优化提示词

如果需要更复杂的提示词,可以这样:

import org.springframework.ai.prompt.PromptTemplate;

@PostMapping("/template")
public String chatWithTemplate(@RequestBody ChatRequest request) {
    PromptTemplate template = new PromptTemplate("你是一名AI助手,请用中文回答:{question}");
    Prompt prompt = template.create(Map.of("question", request.getMessage()));
    return chatClient.call(prompt).getResult().getOutput();
}

4、前端测试

可以用 Postman 或 curl 测试接口:

curl -X POST http://localhost:8080/chat \
     -H "Content-Type: application/json" \
     -d '{"message":"什么是Spring AI?"}'

返回结果类似:

"Spring AI 是由 Spring 团队推出的用于集成主流大模型的 Java 框架……"

5、进阶功能(可选)

5.1 聊天上下文管理

如需多轮对话,可以维护一个会话历史列表,将历史消息拼接到 prompt 里。

5.2 流式响应

Spring AI 支持流式输出,可参考官方文档实现前端逐步展示回答。

5.3 多模型支持

如需支持多个 AI 服务,只需添加对应 starter 和配置,代码层面可以注入不同的 chatClient。


6、完整目录结构示例

src/
├── main/
│   ├── java/
│   │   └── com/example/chatbot/
│   │       ├── ChatController.java
│   │       └── ChatRequest.java
│   └── resources/
│       └── application.yml

7、常见问题与建议

  • API Key安全:生产环境请勿硬编码密钥,建议用环境变量或配置中心。
  • 异常处理:建议对 chatClient 的异常做统一捕获和处理,提升用户体验。
  • 限流防刷:可用 Spring Boot Actuator 监控接口调用量,防止滥用。、

创作不易,点赞关注,持续更新~~~

您可能感兴趣的与本文相关的镜像

Qwen3-8B

Qwen3-8B

文本生成
Qwen3

Qwen3 是 Qwen 系列中的最新一代大型语言模型,提供了一整套密集型和专家混合(MoE)模型。基于广泛的训练,Qwen3 在推理、指令执行、代理能力和多语言支持方面取得了突破性进展

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

猩火燎猿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值