Spring AI Alibaba: 支持国产大模型的Spring ai框架
Spring AI :java做ai应用的最好选择
过去,Java在AI应用开发方面缺乏一个高效且易于集成的框架,这限制了开发者快速构建和部署智能应用程序的能力。
Spring AI正是为解决这一问题而生,它提供了一套统一的接口,使得AI功能能够以一种标准化的方式被集成到现有的Java项目中。
此外,Spring AI与原有的Spring生态系统完美兼容,这意味着已经熟悉Spring框架的开发者可以无缝过渡到使用AI技术,无需学习全新的工具或语言。
同时,Spring AI也充分利用了Java面向对象编程的优势,允许开发者通过熟悉的编程模式来操作复杂的AI模型和算法,从而加速了从概念验证到生产环境的整个过程。
Spring AI极大地简化了在Java平台上构建智能应用的过程,促进了AI技术在更广泛场景中的应用。
Spring AI 框架的关键功能组件介绍
* 模型(Model)
一句话说明:模型是Spring AI的基础组件,能够执行各种自然语言处理任务,如文本生成、分类、翻译等。
输入输出举例:
- 输入:“请写一篇关于环保的文章。”
- 输出:“环境保护是我们共同的责任。随着工业化进程的加速,环境问题日益严峻……”
* 提示词模板(Prompt Template)
一句话说明:通过预定义好的结构化格式来帮助快速构建复杂的指令或请求。
输入输出举例:
- 输入模板:“{角色}在{地点}做{活动}。”
- 参数:角色:孙悟空 、 地点:花果山 、 活动:七十二变
- 具体实例化后输入:“孙悟空在花果山练习七十二变。”
* 嵌入(Embedding)
一句话说明:将文本转换为数值向量表示形式,便于进行相似度计算或其他数学运算。
输入输出举例:
- 输入:“今天天气真好!”
- 输出:一个高维空间中的向量,例如
[0.1, 0.5, -0.3, ...]
* 结构化输出(Structured Output)
一句话说明:使AI生成的内容遵循特定的数据结构,便于后续处理或分析。
输入输出举例:
- 输入:“列出我接下来一周的日程安排。”
- 输出:
{"Monday": "Meeting at 9AM", "Tuesday": "Dinner with friends at 7PM", ...} , 系统会自动转换为
对应Java的pojo对象。
* 检索增强生成(RAG)
一句话说明:结合外部知识库的信息来提高回答的质量和准确性。
输入输出举例:
- 输入:“告诉我关于太阳系的一些有趣事实。”
- 输出:“太阳系由八大行星组成,其中水星是最小也是最接近太阳的行星。土星以其壮观的环系统而闻名……”
* 函数调用(Function Calling)
一句话说明:允许AI根据需要直接调用外部API或函数完成特定任务。
输入输出举例:
- 输入:“查询北京今天的天气情况。”
- 输出:调用了天气API并返回了结果,如“今天北京晴朗,气温介于10°C到20°C之间。”
* 向量存储
一句话说明:用于保存大量文本嵌入向量,并支持高效检索相似文档。
输入输出举例:
- 输入:一段描述某种技术的文章。
- 输出:找到与该文章主题相近的其他文章列表。
Spring AI Alibaba:阿里云支持的智能应用开发框架
Spring AI Alibaba是阿里巴巴推出的一个专注于人工智能应用开发的框架,它基于Spring生态系统构建,旨在简化AI应用程序的开发流程。通过集成阿里云的强大算力和丰富的机器学习模型库,Spring AI Alibaba为开发者提供了一个高效、易用的平台来创建智能服务。其核心优势在于能够无缝对接国产大模型,如通义千问等,支持快速部署与调优;同时,该框架还强调了安全性、稳定性和可扩展性,使得企业级AI解决方案的实现变得更加简单快捷。此外,Spring AI Alibaba提供了详尽的文档和社区支持,帮助开发者轻松上手并充分利用阿里云资源进行创新。
使用Spring AI Alibaba开发聊天应用的详细指南
要基于Spring AI Alibaba实现一个支持流式返回的聊天API,首先需要确保你的开发环境已经配置好Java以及Maven。接下来,我们将通过几个步骤来构建这个应用:创建项目结构、添加依赖项、配置应用程序、编写服务层逻辑、设置控制器以处理HTTP请求,并最终测试我们的API。
接下来,需要添加必要的Maven仓库和项目依赖项。由于Spring AI Alibaba的某些版本尚未提交到Maven中央仓库,因此还需指定额外的仓库地址。
Maven仓库配置
在pom.xml
中添加如下仓库定义:
<repositories><repository><id>sonatype-snapshots</id><url>https://oss.sonatype.org/content/repositories/snapshots</url><snapshots><enabled>true</enabled></snapshots></repository><repository><id>spring-milestones</id><name>Spring Milestones</name><url>https://repo.spring.io/milestone</url><snapshots><enabled>false</enabled></snapshots></repository><repository><id>spring-snapshots</id><name>Spring Snapshots</name><url>https://repo.spring.io/snapshot</url><releases><enabled>false</enabled></releases></repository></repositories>
添加依赖
在pom.xml
中加入对Spring AI Alibaba的支持依赖以及Spring Boot的依赖声明:
<parent><!-- Spring Boot Starter Parent --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>3.3.4</version><relativePath /></parent><!-- Spring AI Alibaba Starter --><dependency><groupId>com.alibaba.cloud.ai</groupId><artifactId>spring-ai-alibaba-starter</artifactId><version>1.0.0-M2</version></dependency><!-- Other dependencies as needed -->
</dependencies>
4. 设置应用属性
在项目的application.properties
文件中配置之前获取的API Key和其他可能需要的参数:
spring.ai.dashscope.api-key=${AI_DASHSCOPE_API_KEY}
同时,确保你已经在系统环境变量中设置了AI_DASHSCOPE_API_KEY
,或者直接替换${AI_DASHSCOPE_API_KEY}
为实际值。
5. 编写Controller以支持CORS和流式响应
现在我们来编写一个Controller类,它将处理GET请求、启用CORS,并使用Flux作为输出类型。
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.*;
import reactor.core.publisher.Flux;@RestController
@RequestMapping("/ai")
@CrossOrigin(origins = "*") // 允许所有来源跨域访问
public class ChatController {private final ChatClient chatClient;@Autowiredpublic ChatController(ChatClient.Builder builder) {this.chatClient = builder.build();}@GetMapping(value = "/steamChat", produces = MediaType.TEXT_EVENT_STREAM_VALUE)public Flux<String> steamChat(@RequestParam String input) {return chatClient.prompt().user(input).stream().content();}
}
这里使用了@CrossOrigin
注解允许来自任何源的请求访问此端点。注意路径设置为/steamChat
,并且通过produces
指定了响应类型为文本事件流(Text Event Stream, 即SSE)。chatClient.prompt().user(input).stream().content()
这行代码负责根据用户输入调用AI服务,并以流的形式返回结果。
6. 测试API
现在可以通过发送POST请求到/api/chat
来测试这个聊天API。你可以使用Postman或者其他工具来进行测试,记得设置Content-Type为application/json
并将消息作为JSON字符串发送。
以上就是基于Spring AI Alibaba构建一个简单的聊天API的所有步骤。请根据实际需求调整代码细节,并参考阿里云官方文档获取更多关于如何使用其SDK的信息。
相关文章:

