Spring AI Alibaba

目录

前言:

一、Spring AI 和Spring AI Alibaba

二、Spring AI Alibaba快速入门

1.环境

2.ollama

3.阿里百炼


前言:

        2025年真的是AI大爆发的一年,以后无论是什么行业我想都需要AI+了,作为一名计算机人,你不学习AI就会被out。我在想以前的项目都叫做传统项目,以后的项目都会是传统+智能结合项目了,处在时代的风口,抓住机会趁现在就起飞吧!

        我在看现在关于Spring AI的资料很杂,并不像传统的那些存在了好长时间的技术,如框架、MySQL这些资料齐全。刚好在今年上半年跟随着老师接触过大模型,在做学校的大集训时也翻过Spring AI的官方文档,结合了传统项目加上了大模型进行了一个整合,我也不算是零基础了吧。现在想着再深耕一下Spring AI Alibaba,以下是我的自学笔记:

一、Spring AI 和Spring AI Alibaba

        我们先来了解一下什么是Spring AI?其官方文档是这样说的:

简介 :: Spring AI 中文文档

        Spring AI 项目旨在简化应用程序的开发过程,在不增加不必要的复杂性的前提下整合 AI(人工智能)功能。

        该项目从 LangChain 和 LlamaIndex 等著名 Python 项目中汲取灵感,但 Spring AI 并不是这些项目的直接移植。项目成立的信念是,下一波生成式人工智能应用将不仅仅是 Python 开发人员的专利,它将在多种编程语言中无处不在。

        也就是Spring AI = 让 Java 开发者用最少的代码,快速把各种 AI 能力(大模型、图像识别等)塞进自己的程序里。

        那么什么又是Spring AI Alibaba?再来看官方文档:

Spring AI Alibaba 概览-阿里云Spring AI Alibaba官网官网

        Spring AI Alibaba(SAA) 是一款以 Spring AI 为基础,深度集成百炼平台,支持 ChatBot、工作流、多智能体应用开发模式的 AI 框架。

        也就是Spring AI Alibaba = 用 Spring 的简单方式,调用阿里的 AI 服务(通义千问、阿里云 AI 等),省去适配阿里接口的麻烦。

        总结:Spring AI 是 Java 开发者调用各类 AI 服务(大模型、图像识别等)的统一简化工具;Spring AI Alibaba 是专门适配阿里系 AI 服务(通义千问、阿里云 AI 等)并深度融合其生态的定制版工具。

二、Spring AI Alibaba快速入门

        下面我们来使用Spring AI Alibaba来实现一个简单的聊天机器人吧!

1.环境

注:Spring Boot版本必须选择3.0以上的版本,JDK也必须选择17及以上

Spring Boot 3.4.4、JDK17、Spring AI Alibaba 1.0.0.2

pom.xml:

下面将使用两种方式调用大模型:ollama和阿里百炼,并使用两种方式输出:直接输出和流式输出。

<?xml version="1.0" encoding="UTF-8"?>
<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 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.hl</groupId><artifactId>spring-demo</artifactId><version>0.0.1-SNAPSHOT</version><name>spring-demo</name><description>spring-demo</description><properties><java.version>17</java.version><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding><spring-boot.version>3.4.4</spring-boot.version><spring-ai-alibaba.version>1.0.0.2</spring-ai-alibaba.version><spring-ai.version>1.0.0</spring-ai.version></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>com.mysql</groupId><artifactId>mysql-connector-j</artifactId><scope>runtime</scope></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><!-- spring-ai-alibaba --><dependency><groupId>com.alibaba.cloud.ai</groupId><artifactId>spring-ai-alibaba-starter-dashscope</artifactId></dependency><!-- ollama --><dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-starter-model-ollama</artifactId></dependency></dependencies><dependencyManagement><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-dependencies</artifactId><version>${spring-boot.version}</version><type>pom</type><scope>import</scope></dependency><dependency><groupId>com.alibaba.cloud.ai</groupId><artifactId>spring-ai-alibaba-bom</artifactId><version>${spring-ai-alibaba.version}</version><type>pom</type><scope>import</scope></dependency><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><build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><version>3.8.1</version><configuration><source>1.8</source><target>1.8</target><encoding>UTF-8</encoding></configuration></plugin><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><version>${spring-boot.version}</version><configuration><mainClass>com.hl.springdemo.SpringDemoApplication</mainClass><skip>true</skip></configuration><executions><execution><id>repackage</id><goals><goal>repackage</goal></goals></execution></executions></plugin></plugins></build></project>

