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

相关推荐
ApiHug1 小时前
Mintlify、Stainless & ApiHug 在AI 时代的战略意义
人工智能
一直有一个ac的梦想1 小时前
cmu15445 2025fall lec 18 transactions with two-phase lock
java·开发语言·数据库
ai生成式引擎优化技术1 小时前
DLOS Kernel v0.5:从多Agent系统到AI操作系统内核的拐点
人工智能
技术路上的探险家1 小时前
Sa-Token 单点登录(SSO)三种模式大白话详解:告别重复登录
java·sa-token·单点登录·sso
CHEN5_021 小时前
深入理解 RAG(检索增强生成):核心流程、技术选型与进阶实战
人工智能·rag
@蔓蔓喜欢你1 小时前
团队协作工具:提升开发效率的利器
人工智能·ai
T.i.s1 小时前
parall scan(并行扫描)通俗理解
人工智能·深度学习
JAVA社区1 小时前
Java进阶全套教程(四)—— SpringMVC框架详解
java·开发语言·spring·面试·职场和发展
ㄣ知冷煖★1 小时前
统一网关架构实践:从 Token 鉴权到路由、策略与凭证池转发全链路解析
java·服务器·架构