Spring-Ai-Alibaba [04] 04-llm-platform-custom-demo

Spring-Ai-Alibaba 04 04-llm-platform-custom-demo

概述

本文是 Spring AI Alibaba 框架学习系列第四篇,

介绍 如何调用其他平台的大模型,

当前 Demo 中,同时使用 DeepSeek 平台大模型、官网地址:https://api-docs.deepseek.com/zh-cn/

代码上传至 Gitee:https://gitee.com/xbjct/spring-ai-alibaba-demo

开发环境

  • 基础框架: Spring Boot 3.5.14
  • AI 框架: Spring AI 1.1.2 + Spring AI Alibaba 1.1.2.2
  • 大模型: 阿里云通义千问 (qwen-plus)
  • 构建工具: Maven 3.9.11
  • JDK 版本: 21.0.10

项目结构

pom.xml 文件

xml 复制代码
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>com.junjiu.spring.ai.alibaba.demo</groupId>
        <artifactId>Spring-AI-Alibaba-Demo</artifactId>
        <version>1.0-SNAPSHOT</version>
    </parent>

    <artifactId>04-llm-platform-custom-demo</artifactId>
    <packaging>jar</packaging>
    <description>
        Demo01 ~ Demo03 的LLM 选用的一直是百炼平台,
        当前 Demo04 选用 DeepSeek:https://api-docs.deepseek.com/zh-cn/
    </description>

    <name>04-llm-platform-custom-demo</name>
    <url>http://maven.apache.org</url>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>

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

config 配置类

java 复制代码
package com.junjiu.spring.ai.alibaba.demo.config;

import org.springframework.ai.chat.client.ChatClient;
import org.springframework.ai.chat.model.ChatModel;
import org.springframework.ai.deepseek.DeepSeekChatModel;
import org.springframework.ai.deepseek.DeepSeekChatOptions;
import org.springframework.ai.deepseek.api.DeepSeekApi;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * program: Spring-AI-Alibaba-Demo
 * ClassName: LLMConfig
 * description:
 *
 * @author: 君九
 * @create: 2026-05-22 22:39
 * @version: 1.0
 **/
@Configuration
public class LLMConfig {

    // 从配置文件读取
    @Value("${spring.ai.dashscope.base-url}")
    private String baseUrl;

    @Value("${spring.ai.dashscope.api-key}")
    private String apiKey;

    @Value("${spring.ai.dashscope.chat.options.model}")
    private String model;


    @Bean
    public DeepSeekChatModel deepSeekChatModel() {
        return DeepSeekChatModel.builder()
                .deepSeekApi(DeepSeekApi.builder()
                        .baseUrl(baseUrl)
                        .apiKey(apiKey)
                        .build())
                .defaultOptions(
                        DeepSeekChatOptions.builder()
                                .model(model)
                                .build()
                )
                .build();
    }
    @Bean(name = "deepSeekChatClient")
    public ChatClient deepSeekChatClient() {
        return ChatClient.create(deepSeekChatModel());
    }
}

控制层

java 复制代码
package com.junjiu.spring.ai.alibaba.demo.controller;

import jakarta.annotation.Resource;
import org.springframework.ai.chat.client.ChatClient;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import reactor.core.publisher.Flux;

/**
 * program: Spring-AI-Alibaba-Demo
 * ClassName: DeepSeekController
 * description:
 *
 * @author: 君九
 * @create: 2026-05-22 22:50
 * @version: 1.0
 **/
@RestController
@RequestMapping("/deepseek")
public class DeepSeekController {

    @Resource(name = "deepSeekChatClient")
    ChatClient deepSeekChatClient;

    /**
     * 聊天对话
     * @param message
     * @return
     */
    @RequestMapping("/chat")
    public Flux<String> chat(@RequestParam(name = "message", defaultValue = "你是谁?") String message) {
        return deepSeekChatClient.prompt()
                .user(message)
                .stream()
                .content();
    }
}

启动类

java 复制代码
package com.junjiu.spring.ai.alibaba.demo;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.context.event.ApplicationReadyEvent;
import org.springframework.context.ApplicationListener;
import org.springframework.core.env.Environment;

/**
 * program: Spring-AI-Alibaba-Demo
 * ClassName: LlmPlatformApplication
 * description:
 *
 * @author: 君九
 * @create: 2026-05-22 22:35
 * @version: 1.0
 **/
@SpringBootApplication
public class LlmPlatformApplication {

    public static void main(String[] args) {
        SpringApplication.run(LlmPlatformApplication.class, args);
    }

    public ApplicationListener<ApplicationReadyEvent> readyEventApplicationListener(Environment env) {
        return event -> {
            System.out.println("\n🎉========================================🎉");
            System.out.println("✅ Application is ready!");
            System.out.println("AIALI_API_KEY=" + System.getenv("AIALI_API_KEY"));
            System.out.println("🎉========================================🎉\n");
        };
    }
}

验证

打开浏览器访问:http://localhost:5826/deepseek/chat

代码上传至 Gitee:https://gitee.com/xbjct/spring-ai-alibaba-demo

若有转载,请标明出处:https://blog.csdn.net/CharlesYuangc/article/details/161344688

相关推荐
不如语冰1 小时前
AI大模型入门-Python进阶-上下文管理与with语句
开发语言·数据结构·数据库·人工智能·pytorch·redis·python
科技新芯1 小时前
WAIC首个AI影视专场落地 万兴科技发布多重出海布局
人工智能·科技
日月新著1 小时前
2026年最新!五款高评Agent开源模型介绍:能自主干活的AI来了
人工智能·语言模型
M1A11 小时前
基于 Spring AOP 构建系统操作日志:从注解设计到异步落库的完整实战
java
柠檬味的Cat1 小时前
GEO优化系统哪个渠道商好
大数据·人工智能·python
GuWenyue1 小时前
等AI回复卡顿到劝退?Vue3+DeepSeek流式输出实战,70行代码实现打字机效果
前端·人工智能·客户端
RainCity1 小时前
Java Swing 自定义组件库分享(十五)
java·笔记·后端
farerboy1 小时前
23-Java 构造函数
java·后端
心易行者1 小时前
电商卖家必备!一张图讲透AI局部重绘怎么让你省下80%的修图时间
人工智能