2.ollama

application.yml:

spring:ai:ollama:base-url: http://localhost:11434chat:options:model: qwen2.5:3b#spring事务管理日志
logging:level:org.springframework.jdbc.support.JdbcTransactionManager: debug

 配置ChatClient:

@Configuration
public class ChatClientConfig {@Beanpublic ChatClient ollamaChatClient(@Qualifier("ollamaChatModel") OllamaChatModel ollamaChatModel) {return ChatClient.builder(ollamaChatModel).build();}}

controller测试:

调用两个接口进行直接输出和流式输出:

package com.hl.springdemo.controller;import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.extern.slf4j.Slf4j;
import org.springframework.ai.chat.client.ChatClient;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import reactor.core.publisher.Flux;@Slf4j
@RestController
public class ChatController {@Autowired@Qualifier("ollamaChatClient")private ChatClient ollamaChatClient;@GetMapping("/chat1")public String chat(@RequestParam(value = "question", defaultValue = "你是谁?") String question) {log.info("question: {}", question);String content = ollamaChatClient.prompt().user(question).call().content();return content;}@GetMapping(value = "/stream", produces = "text/html;charset=UTF-8")public Flux<String> streamChat(@RequestParam(value = "question", defaultValue = "你是谁?") String question){log.info("question: {}", question);return ollamaChatClient.prompt().user("你是谁?").stream().content();}
}

运行结果:

浏览器访问localhost:8080/chat1?question=你是谁?和localhost:8080/stream?question=你是谁?

流式输出是大模型持续返回一些话给你知道完成,现在我们使用的平台(通义和豆包)都是流式输出。

3.阿里百炼

        这是第二种调用大模型的方式,需要在阿里云百炼平台上开通服务并生成一个自己的API Key:

大模型服务平台百炼控制台

application.yml:
在上面的yml中继续配置,完整文件如下:

server:port: 8080spring:ai:ollama:base-url: http://localhost:11434chat:options:model: qwen2.5:3bdashscope:api-key: ${AI_DASHSCOPE_API_KEY}chat:options:model: qwen-max#spring事务管理日志
logging:level:org.springframework.jdbc.support.JdbcTransactionManager: debug

 配置ChatClient:

完整代码如下:

package com.hl.springdemo.config;import com.alibaba.cloud.ai.dashscope.chat.DashScopeChatModel;
import org.springframework.ai.chat.client.ChatClient;
import org.springframework.ai.ollama.OllamaChatModel;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;@Configuration
public class ChatClientConfig {@Beanpublic ChatClient ollamaChatClient(@Qualifier("ollamaChatModel") OllamaChatModel ollamaChatModel) {return ChatClient.builder(ollamaChatModel).build();}@Beanpublic ChatClient dashscopeChatClient(@Qualifier("dashscopeChatModel")DashScopeChatModel dashscopeChatModel) {return ChatClient.builder(dashscopeChatModel).build();}
}

在controller中添加接口:

@GetMapping("/chat2")public String chat2(@RequestParam(value = "question", defaultValue = "你是谁?") String question) {log.info("question: {}", question);String content = dashscopeChatClient.prompt().user(question).call().content();return content;}

配置环境变量:

打开idea的运行配置,添加环境变量:AI_DASHSCOPE_API_KEY=你的api-key

接着运行访问localhost:8080/chat2?question=你是谁?即可!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/news/916818.shtml
繁体地址,请注明出处:http://hk.pswp.cn/news/916818.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【GaussDB】内存资源告急:深度诊断一起“memory temporarily unavailable“故障

