Spring AI 开发 - 快速入门

先看效果

项目搭建

Spring AI 是 Spring 推出的一个项目,目标是提供统一的API抽象层,屏蔽不同AI模型和服务的底层差异,实现跨平台兼容性。

演示使用的模型是阿里的 qwq-32b。

环境要求:

JDK :17以上(包括17)

Spring Boot 版本:目前支持 3.4.X,3.5.X 发布后也会同步支持。

主要的 maven 依赖

XML 复制代码
<dependency>
    <groupId>org.springframework.ai</groupId>
    <artifactId>spring-ai-openai-spring-boot-starter</artifactId>
    <version>1.0.0-M6</version>
</dependency>

配置文件:

qwq-32b的接口类似于**openai ,**所以直接使用 openai 的配置即可,其他类 openai 的模型也是类似。

java 复制代码
spring:
  ai:
    openai:
      api-key: #申请的 key
      base-url: https://dashscope.aliyuncs.com/compatible-mode #api地址
      chat:
        options:
          model: qwq-32b # 模型名称

编写接口

创建 ChatClient。ChatClient 提供了与 AI 模型通信的 Fluent API,它支持同步和反应式(Reactive)编程模型。

java 复制代码
this.chatClient = ChatClient.builder(chatModel)
        .defaultSystem(DEFAULT_PROMPT)
        .defaultAdvisors(new MessageChatMemoryAdvisor(new InMemoryChatMemory()))
        .defaultAdvisors(new SimpleLoggerAdvisor())
        .defaultOptions(OpenAiChatOptions.builder().temperature(0.7d).build())
        .build();

创建接口,使用 SSE 响应结果,SSE 是一个单向的、从服务端向客户端推送数据的技术。使用SSE可以实时的将大模型的结果推送到前端。

java 复制代码
@GetMapping
public SseEmitter chat(String message) {
    SseEmitter emitter = new SseEmitter();
    // 先把结果返回,后续逐渐响应结果
    CompletableFuture.runAsync(() -> {
        chatClient.prompt(message).stream()
                .content()
                .doOnComplete(emitter::complete)
                .subscribe(result -> {
                    try {
                        emitter.send(result);
                    } catch (IOException e) {
                        throw new RuntimeException(e);
                    }
                });
    });


    return emitter;
}

完整的接口代码如下:

java 复制代码
package cn.salim.ai.controller;


import org.springframework.ai.chat.client.ChatClient;
import org.springframework.ai.chat.client.advisor.MessageChatMemoryAdvisor;
import org.springframework.ai.chat.client.advisor.SimpleLoggerAdvisor;
import org.springframework.ai.chat.memory.InMemoryChatMemory;
import org.springframework.ai.openai.OpenAiChatModel;
import org.springframework.ai.openai.OpenAiChatOptions;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.servlet.mvc.method.annotation.SseEmitter;


import java.io.IOException;
import java.util.concurrent.CompletableFuture;


@RestController
@RequestMapping("ai")
public class AiController {
    private static final String DEFAULT_PROMPT = "你是一个资深Java程序员,你熟悉各种JAVA框架,包括SpringBoot、Mybatis等等";


    private final ChatClient chatClient;


    public AiController(OpenAiChatModel chatModel) {
        this.chatClient = ChatClient.builder(chatModel)
                .defaultSystem(DEFAULT_PROMPT)
                .defaultAdvisors(new MessageChatMemoryAdvisor(new InMemoryChatMemory()))
                .defaultAdvisors(new SimpleLoggerAdvisor())
                .defaultOptions(OpenAiChatOptions.builder().temperature(0.7d).build())
                .build();
    }




    @GetMapping
    public SseEmitter chat(String message) {
        SseEmitter emitter = new SseEmitter();


        CompletableFuture.runAsync(() -> {
            chatClient.prompt(message).stream()
                    .content()
                    .doOnComplete(emitter::complete)
                    .subscribe(result -> {
                        try {
                            emitter.send(result);
                        } catch (IOException e) {
                            throw new RuntimeException(e);
                        }
                    });
        });


        return emitter;
    }




}
相关推荐
小杨勇敢飞15 小时前
UNBIASED WATERMARK:大语言模型的无偏差水印
人工智能·语言模型·自然语言处理
m0_6038887115 小时前
Delta Activations A Representation for Finetuned Large Language Models
人工智能·ai·语言模型·自然语言处理·论文速览
金融小师妹15 小时前
基于哈塞特独立性表态的AI量化研究:美联储政策独立性的多维验证
大数据·人工智能·算法
qinyia16 小时前
Wisdom SSH 是一款创新性工具,通过集成 AI 助手,为服务器性能优化带来极大便利。
服务器·人工智能·ssh
我真的是大笨蛋18 小时前
K8S-Pod(下)
java·笔记·云原生·容器·kubernetes
昨日之日200618 小时前
Wan2.2-S2V - 音频驱动图像生成电影级质量的数字人视频 ComfyUI工作流 支持50系显卡 一键整合包下载
人工智能·音视频
碳水加碳水18 小时前
Java代码审计实战:XML外部实体注入(XXE)深度解析
java·安全·web安全·代码审计
努力也学不会java19 小时前
【设计模式】 原型模式
java·设计模式·原型模式
方渐鸿20 小时前
【2024】k8s集群 图文详细 部署安装使用(两万字)
java·运维·容器·kubernetes·k8s·运维开发·持续部署
学亮编程手记20 小时前
K8S v1.33 版本主要新特性介绍
java·容器·kubernetes