当前位置: 首页 > news >正文

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

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

  • 概述
  • 开发环境
  • 项目结构
    • pom.xml 文件
    • config 配置类
    • 控制层
    • 启动类
  • 验证
    • 千问模型
    • DeepSeek 模型

概述

本文是 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 文件

<projectxmlns="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 配置类

packagecom.junjiu.spring.ai.alibaba.demo.config;importcom.alibaba.cloud.ai.dashscope.api.DashScopeApi;importcom.alibaba.cloud.ai.dashscope.chat.DashScopeChatModel;importcom.alibaba.cloud.ai.dashscope.chat.DashScopeChatOptions;importorg.springframework.ai.chat.client.ChatClient;importorg.springframework.ai.chat.model.ChatModel;importorg.springframework.beans.factory.annotation.Value;importorg.springframework.context.annotation.Bean;importorg.springframework.context.annotation.Configuration;/** * program: Spring-AI-Alibaba-Demo * ClassName: LLMConfig * description: * * @author: 君九 * @create: 2026-05-22 22:02 * @version: 1.0 **/@ConfigurationpublicclassLLMConfig{privatefinalStringDEEP_SEEK_MODEL="deepseek-v4-pro";privatefinalStringQWEN_MODEL="qwen3.7-max";@Value("${spring.ai.dashscope.base-url}")privateStringbaseUrl;@Value("${spring.ai.dashscope.api-key}")privateStringapiKey;/** * 创建 ChatModel 模型对象,并注入到 Spring 容器中。 * @return */@BeanpublicChatModelqwenChatModel(){returnDashScopeChatModel.builder().dashScopeApi(DashScopeApi.builder().baseUrl(baseUrl).apiKey(apiKey).build()).defaultOptions(DashScopeChatOptions.builder().model(QWEN_MODEL).build()).build();}@Bean(name="qwenChatClient")publicChatClientqwenChatClient(){returnChatClient.create(qwenChatModel());}/** * 创建 ChatModel 模型对象,并注入到 Spring 容器中。 * @return */@BeanpublicChatModeldeepSeekChatModel(){returnDashScopeChatModel.builder().dashScopeApi(DashScopeApi.builder().baseUrl(baseUrl).apiKey(apiKey).build()).defaultOptions(DashScopeChatOptions.builder().model(DEEP_SEEK_MODEL).build()).build();}@Bean(name="deepSeekChatClient")publicChatClientdeepSeekChatClient(){returnChatClient.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(); } }

启动类

packagecom.junjiu.spring.ai.alibaba.demo;importorg.springframework.boot.SpringApplication;importorg.springframework.boot.autoconfigure.SpringBootApplication;importorg.springframework.boot.context.event.ApplicationReadyEvent;importorg.springframework.context.ApplicationListener;importorg.springframework.core.env.Environment;/** * program: Spring-AI-Alibaba-Demo * ClassName: MultipleLLMApplication * description: * * @author: 君九 * @create: 2026-05-22 21:29 * @version: 1.0 **/@SpringBootApplicationpublicclassMultipleLLMApplication{publicstaticvoidmain(String[]args){SpringApplication.run(MultipleLLMApplication.class,args);}publicApplicationListener<ApplicationReadyEvent>readyEventApplicationListener(Environmentenv){returnevent->{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

http://www.jsqmd.com/news/870934/

相关文章:

  • 如何让工艺工程师主导TVA应用开发
  • 革命性macOS窗口管理:Topit智能窗口置顶工具的深度解析与实战指南
  • STM32F103C8T6+TJA1042+UTA0403:一个CAN通讯新手踩过的所有坑(附完整接线图与代码)
  • 黄金回收白银回收铂金回收彩金回收店铺推荐中江县2026最新五家靠谱回收门店TOP5排行榜及联系方式推荐 - 前途无量YY
  • 黄金回收白银回收铂金回收彩金回收店铺推荐株洲县2026最新五家靠谱回收门店TOP5排行榜及联系方式推荐 - 前途无量YY
  • LingJing靶场+burp-labs:闭环式渗透实战教学系统
  • 三大核心优势打造离线版游戏王:YgoMaster免费畅玩指南
  • 三步轻松搞定B站视频下载:跨平台免费工具BilibiliDown完整指南
  • 手把手教你用ESP32C3驱动WS2812灯带:从RMT底层配置到彩虹灯效实现
  • TVA系统的工程化落地与生态构建
  • 编程启航,勉励前行
  • 3分钟免费解锁Cursor VIP:终极共享AI编程助手配置指南
  • 黄金回收白银回收铂金回收彩金回收店铺推荐竹山县2026最新五家靠谱回收门店TOP5排行榜及联系方式推荐 - 前途无量YY
  • 黄金回收白银回收铂金回收彩金回收店铺推荐中山市2026最新五家靠谱回收门店TOP5排行榜及联系方式推荐 - 前途无量YY
  • 3分钟快速上手:Res-Downloader全网资源下载终极指南
  • Open-AutoGLM项目学习
  • 不止于调试:用Jetson Xavier NX的UART连接传感器与Arduino,打造边缘计算小项目
  • 黄金回收白银回收铂金回收彩金回收店铺推荐忠县2026最新五家靠谱回收门店TOP5排行榜及联系方式推荐 - 前途无量YY
  • PROBAST评估框架:破解医疗AI预测模型偏倚风险
  • 重构网页渲染流程:Browsershot如何将PHP无头浏览器能力提升3倍效率
  • 黄金回收白银回收铂金回收彩金回收店铺推荐竹溪县2026最新五家靠谱回收门店TOP5排行榜及联系方式推荐 - 前途无量YY
  • Unity 2D跑酷开发全链路实战:从物理帧到对象池的工程化落地
  • 黄金回收白银回收铂金回收彩金回收店铺推荐周至县2026最新五家靠谱回收门店TOP5排行榜及联系方式推荐 - 前途无量YY
  • 高效实用的Windows 11优化工具:Win11Debloat让你的系统重获新生
  • Nodejs 后端服务如何集成多模型能力处理用户提问
  • Locale Remulator终极指南:轻松解决Windows游戏语言乱码问题
  • 【2】基于 Docker + YOLOv8 环境实现模型蒸馏实战(GTX1660S + Ubuntu22.04)
  • 全网最实用的网页完整保存手册:再也不怕点击才显示的内容消失了
  • 项目文档:基于STM32的温室大棚智能监控与无线调控系统设计
  • 2026新疆克拉玛依瓷砖空鼓翘边维修公司靠谱品牌排名:雨和虹防水维修/雨盛防水维修/秦鑫斌防水维修/森之澜漏水检测/能亿防水补漏/成诺防水修缮 - 雨和虹防水维修