【GaussDB】诊断一起内存临时不可用的问题 &#x1f4cb; 背景 在客户测试环境中&#xff08;GaussDB 506.0 SPC0100 集中式&#xff09;&#xff0c;一个重度使用存储过程的系统&#xff0c;频繁出现内存临时不可用的问题(ERROR: memory is temporarily unavailable)。令人困…

FastDFS如何提供HTTP访问电子影像文件

Nginx 作为高性能的 Web 服务器和反向代理服务器&#xff0c;与 FastDFS 结合使用&#xff0c;本文主要介绍用于处理 FastDFS 存储文件的 HTTP 访问请求&#xff0c;方便客户端通过 HTTP 协议直接访问存储在 FastDFS 中的文件&#xff0c;在电子影像系统中&#xff0c;Nginx 可…

水面垃圾识别分割数据集labelme格式2111张8类别

数据集中有部分增强图片&#xff0c;注意为了提供模型泛化识别能力&#xff0c;有很少一部分不是水面垃圾。具体看图片数据集格式&#xff1a;labelme格式(不包含mask文件&#xff0c;仅仅包含jpg图片和对应的json文件)图片数量(jpg文件个数)&#xff1a;2111标注数量(json文件…

北京-4年功能测试2年空窗-报培训班学测开-第六十二天-模拟未通过,继续准备自我介绍项目介绍面试题中

今日产出&#xff0c;完成昨天模拟面试录音的重听和整理&#xff0c;完成自我介绍梳理&#xff0c;还重写了三个算法题&#xff0c;写了4个sql题。和同学打语音提问今天专注力不强&#xff0c;因为焦虑项目和面试题。关于项目&#xff0c;我理解的&#xff0c;老师以前录屏讲的…

自动化辅助工具教程

该工具支持全部平台使用

里程碑 | 1Panel开源面板GitHub Star数量突破30,000个!

截至2025年7月23日20:00&#xff0c;飞致云旗下开源项目——1Panel开源Linux服务器运维管理面板GitHub Star数超过30,000个&#xff01; 继Halo之后&#xff0c;1Panel成为飞致云旗下第二个GitHub Star数量超过30,000个的开源项目&#xff0c;也是飞致云旗下最快达成30,000个Gi…

雨雪雾冰全预警:交通气象站为出行安全筑起“隐形防护网”

冬季浓雾弥漫高速&#xff0c;能见度降至 50 米以下&#xff1b;夏季暴雨倾盆&#xff0c;低洼路段眨眼间积水成河…… 恶劣天气总是公路交通安全的大敌。关键时刻&#xff0c;交通气象站挺身而出&#xff0c;成为保障道路畅通与行车安全的科技尖兵。交通气象站专为复杂道路环境…

C++(面向对象之继承、多态)

一、继承前言在c里面&#xff0c;继承是指2个类之间的关系例如&#xff1a;有一个org类&#xff0c;功能很完善&#xff0c;体量很大&#xff0c;突然有一天&#xff0c;需求发生改变&#xff0c;org类不能满足新的需求&#xff0c;我们的第一想法是&#xff0c;复制 org 类代码…

【数据可视化-75】北京密云区2025年7月暴雨深度分析:Python + Pyecharts 炫酷大屏可视化(含完整数据、代码)

&#x1f9d1; 博主简介&#xff1a;曾任某智慧城市类企业算法总监&#xff0c;目前在美国市场的物流公司从事高级算法工程师一职&#xff0c;深耕人工智能领域&#xff0c;精通python数据挖掘、可视化、机器学习等&#xff0c;发表过AI相关的专利并多次在AI类比赛中获奖。CSDN…

Voxtral Mini:语音转文本工具,支持超长音频,多国语音

Voxtral是什么 Mistral AI 推出的 Voxtral 是一款强大的音频模型&#xff0c;专为语音交互打造&#xff0c;具备卓越的语音转写和语义理解能力。它提供 24B 和 3B 两种版本&#xff0c;分别适用于大规模生产和本地部署。Voxtral 支持多语言、长文本上下文、问答与总结&#xf…

React Native环境配置完整版(超详细)