Spring AI Alibaba: 支持国产大模型的Spring ai框架
Spring AI :java做ai应用的最好选择 过去,Java在AI应用开发方面缺乏一个高效且易于集成的框架,这限制了开发者快速构建和部署智能应用程序的能力。 Spring AI正是为解决这一问题而生,它提供了一套统一的接口,使得AI功…...

ChatGPT4o、o1 谁才是最佳大模型?
如何选择合适的 ChatGPT 模型?OpenAI 更新细节与 GPTs 的深入解析 随着人工智能的发展,ChatGPT 已成为众多用户的强大助手,广泛应用于写作、编程、学习和商业等多个领域。然而,面对 OpenAI 提供的众多模型(如 GPT-4、…...

[笔记] 关于CreateProcessWithLogonW函数创建进程
函数介绍 https://learn.microsoft.com/zh-cn/windows/win32/api/winbase/nf-winbase-createprocesswithlogonw BOOL CreateProcessWithLogonW([in] LPCWSTR lpUsername,[in, optional] LPCWSTR lpDomain,[in] …...

Ubuntu的Qt编译环境配置
1、找不到C和C编译器 利用run文件安装QT6.8.0和QT5.12.2版本后,打开QtCreator时,找不到编译器。 可在终端中查找gcc和g版本,如果没有就安装。 gcc --version g --version 如果没有就安装: sudo apt-get install gcc sudo apt-…...

12 django管理系统 - 注册与登录 - 登录
为了演示方便,我就直接使用models里的Admin来演示,不再创建用户模型了。 ok,先做基础配置 首先是在base.html中,新增登录和注册的入口 <ul class"nav navbar-nav navbar-right"><li><a href"/ac…...

2020年计算机网络408真题解析
第一题: 解析:OSI参考模型网络协议的三要素 网络协议的三要素:语法 ,语义,同步(时序) 语法:定义收发双方所交换信息的格式 语法:定义收发双方所要完成的操作 网页的加载 …...
速盾:cdn高防服务器防火墙的特性是什么?
CDN高防服务器防火墙是一种专门为互联网应用提供安全防护的网络安全设备。它采用先进的技术和算法,通过对网络流量进行过滤和检测,以防止恶意攻击和非法访问,保障网络服务的可用性和安全性。CDN高防服务器防火墙的特性主要包括以下几个方面&a…...

小程序分包和预加载
一、目的 分包的目的: 提升小程序的首屏加载速度,其原理和PC端网页的路由懒加载非常类似。即当我们第一个打开一个小程序的时候,只加载主包以及一些公共的资源,当调到某个页面的时候,在加载该页面所在的分包…...

【MATLAB 串口调试+虚拟串口测试】
文章目录 前言一、matlab 串口二、测试串口1.从系统中获取串口号2.避免串口打开被占用3. 安装虚拟串口4. 打开串口助手和MATALB 进行测试 总结 前言 提示:这里可以添加本文要记录的大概内容: 项目需要: 提示:以下是本篇文章正文…...
mac 安装最新版nginx
1. clone最新版本源代码: git clone https://github.com/nginx/nginx.git 2. 下载PCRE 没有PCRE那我们就下,下载地址:https://sourceforge.net/projects/pcre/files/pcre/,笔者下载的pcre-8.45.zip,下载之后解压到ngi…...

极氪汽车困局:营销频繁车、产品力不足
“ 极氪汽车的“车上吃火锅”营销活动虽登上热搜,但因频繁忽视老用户和产品力不足的争议,并未赢得消费者好感,反而加剧负面印象。 ” 科技新知 原创 作者丨颜瞾 编辑丨蕨影 近日,背靠吉利集团的极氪…...
Icecream 与 Python 日志库及性能分析整合指南
简介 Icecream 是一个用于简化 Python 调试过程的库,它允许开发者轻松打印变量名和它们的值。Python 的 logging 库则提供了一个强大的日志记录系统,用于跟踪应用程序的运行情况。而性能分析则是评估代码执行效率的重要手段。本指南将介绍如何将 Icecre…...
请解读下面的程序:pat =re.compile(r‘\d+‘)res = pat.search(‘www.ddd996.com‘)res.group()
请解读下面的程序: pat re.compile(r\d) res pat.search(www.ddd996.com) res.group() 这段程序使用了正则表达式模块re来搜索字符串中的数字。首先,通过re.compile函数创建了一个正则表达式对象pat,该正则表达式是r\d,意味着匹…...
Fibonacci任意一位的值得算法
csDP写法 using System; class Program {static void Main(string[] args){Console.WriteLine("请输入一个非负整数:");// 读取用户输入while(true){string input Console.ReadLine();int n Convert.ToInt32(input);if (n < 0){Console.WriteLine(&…...
gbn,sr和tcp的区别
这是关于三种不同协议(GBN、SR、TCP)处理传输时序和丢包的行为比较。我们可以分别填充并解释它们的处理机制: GBN(Go-Back-N)协议: 类型发送方的计时器保存的是啥接收方收到失序的分组怎么办超时的时候发…...

FastGPT本地开发 之 通过Navicat管理MongoDB、PostgreSQL数据库
1. 背景 前期已经完成FastGPT的本地化部署工作,通过Docker启动FastGPT的相关容器即可运行。(共6个容器) 2.本地化开发 2.1 前置依赖 2.2 源码拉取 git clone gitgithub.com:labring/FastGPT.git2.3 数据库管理 本地化运行的FastGPT使用…...
hardhat部署智能合约
Hardhat安装 安装node 可以使用 nvm 安装node GitHub - nvm-sh/nvm: Node Version Manager - POSIX-compliant bash script to manage multiple active node.js versions 安装Hardhat 打开命令行工具,输入: mkdir hardhat-demo cd hardhat-demo npm i…...

界面控件DevExtreme中文教程 - 如何与Amazon S3和Azure Blob存储集成?
DevExtreme拥有高性能的HTML5 / JavaScript小部件集合,使您可以利用现代Web开发堆栈(包括React,Angular,ASP.NET Core,jQuery,Knockout等)构建交互式的Web应用程序。从Angular和Reac,…...
【ERROR】ubuntu source: not found
Ubuntu 24.04.1 LTS系统设置环境变量,执行 source ~/.bashrc出现错误: source command not found 解决方案:不需要处理( echo 以下你的环境变量,发现是生效的),ubantu系统 中 /bin/sh 通常链接到 dash,这…...

聚焦IOC容器刷新环节postProcessBeanFactory(BeanFactory后置处理)专项
目录 一、IOC容器的刷新环节快速回顾 二、postProcessBeanFactory源码展示分析 (一)模版方法postProcessBeanFactory (二)AnnotationConfigServletWebServerApplicationContext 调用父类的 postProcessBeanFactory 包扫描 …...
反射获取方法和属性
Java反射获取方法 在Java中,反射(Reflection)是一种强大的机制,允许程序在运行时访问和操作类的内部属性和方法。通过反射,可以动态地创建对象、调用方法、改变属性值,这在很多Java框架中如Spring和Hiberna…...

Linux-07 ubuntu 的 chrome 启动不了
文章目录 问题原因解决步骤一、卸载旧版chrome二、重新安装chorme三、启动不了,报错如下四、启动不了,解决如下 总结 问题原因 在应用中可以看到chrome,但是打不开(说明:原来的ubuntu系统出问题了,这个是备用的硬盘&a…...
HTML前端开发:JavaScript 常用事件详解
作为前端开发的核心,JavaScript 事件是用户与网页交互的基础。以下是常见事件的详细说明和用法示例: 1. onclick - 点击事件 当元素被单击时触发(左键点击) button.onclick function() {alert("按钮被点击了!&…...
关于 WASM:1. WASM 基础原理
一、WASM 简介 1.1 WebAssembly 是什么? WebAssembly(WASM) 是一种能在现代浏览器中高效运行的二进制指令格式,它不是传统的编程语言,而是一种 低级字节码格式,可由高级语言(如 C、C、Rust&am…...

智能仓储的未来:自动化、AI与数据分析如何重塑物流中心
当仓库学会“思考”,物流的终极形态正在诞生 想象这样的场景: 凌晨3点,某物流中心灯火通明却空无一人。AGV机器人集群根据实时订单动态规划路径;AI视觉系统在0.1秒内扫描包裹信息;数字孪生平台正模拟次日峰值流量压力…...

全志A40i android7.1 调试信息打印串口由uart0改为uart3
一,概述 1. 目的 将调试信息打印串口由uart0改为uart3。 2. 版本信息 Uboot版本:2014.07; Kernel版本:Linux-3.10; 二,Uboot 1. sys_config.fex改动 使能uart3(TX:PH00 RX:PH01),并让boo…...
Swagger和OpenApi的前世今生
Swagger与OpenAPI的关系演进是API标准化进程中的重要篇章,二者共同塑造了现代RESTful API的开发范式。 本期就扒一扒其技术演进的关键节点与核心逻辑: 🔄 一、起源与初创期:Swagger的诞生(2010-2014) 核心…...
Element Plus 表单(el-form)中关于正整数输入的校验规则
目录 1 单个正整数输入1.1 模板1.2 校验规则 2 两个正整数输入(联动)2.1 模板2.2 校验规则2.3 CSS 1 单个正整数输入 1.1 模板 <el-formref"formRef":model"formData":rules"formRules"label-width"150px"…...

springboot整合VUE之在线教育管理系统简介
可以学习到的技能 学会常用技术栈的使用 独立开发项目 学会前端的开发流程 学会后端的开发流程 学会数据库的设计 学会前后端接口调用方式 学会多模块之间的关联 学会数据的处理 适用人群 在校学生,小白用户,想学习知识的 有点基础,想要通过项…...
Java毕业设计:WML信息查询与后端信息发布系统开发
JAVAWML信息查询与后端信息发布系统实现 一、系统概述 本系统基于Java和WML(无线标记语言)技术开发,实现了移动设备上的信息查询与后端信息发布功能。系统采用B/S架构,服务器端使用Java Servlet处理请求,数据库采用MySQL存储信息࿰…...