前言


随着人工智能技术的快速发展,Spring生态也迎来了自己的AI模块——Spring AI。作为Java开发者,我们现在可以在熟悉的Spring环境中轻松集成各种AI能力。本文将带你快速入门Spring AI,并展示如何将其应用到实际项目中。

一、Spring AI简介


Spring AI是Spring官方推出的AI项目,旨在为Java开发者提供简单、一致的API来访问各种人工智能模型和服务。它的核心特点包括:

统一API:屏蔽不同AI提供商的技术细节

模块化设计:可按需引入特定功能

Spring风格:与Spring生态无缝集成

多模型支持:OpenAI、Azure OpenAI、HuggingFace等

官网: https://spring.io/projects/spring-ai

二、准备开发环境

(1)准备开发的大模型

以deepseek为例,去到其大模型API平台DeepSeek 开放平台,在其中获取自己的key

(注意创建出来的时候要保存,关掉窗口后将无法查看)

(2)准备springboot环境

首先创建一个普通的java工程,接下来导入maven依赖

   <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>3.3.8</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>



    <properties>
        <maven.compiler.source>17</maven.compiler.source>
        <maven.compiler.target>17</maven.compiler.target>
        <spring-ai.version>1.0.0-M5</spring-ai.version>
    </properties>

    <dependencies>
        <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>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.ai</groupId>
                <artifactId>spring-ai-bom</artifactId>
                <version>${spring-ai.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

之后进行环境配置,创建application.propeties

server.port=8899
spring.application.name=spring-ai-deepseek

spring.ai.openai.api-key=   #####你的key值
spring.ai.openai.base-url=https://api.deepseek.com
spring.ai.openai.chat.options.model=deepseek-chat
spring.ai.openai.chat.options.temperature=0.7

三 快速入门 

环境配置好后,我们就可以进行一个简单的测验

创建DeepSeekController

@RestController
@RequestMapping("/deepseek")
public class DeepSeekController {

    // DeepSeek AI 的 ChatModel
    @Autowired
    private OpenAiChatModel openAiChatModel;

    @GetMapping("/ai/generate")
    public String generate(@RequestParam(value = "message",
defaultValue = "hello") String message){
        // 调用 DeepSeek AI 生成文本
        String call = openAiChatModel.call(message);
        System.out.println(call);
        return call;
    }
}

测试,可以添加knife4j依赖,生成一个接口文档,地址为localhost:你程序的ip/doc.html

  <!-- 前后端分离中的后端接口测试工具,会生成一个接口文档 -->
        <dependency>
            <groupId>com.github.xiaoymin</groupId>
            <artifactId>knife4j-openapi3-jakarta-spring-boot-starter</artifactId>
            <version>4.3.0</version>
        </dependency>

启动SpringAiDemoApplication,在文档中进行测试

 可以看出deepseek给出了自己的回答,我们的快速入门成功

四  Spring AI的聊天模型

Spring AI 提供了一套简洁而强大的聊天模型接口,让开发者能够轻松集成各种AI聊天能力到Java应用中。下面我将介绍Spring AI的聊天模型接口及其使用方法。

(1)ChatClient接口

ChatClient 是一个接口,它定义了一个与聊天服务交互的客户端。这个接口主要用于创建聊天客户端对象,设置请求规范,以及发起聊天请求。

具体代码:

@RestController
public class ChatDeepSeekController {

    private final ChatClient chatClient;

    public ChatDeepSeekController(ChatClient.Builder chatClientBuilder) {
        this.chatClient = chatClientBuilder.build();
    }

    @GetMapping("/chat")
    public String chat(@RequestParam(value = "msg",defaultValue = "给我讲个笑话")
                           String message) {
        //prompt:提示词
        return this.chatClient.prompt()
                //用户输入的信息
                .user(message)
                //请求大模型
                .call()
                //返回文本
                .content();
    }
}

最后测试得知也同样可行,但是大家发现没有我们现在的chatclient初始化很麻烦所以可以写一个config,之后就可以实现便捷注入

//用于chatClient的构建
@Configuration
public class AIConfig {


    @Bean
    public ChatClient chatClient(ChatClient.Builder chatClientBuilder) {
        // 创建 ChatClient.Builder 实例
        return chatClientBuilder.build();
    }
}

       (2) 实现角色预设

Spring AI 提供了强大的角色预设(Persona)功能,允许开发者定义AI助手的角色、行为和响应风格。这个功能对于构建专业领域的对话系统特别有用。

实现方式:在config中配置

//用于chatClient的构建
@Configuration
public class AIConfig {


    @Bean
    public ChatClient chatClient(ChatClient.Builder chatClientBuilder) {
        // 创建 ChatClient.Builder 实例
        return chatClientBuilder.defaultSystem("你是一个医生").build();
    }
}

回答了相应的答案 ,说明我们的身份预设有用

(3)实现流式响应

1 call和stream的区别

(1)非流式输出 call:等待大模型把回答结果全部生成后输出给用户;

(2)流式输出stream:逐个字符输出,一方面符合大模型生成方式的本质,另一方面当模型推理效率不是很高时,流式输出比起全部生成后再输出大大提高用户体验。

2 编写Controller
@GetMapping(value = "/chat/stream",produces="text/html;charset=UTF-8")
public Flux<String> chatStream(@RequestParam(value = "msg") String message) {
    return chatClient.prompt().user(message).stream().content();
}

(4)Chatmodel模型

 

ChatModel接口作为核心,定义了与AI模型交互的基本方法。它继承自Model<Prompt, ChatResponse>,提供了两个重载的call方法:

public interface ChatModel extends Model<Prompt, ChatResponse> {
    default String call(String message) {...}
    @Override
    ChatResponse call(Prompt prompt);
}

在ChatModel接口中,带有String参数的call()方法简化了实际的使用,避免了更复杂的Prompt和 ChatResponse类的复杂性。但是在实际应用程序中,更常见的是使用ChatResponse call()方法,该方法采用Prompt实例并返回ChatResponse。

我们使用的ChatClient底层是使用ChatModel作为属性的,在初始化ChatClient的时候可以指定ChatModel,这里我们直接看底层源码:

//ChatClient(部分构造器代码)
static ChatClient create(ChatModel chatModel) {
    return create(chatModel, ObservationRegistry.NOOP);
}

今天就学了这么多,下次继续学习

Logo

欢迎加入DeepSeek 技术社区。在这里,你可以找到志同道合的朋友,共同探索AI技术的奥秘。

更多推荐