目录 第一步&#xff1a;打开React Native官方网站 第二步&#xff1a;安装NVM与Node.js 一、安装NVM 二、使用NVM安装Node.js 三、NVM使用说明 四、环境变量配置 第三步&#xff1a;安装JDK 一、JDK介绍 二、下载与安装JDK 三、环境配置 四、验证是否配置成功 第四…

Rust 最短路径、Tide、Partial、Yew、Leptos、数独实践案例

基于Rust的Meta和pyrefly相关实例 以下是一些基于Rust的Meta和pyrefly相关实例的示例代码和用法。这些示例涵盖了常见的使用场景,包括元编程、代码生成、Python交互等。 基本元编程示例 使用Rust的宏和元编程功能生成代码。 macro_rules! greet {($name:expr) => {prin…

Microsoft-DNN NTLM暴露漏洞复现(CVE-2025-52488)

免责申明: 本文所描述的漏洞及其复现步骤仅供网络安全研究与教育目的使用。任何人不得将本文提供的信息用于非法目的或未经授权的系统测试。作者不对任何由于使用本文信息而导致的直接或间接损害承担责任。如涉及侵权,请及时与我们联系,我们将尽快处理并删除相关内容。 前…

Windows上WSL2实例与宿主机桥接网络实现局域网互通

在 WSL 2 中&#xff0c;默认使用 NAT 网络模式&#xff0c;这会导致 WSL 实例和宿主机所在的局域网无法直接互通。要让 WSL 2 和宿主机所在的局域网互通&#xff0c;可以通过以下步骤配置 wsl.conf 并结合宿主机网络设置&#xff0c;启用 WSL 2 的桥接模式&#xff1a;修改 ws…

程序代码篇---数据包解析

数据包解析是不同设备&#xff08;如电脑、ESP32 等嵌入式设备&#xff09;之间通信的核心环节。简单说&#xff0c;就是把收到的 "一串数据" 翻译成双方都能理解的 "具体信息"&#xff08;比如温度、湿度、命令等&#xff09;。下面介绍几种常见的数据包格…

【开发杂谈】用AI玩AI聊天游戏:使用 Electron 和 Python 开发大模型语音聊天软件

项目地址&#xff1a; GitHub | wfts-ai-chathttps://github.com/HiMeditator/wfts-ai-chat 前言 最近一个基于 AI 的聊天游戏 Whispers from the Stars&#xff08;群星低语&#xff09;的 Demo 版本发布了。《Whispers from the Star》是一款科幻主题互动游戏。背景设定在…

SQL优化系统解析

MySQL的安装就不讲述了, 本篇文章着重讲解sql优化 本篇是对B站颜群老师视频讲解的笔记梳理, 感兴趣的可以去看下老师的原视频: SQL优化 MySQL原理 1. MySQL逻辑分层: 连接层->服务层->引擎层->存储层(如图) 连接层&#xff1a;提供与客户端连接的服务服务层&#…

【机器学习案列-25】电信用户流失预测:从数据处理到模型评估

&#x1f9d1; 博主简介&#xff1a;曾任某智慧城市类企业算法总监&#xff0c;目前在美国市场的物流公司从事高级算法工程师一职&#xff0c;深耕人工智能领域&#xff0c;精通python数据挖掘、可视化、机器学习等&#xff0c;发表过AI相关的专利并多次在AI类比赛中获奖。CSDN…

【MATLAB代码】灰色预测与多项式预测、指数平滑预测的对比,包含预处理、模型构建和和可视化输出。模拟预测若干年的GDP,订阅后可查看完整代码,有中文注释

代码实现了灰色预测模型GM(1,1)在GDP预测中的应用,并结合线性回归、二次多项式回归和指数平滑模型进行对比分析。代码包含数据预处理、模型构建、可视化输出和误差验证四个核心模块,实现了从数据输入到预测结果展示的全流程。 文章目录 运行结果 MATLAB源代码 GM(1,1)模型数学…

搜索二维矩阵Ⅱ C++

编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target 。该矩阵具有以下特性&#xff1a; 每行的元素从左到右升序排列。 每列的元素从上到下升序排列。class Solution { public:bool searchMatrix(vector<vector<int>>& matrix, int target) {i…