Spring-Ai-Alibaba [03] multiple-llm-client-demo

Spring-Ai-Alibaba 03 multiple-llm-client-demo

概述

本文是 Spring AI Alibaba 框架学习系列第三篇,介绍 项目中如何使用多个模型?

当前 Demo 中,同时使用 千问、DeepSeek 两个模型。

代码上传至 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>03-multiple-llm-client-demo</artifactId>
    <packaging>jar</packaging>
    <description>
        实现多个 LLM 模型,并使用不同的模型进行对话
    </description>

    <name>03-multiple-llm-client-demo</name>
    <url>http://maven.apache.org</url>

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

</project>

config 配置类

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

import com.alibaba.cloud.ai.dashscope.api.DashScopeApi;
import com.alibaba.cloud.ai.dashscope.chat.DashScopeChatModel;
import com.alibaba.cloud.ai.dashscope.chat.DashScopeChatOptions;
import org.springframework.ai.chat.client.ChatClient;
import org.springframework.ai.chat.model.ChatModel;
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:02
 * @version: 1.0
 **/
@Configuration
public class LLMConfig {

    private final String DEEP_SEEK_MODEL = "deepseek-v4-pro";
    private final String QWEN_MODEL = "qwen3.7-max";

    @Value("${spring.ai.dashscope.base-url}")
    private String baseUrl;

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

    /**
     * 创建 ChatModel 模型对象,并注入到 Spring 容器中。
     * @return
     */
    @Bean
    public ChatModel qwenChatModel() {
        return DashScopeChatModel.builder()
                .dashScopeApi(
                        DashScopeApi.builder()
                                .baseUrl(baseUrl)
                                .apiKey(apiKey)
                                .build()
                )
                .defaultOptions(
                        DashScopeChatOptions.builder()
                                .model(QWEN_MODEL)
                                .build()
                )
                .build();
    }
    @Bean(name = "qwenChatClient")
    public ChatClient qwenChatClient() {
        return ChatClient.create(qwenChatModel());
    }

    /**
     * 创建 ChatModel 模型对象,并注入到 Spring 容器中。
     * @return
     */
    @Bean
    public ChatModel deepSeekChatModel() {
        return DashScopeChatModel.builder()
                .dashScopeApi(
                        DashScopeApi.builder()
                                .baseUrl(baseUrl)
                                .apiKey(apiKey)
                                .build()
                )
                .defaultOptions(DashScopeChatOptions.builder().model(DEEP_SEEK_MODEL).build())
                .build();
    }
    @Bean(name = "deepSeekChatClient")
    public ChatClient deepSeekChatClient() {
        return ChatClient.create(deepSeekChatModel());
    }

}

控制层

复制代码
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.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

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

    @Resource(name = "qwenChatClient")
    private ChatClient qwenChatClient;

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

    /**
     * 调用 qwen 模型
     * @param message
     * @return
     */
    @GetMapping("/qwen")
    public String qwen(@RequestParam(name = "message", defaultValue = "你是谁?") String message) {
        return qwenChatClient.prompt()
                .user(message)
                .call()
                .content();
    }

    /**
     * 调用 deepseek 模型
     * @param message
     * @return
     */
    @GetMapping("/deepSeek")
    public String deepSeek(@RequestParam(name = "message", defaultValue = "你是谁?") String message) {
        return deepSeekChatClient.prompt()
                .user(message)
                .call()
                .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: MultipleLLMApplication
 * description:
 *
 * @author: 君九
 * @create: 2026-05-22 21:29
 * @version: 1.0
 **/
@SpringBootApplication
public class MultipleLLMApplication {
    public static void main(String[] args) {
        SpringApplication.run(MultipleLLMApplication.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/hello/qwen

DeepSeek 模型

http://localhost:5826/hello/deepSeek

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

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

相关推荐
星云低代码开发平台1 分钟前
AI 工作台记录删除与业务审计留存:三层数据边界设计
数据库·人工智能·架构
jay神7 分钟前
基于 YOLOv11 的无人机航拍小目标检测系统
人工智能·深度学习·yolo·目标检测·计算机视觉·无人机·计算机毕业设计
hflmwl810 分钟前
ImageMagick图像魔法跨平台图像处理软件下载
图像处理·人工智能·imagemagick·imagemagick图像魔法·imagemagick图像处理·imagemagick软件下载
jay神11 分钟前
基于 YOLOv8 的手势识别系统
人工智能·深度学习·yolo·机器学习·计算机视觉·目标跟踪·课程设计
和芯星通unicore12 分钟前
卫星信号消失的地方,定位如何继续?——解密和芯星通DR 航位推算算法
人工智能·算法·gnss·智能驾驶gnss模块
鬼手点金12 分钟前
单轮对话:最简单的 API 调用
java·服务器·前端·javascript·react.js·servlet·tomcat
北塔软件15 分钟前
从根因分析到协同执行,如何让AI运维真正落地?
运维·人工智能
mit6.82416 分钟前
Sonnet 5.5 多了between_tools
人工智能
蜡笔羊驼16 分钟前
ModuleNotFoundError: No module named ‘torchvision.transforms.functional_tensor‘
linux·人工智能·python
李航198320 分钟前
DeepDraw 网页版
人工智能·python·计算机视觉·ai·ai编程