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 包扫描 …...

配置nginx服务通过ip访问多网站
过程概要 1.前提配置 关防火墙 关selinux 2.安装web服务程序nginx 3.查看nginx是否开启 4.为当前主机添加多地址(ip a) 5.自定义nginx配置文件通过多地址区分多网站 /etc/nginx/conf.d/test_ip.conf server { #标记为一个虚拟主机 } 6.根据配置…...

银河麒麟V10设置QT开发程序开机自启动
1、切换root用户: su root 2、进入/etc/xdg/autostart目录: cd /etc/xdg/autostart 3、创建一个test.desktop文件,文件名不一定命名为test,可以自己随意命名: touch test.desktop 4、完善test.desktop文件内容: …...

RabbitMQ高级特性详解
前言 RabbitMQ是一款广泛使用的开源消息队列软件,它基于AMQP(Advanced Message Queuing Protocol)标准实现。本文将带你深入了解RabbitMQ的一些高级特性,包括消息确认、死信队列、延迟队列、事务处理以及消息分发策略等ÿ…...

提升泛化能力的前沿方法:多任务学习在机器学习中的应用与实践
提升泛化能力的前沿方法:多任务学习在机器学习中的应用与实践 📋 目录 🧩 多任务学习的概念与动机🌐 多任务学习在自然语言处理中的应用案例🖼️ 多任务学习在计算机视觉中的应用案例⚙️ 项目实践:实现多…...

【小白学机器学习16】 概率论的世界观2
目录 一 从正态分布说起 1.1 正态分布是自然分布,是客观 1.2 万物不齐 1.3 中庸 1.4 动态平衡 正态分布,概率论都是一种世界观 一 从正态分布说起 1.1 正态分布是自然分布,是客观 世界是客观的,是不以人们的意志想法为转…...

洛谷 P9868 [NOIP2023] 词典
好久不写博客了,今天来水一篇 原题链接 初看此题在洛谷上的定位是黄题,实际上也并不是很简单。 其实主要就用到了贪心的思想,先说一下我在做题的时候是怎么想的吧。 先看了部分分,10分是很好拿的,再就分析题意&…...

跨浏览器免费书签管理系统
随着互联网信息的爆炸式增长,如何有效管理我们日常浏览中发现的重要网页,成为了每个重度互联网用户的需求。一个跨平台的书签管理网站能够帮助用户在不同设备之间无缝同步和管理书签。本文将分享如何使用 Python 和 SQLite 构建一个简单、易于维护的跨平…...

导出Excel的常用方法:从前端到后端的全面指南
导出Excel的常用方法:从前端到后端的全面指南 在现代Web应用中,导出数据为Excel文件是一个常见需求。无论是为了数据分析、记录保存还是简单的数据共享,Excel文件都因其广泛的兼容性和易用性而成为首选格式之一。本文将介绍几种常用的Excel导…...

uni-app中添加自定义相机(微信小程序+app)
一、微信小程序中 微信小程序中可以直接使用camera标签,这个标签不兼容app,官方文档 <cameradevice-position"back"flash"off":style"{ height: lheight px, width: lwidth px }"class"w-full"></c…...

Android中的SSL/TLS加密及其作用
Android中的SSL/TLS加密及其作用 SSL/TLS(Secure Sockets Layer/Transport Layer Security)加密技术是保护网络通信安全的关键技术之一,广泛应用于各种网络通信场景,包括Android应用开发。在Android中,SSL/TLS加密技术…...