1 SpringBoot整合Spring AI

前言

  Java程序员正式转AI了。Spring AI出来一年多了,但是我最近才开始学它。所以把我学习的方式,遇到的问题分享给大家,让大家少走弯路

  项目开源地址:gitee: https://gitee.com/huq01/rent

  其中rent-ai服务引入了Spring AI

1.1 pom引入依赖

  下面的pom一般写在父项目中,因为dependencyManagement是做版本管理的,不过写在子项目中也能跑起来

    <properties>
        <spring-ai.version>1.0.0</spring-ai.version>
    </properties>
    
    <dependencyManagement>
        <dependencies>
            <!--集成SpringAI正式版-->
            <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>

  有些坑跟大家分享下,B站上不少视频,引入的spring-ai-bom的版本是1.0.0-M6,这个版本是Spring团队开发过程中的一个中间版本,用于收集开发者反馈、测试新功能以及修复已知问题的版本,相当于开发版。而我所写1.0.0版本是前几天官方发布的正式版,所以建议大家都使用正式版,因为正式版更稳定,更可靠

  子项目pom如下:引入openai

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

  有些项目引入的是spring-ai-openai-spring-boot-starter,如下所示,但是我一开始引入它时,报错显示找不到这个依赖,查了半天才发现,正式版(也就是1.0.0版)没有这个依赖了,1.0.0-M6版倒是有这个依赖,估计是升级到正式版,依赖也有所变化

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

1.2 yml配置

  要填写api-key,这个是在阿里百炼平台申请的,申请步骤看下文

#端口
server:
  port: 8007

#服务名
spring:
  application:
    name: rent-ai
  # 数据库连接配置
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3306/rent-house
    username: root
    password: admin123

  ai:
    # openai表示在线调用,不是美国那个兄弟的OpenAI
    openai:
      # 填写阿里云百炼平台的url,而不是openai的url
      base-url: https://dashscope.aliyuncs.com/compatible-mode
      # 百炼平台上申请的key
      api-key: sk-c9b616dce94145bu8e924682c9f3a0a477
      chat:
        options:
          # 模型的名字,这里是千问
          model: qwen-max-latest
          # 模型温度,值越大,输出结果越随机
          temperature: 0.8
      embedding:
        options:
          model: text-embedding-v3
          dimensions: 1024

  这里大家可能有个误解,配置文件中的openai是指在线调用大模型的接口,不是美国那个兄弟的OpenAI,咱们在国内用不了它,得搭梯子才行

1.3 创建对话客户端

  客户端负责跟大模型建立连接

/**
 * @Description AI对话客户端
 * @Author huqing
 * @Date 2025/5/31 17:42
 **/
@Configuration
public class ChatClientConfig {

    /*@Bean
    public ChatMemory chatMemory() {
        return new InMemoryChatMemory();
    }*/

    @Bean
    public ChatClient chatClient(OpenAiChatModel model, ChatMemory chatMemory) {
        return ChatClient
                .builder(model)
                //系统提示词
                .defaultSystem("你是高级程序员,名字叫小胡,你擅长炒股,坚信能在大哥李琛的带领下能用1万赚到30万,围绕这个主题扩展介绍下去")
                .build()
                ;
    }
}

1.4 对话接口

  注意需要使用注解@RequiredArgsConstructor,表示无参构造,因为把ChatClient作为属性给引入了,没有加注解的话需要生成有参构造函数

/**
 * @Description AI对话接口
 * @Author huqing
 * @Date 2025/5/31 17:43
 **/
@RequiredArgsConstructor
@RestController
@RequestMapping("/api/chat")
@Tag(name = "AI对话接口")
public class ChatController {

    private final ChatClient chatClient;

    //如果不写produces = "text/html;charset=utf-8",大模型输出会乱码
    @GetMapping(value = "/chat", produces = "text/html;charset=utf-8")
    public Flux<String> chat(String prompt) {
        return chatClient.prompt().user(prompt).stream().content();
    }
}

1.5 测试

  浏览器输入:http://localhost:8007/api/chat/chat?prompt=我是谁

image-20250531234247119

2 阿里云百炼平台

  阿里云百炼平台官网:https://bailian.console.aliyun.com/

  新手用户点立即开通,会送免费的token,大模型接口是根据token的多少来收费的

image-20250531231626376

  我已经开通过,所以我点击登录就行,好处就是可以支付宝登录,不需要单独下载什么软件,也不需要单独创建账号,这点方便了很多

image-20250531231831042

  登录进去之后,点击 模型广场

image-20250531232049903

  API-KEY

image-20250531232138906

  创建我的API-KEY

归属业务空间,选择默认业务空间就行

image-20250531232317055

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