目录

一、Spring AI 简单实用例子

1、环境要求

2、Deepseek对话案例

(1)添加 Maven 依赖(pom.xml)

(2)配置文件(application.properties)

(3) 创建控制器(ChatController)

二、Chat Models 核心功能详解

1、基础聊天功能

2、流式聊天(Streaming Response)

3、运行时参数设置


一、Spring AI 简单实用例子

1、环境要求

Spring AI 构建于 Spring Boot 3.x 之上,因此对 Java 版本有明确要求:

  • 最低支持 JDK 17
  • 不再支持 JDK 8、11、16 等低于 17 的版本

请确保开发环境已安装并配置好 JDK 17 或更高版本。

2、Deepseek对话案例

本节以 Deepseek 模型为例,演示如何在 Spring Boot 应用中集成 Spring AI 实现基本的 AI 聊天功能。

(1)添加 Maven 依赖(pom.xml

<dependency> 
  <groupId>org.springframework.ai</groupId> 
  <artifactId>spring-ai-starter-model-deepseek</artifactId> 
</dependency>

(2)配置文件(application.properties

spring.application.name=SpringAIQuickStart

server.port=8080

#配置 Deepseek的基础URL、密钥和使用模型
spring.ai.deepseek.base-url=https://api.deepseek.com
#Deepseek开放平台申请,并设置
spring.ai.deepseek.api-key=${deepseek-api-key}
spring.ai.deepseek.chat.options.model=deepseek-chat

# 介于0和2之间,0表示随机性最小,2表示随机性最大。
spring.ai.deepseek.chat.options.temperature=0.8

(3) 创建控制器(ChatController

@Autowired
    private DeepSeekChatModel chatModel;

    @GetMapping("/generate")
    public String generate(@RequestParam(value = "message", defaultValue = "你是谁") String message) {
        System.out.println("收到消息:"+message);
        String result = chatModel.call(message);
        //模型返回的内容
        System.out.println(result);
        return result;
    }

二、Chat Models 核心功能详解

Spring AI 提供统一的 Chat Model API,屏蔽底层不同 AI 模型厂商的差异。支持主流模型平台,包括:

  • OpenAI(ChatGPT)
  • Anthropic(Claude)
  • Google Gemini
  • Amazon Bedrock
  • Ollama(本地模型)
  • Deepseek 等国产模型

所有模型均遵循一致的编程接口,便于灵活切换和维护。

1、基础聊天功能

@GetMapping("/generate")
    public String generate(@RequestParam(value = "message", defaultValue = "给我讲个笑话") String message) {
        System.out.println("收到消息:"+message);
        String result = chatModel.call(message);
        //模型返回的内容
        System.out.println(result);
        return result;
    }

2、流式聊天(Streaming Response)

流式输出可实现“逐字输出”效果,提升用户体验,尤其适用于网页聊天界面。

方式一:返回 Flux<ChatResponse>(含完整响应对象)

//流式获取模型返回的内容,获取返回的 ChatResponse 对象内容
    @GetMapping("/generateStream1")
    public Flux<ChatResponse> generateStream1(@RequestParam(value = "message", defaultValue = "给我讲个笑话") String message) {
        System.out.println("收到消息:"+message);
        var prompt = new Prompt(new UserMessage(message));
        return chatModel.stream(prompt);
    }

方式二:仅返回文本流 Flux<String>

    //流式获取模型返回的内容,获取返回的 Text 内容
    @GetMapping("/generateStream2")
    public Flux<String> generateStream2(
            @RequestParam(value = "message", defaultValue = "给我讲个笑话") String message,
            HttpServletResponse response) {
        // 避免返回乱码
        response.setCharacterEncoding("UTF-8");

        System.out.println("收到消息:"+message);
        var prompt = new Prompt(new UserMessage(message));

        return chatModel.stream(prompt)
                .mapNotNull(chatResponse -> chatResponse.getResult().getOutput().getText());
    }

3、运行时参数设置

对于一些请求可能需要不同的行为参数,例如:模型回复更高的随机性,这时候就需要在项目运行时进行参数覆盖,这就是Spring AI的运行时参数设置。

@GetMapping("/runtimeOptions")
    public String runtimeOptions(
            @RequestParam(value = "message") String message,
            @RequestParam(value = "temp", required = false) Double temp
    ) {
        System.out.println("收到消息:"+message);

        Prompt prompt;
        if (temp != null) {
            // 构建带 temperature 的 DeepSeekChatOptions,覆盖默认 temperature
            var opts = DeepSeekChatOptions.builder()
                    .temperature(temp)
                    .build();
            prompt = new Prompt(message, opts);
            System.out.println("使用运行时覆盖 temperature=" + temp);
        } else {
            // 无 temperature 传入时,使用默认配置
            prompt = new Prompt(message);
            System.out.println("使用默认 temperature");
        }

        ChatResponse resp = chatModel.call(prompt);
        String result = resp.getResult().getOutput().getText();
        System.out.println("模型返回:"+ result);
        return result;
    }

Logo

火山引擎开发者社区是火山引擎打造的AI技术生态平台,聚焦Agent与大模型开发,提供豆包系列模型(图像/视频/视觉)、智能分析与会话工具,并配套评测集、动手实验室及行业案例库。社区通过技术沙龙、挑战赛等活动促进开发者成长,新用户可领50万Tokens权益,助力构建智能应用。

更多推荐