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

【SpringAI】(二)让你的Java程序接入大模型——适合Java宝宝的大模型应用开发

开始之前,如果你对大模型完全没了解过,建议阅读之前的大模型入门文章:

【SpringAI】(一)从实际场景入门大模型——适合Java宝宝的大模型应用开发

那么今天就开始写一个基于Spring AI程序的HelloWord!将大模型接入到咱们的JAVA程序中!
各位铁汁看的过程中一定要跟着实践一下啊!

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

一、SpringAI简介

目前大多数的大模型应用开发都是基于Python的,实际上Spring也发布了应用于AI领域的框架,那就是SpringAI。SpringAI提供了与多种大模型对接的功能。通过它,咱们能够轻易得将AI集成到Java程序中。

截止到当前(2024年10月15日),SpringAI官网还没有正式版,只有1.0.0-SNAPSHOT、1.0.0-M2、1.0.0-M3。建议大家选择M版本,SNAPSHOT版本表示处于开发中,可能不稳定。

在这里插入图片描述

最新的版本信息和相关文档大家可以到Spring官网去查看:SpringAI官网地址

二、大模型的选择-通义千问

1、通义千问

本次学习案例大模型选择的是阿里云的通义千问(Qwen)。它是一个大型语言模型系列,能够生成与给定提示相关的连续文本,并在各种任务上具有广泛的能力。

如果同学们想选择选择其他的大模型,当然也可以去尝试:

  • 智谱AI大模型:智谱AI大模型官网链接
  • 千帆大模型:千帆大模型官网链接
  • Moonshot大模型:Moonshot大模型官网

2、申请API-KEY

要想使用通义千问,需要到阿里云百炼平台。
如果顶部如图显示,说明你需要开通这项服务。

在这里插入图片描述

开通成功后申请自己API-KEY。进行登录注册后,鼠标移动至右上角头像并点击API-KEY
在这里插入图片描述

之后再创建API-KEY,点击查看你就能看到你具体的API-KEY了。

在这里插入图片描述

对了,目前开通后会送定量限时的免费额度哦!大家快去试试!

三、搭建SpringAI项目

1、环境选择

由于SpringAI要求SringBoot版本必须是3.2.x或者3.3.x,并且SringBoot 3.2.x 以上的版本要求JDK版本是17,所以我们要使用SpringAI,SpringBoot版本和JDK版本都应该满足需求。

2、导入相关依赖

2.1 导入SpringAI依赖并且配置仓库
<dependencyManagement><dependencies><dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-bom</artifactId><version>1.0.0-M2</version><type>pom</type><scope>import</scope></dependency></dependencies></dependencyManagement>
    <repositories><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>

注意:导入依赖后可能会出现该错误:

Non-resolvable import POM: Failure to find org.springframework.ai:spring-ai-bom:pom:1.0.0-M2 in https://maven.aliyun.com/repository/public was cached in the local repository, resolution will not be reattempted until the update interval of alimaven has elapsed or updates are forced

该错误的原因大概率是因为你的maven镜像地址配置的阿里云仓库地址,然后目前阿里云仓库还没有SpringAI的坐标,所以会找不到SpringAI的依赖。

基于这个原因,我们只需要修改Maven中的setting.xml原有的镜像信息,不仅仅只有阿里云仓库地址,我们也可以引入其他的镜像地址。

修改后可参考:

  <mirrors><!--在 mirrors 标签下 添加阿里云maven私服库--> <mirror><id>alimaven</id><mirrorOf>central</mirrorOf><name>aliyun maven</name><url>https://maven.aliyun.com/repository/public</url></mirror><mirror>  <id>ui</id>  <mirrorOf>central</mirrorOf>  <name>Human Readable Name for this Mirror.</name>  <url>http://uk.maven.org/maven2/</url>  </mirror>  </mirrors>
2.2 导入通义千问依赖
<dependency><groupId>com.alibaba</groupId><artifactId>dashscope-sdk-java</artifactId><version>2.13.0</version>
</dependency>

如果想使用通义千问sdk其版本可查看:通义千问SDK其他版本

3、编码调用大模型API

编码如下。

注意要把API-KEY替换成你自己的API-KEY哦!例子中选择的模型是通义千问-Plus,你也可以选择通义千问的其他模型:模型列表

代码中systemMsguserMsg组成Prompts发送给大模型,并且通过GenerationParam设置API-KEY和具体调用的大模型。


import java.util.Arrays;
import java.lang.System;
import com.alibaba.dashscope.aigc.generation.Generation;
import com.alibaba.dashscope.aigc.generation.GenerationParam;
import com.alibaba.dashscope.aigc.generation.GenerationResult;
import com.alibaba.dashscope.common.Message;
import com.alibaba.dashscope.common.Role;
import com.alibaba.dashscope.exception.ApiException;
import com.alibaba.dashscope.exception.InputRequiredException;
import com.alibaba.dashscope.exception.NoApiKeyException;
public class Main {public static GenerationResult callWithMessage() throws ApiException, NoApiKeyException, InputRequiredException {Generation gen = new Generation();Message systemMsg = Message.builder().role(Role.SYSTEM.getValue()).content("你是个乐于助人的助手.").build();Message userMsg = Message.builder().role(Role.USER.getValue()).content("你是谁?").build();GenerationParam param = GenerationParam.builder()  .apiKey("你自己的API-KEY")// 模型列表:https://help.aliyun.com/zh/model-studio/getting-started/models.model("qwen-plus").messages(Arrays.asList(systemMsg, userMsg)).resultFormat(GenerationParam.ResultFormat.MESSAGE).build();return gen.call(param);}public static void main(String[] args) {try {GenerationResult result = callWithMessage();System.out.println(result.getOutput().getChoices().get(0).getMessage().getContent());} catch (ApiException | NoApiKeyException | InputRequiredException e) {System.err.println("错误信息:"+e.getMessage());System.out.println("请参考文档:https://help.aliyun.com/zh/model-studio/developer-reference/error-code");}System.exit(0);}
}

运行本段程序,可以看到大模型给我们返回的结果

在这里插入图片描述

恭喜你!你已经成功把大模型接入到Java程序中了!

看完的同学欢迎一起交流,鄙人不才,如果有错误的地方望各位大佬指正!

在这里插入图片描述

祝大家工作顺利,永不被裁!

相关文章:

【SpringAI】(二)让你的Java程序接入大模型——适合Java宝宝的大模型应用开发

开始之前&#xff0c;如果你对大模型完全没了解过&#xff0c;建议阅读之前的大模型入门文章&#xff1a; 【SpringAI】&#xff08;一&#xff09;从实际场景入门大模型——适合Java宝宝的大模型应用开发 那么今天就开始写一个基于Spring AI程序的HelloWord!将大模型接入到咱…...

音频剪辑在线工具 —— 让声音更精彩

你是否曾梦想过拥有自己的声音创作空间&#xff0c;却苦于复杂的音频编辑软件&#xff1f;接下来&#xff0c;让我们一同揭开这些音频剪辑在线工具的神秘面纱&#xff0c;看看它们如何帮助你实现从录音到发布的无缝衔接。 1.福昕音频剪辑 链接直达>>https://www.foxits…...

​http短连接和长连接​

参考短连接和长连接 短连接&#xff1a;客户端向服务器每进行一次Http操作&#xff0c;都需建立一次连接&#xff0c;任务完成后&#xff0c;断开连接&#xff1b;长连接&#xff1a;建立长连接后&#xff0c;传输数据的连接将不会中断&#xff0c;客户端每次访问服务器时都会…...

日志分析删除

日志分析 场景 运维嫌弃生产环境打印日志过多&#xff0c;而且日志存储需要费用&#xff0c;让我们减少打印日志大小&#xff0c;所以需要分析日志在哪里打印的过多 解决方案 读取生产日志文件&#xff0c;统计分析打印日志的地方&#xff0c;最后删除代码中打印日志的地方…...

DART: Implicit Doppler Tomography for Radar Novel View Synthesis 笔记

Link&#xff1a;https://wiselabcmu.github.io/dart/ Publish&#xff1a; 2024CVPR Abstract DART主要任务就是用来合成雷达距离多普勒图像range-droppler&#xff0c;可用于生成高质量的断层扫描图像。 Related Work 1 Radar Simulation 基于模型的方法 任务&#xff…...

redis-cli执行lua脚本

连接redis服务器命令 redis-cli -h 10.10.xx.xx -p 6380 -a password执行lua脚本传递KEY VALUE redis-cli -h 10.10.xx.xx -p 6380 -a password key1 key2 , arg1 arg2key和参数通过逗号分割&#xff0c;逗号前后必须有一个空格 如下执行lua脚本示例&#xff1a; -- script.…...

MySQL9的3个新特性

【图书推荐】《MySQL 9从入门到性能优化&#xff08;视频教学版&#xff09;》-CSDN博客 《MySQL 9从入门到性能优化&#xff08;视频教学版&#xff09;&#xff08;数据库技术丛书&#xff09;》(王英英)【摘要 书评 试读】- 京东图书 (jd.com) 本文讲解MySQL9的3个新特性&…...

《网络基础之 HTTP 协议:状态码含义全解析》

《网络基础之 HTTP 协议&#xff1a;状态码含义全解析》 在网络通信的浩瀚世界中&#xff0c;HTTP 协议犹如一座坚实的桥梁&#xff0c;连接着客户端与服务器。而其中的状态码&#xff0c;则是这座桥梁上的重要标识&#xff0c;为双方的交互提供了关键的反馈信息。 一、状态码…...

java真的正在越来越失去竞争力了吗

题记&#xff1a; java真的在越来越失去竞争力了吗&#xff1f;最近参加校招面试&#xff0c;过程中有问道java的问题&#xff0c;有的同学很直接了当&#xff08;或者是不假思索&#xff09;地说&#xff0c;java已经过时了吧&#xff0c;现在学java的人越来越少了。那么事实…...

【通过zip方式安装mysql服务】

通过zip方式安装mysql服务 Mysql安装包下载mysql安装及环境配置1.解压缩配置环境变量初始化mysql配置安装mysql服务启动MySQL服务连接mysql修改root用户密码 Mysql安装包下载 通过访问mysql官网下载&#xff1a;mysql下载地址 mysql安装及环境配置 1.解压缩 下载完成后&am…...

每日OJ题_WY3小易的升级之路_数学模拟_C++_Java

目录 牛客_WY3小易的升级之路_数学模拟 题目解析 C代码 Java代码 牛客_WY3小易的升级之路_数学模拟 小易的升级之路_牛客题霸_牛客网 (nowcoder.com) 描述&#xff1a; 小易经常沉迷于网络游戏.有一次,他在玩一个打怪升级的游戏,他的角色的初始能力值为 a.在接下来的一段…...

python xml的读取和写入

import xml.etree.ElementTree as ET from xml.dom import minidom# 读取XML文档 tree ET.parse("./xml_3/z_20240827_001.xml") root tree.getroot() # 获取size元素 size_find_0 root.find("size") # 获取width子元素 size_w size_find_0.find("…...

WebGL 小白入门学习

1. WebGL是什么&#xff1f; WebGL&#xff08;Web Graphics Library&#xff09;是一种JavaScript API&#xff0c;它允许你在不需要安装任何额外插件的情况下&#xff0c;直接在浏览器中渲染高性能的2D和3D图形。WebGL利用了用户的图形处理单元&#xff08;GPU&#xff09;来…...

OSI七层协议

OSI&#xff08;Open System Interconnection&#xff09;七层协议&#xff0c;即开放式系统互联参考模型&#xff0c;是一个由国际标准化组织&#xff08;ISO&#xff09;提出的用于描述计算机网络中通信的结构和功能的理论模型。它将网络通信过程分为七个层次&#xff0c;每个…...

超平面(Hyperplane)和半空间(Halfspace)

文章目录 一、超平面&#xff08;Hyperplane&#xff09;1. 定义2. 超平面的方程3. 例子4. 超平面的性质 二、半空间&#xff08;Halfspace&#xff09;1. 定义2. 半空间的表示3. 半空间的性质 三、超平面与半空间的关系四、应用1. 线性规划2. 机器学习3. 计算几何4. 凸分析 五…...

TCP(Transmission Control Protocol,传输控制协议)整理

TCP&#xff08;Transmission Control Protocol&#xff0c;传输控制协议&#xff09;是一种面向连接的、可靠的传输协议&#xff0c;它是OSI&#xff08;Open System Interconnection&#xff0c;开放式系统互联&#xff09;模型中的第四层协议&#xff0c;通常使用于网络中的…...

R语言绘制线性回归图

线性回归图以二维坐标系展示两个变量关系。数据点代表实际观测值&#xff0c;核心是线性回归线。此线通过统计方法确定&#xff0c;与数据点距离平方和最小。它反映变量间线性趋势&#xff0c;斜率正负决定相关方向。可用于预测因变量值&#xff0c;也能进行推断统计。在数据分…...

C++进阶:map和set的使用

目录 一.序列式容器和关联式容器 二.set系列的使用 2.1set容器的介绍 2.2set的构造和迭代器 2.3set的增删查 2.4insert和迭代器遍历的样例 2.5find和erase的样例 ​编辑 2.6multiset和set的差异 2.7简单用set解决两道题 两个数组的交集 环形链表二 三.map系列的使用…...

深入理解C++ STL中的 vector

文章目录 1. vector 的概述1.1 vector 是什么&#xff1f;1.2 vector 的优点1.3 vector 的缺点 2. vector 的基本使用2.1 vector 的定义2.2 基本操作2.3 示例2.4 迭代器的使用 3. vector 的内部实现原理3.1 动态数组的实现3.2 内存管理3.3 内存扩展策略3.4 元素的插入与删除3.4…...

MySQL 安装与配置详细教程

MySQL 安装与配置详细教程 MySQL 是一款流行的关系型数据库管理系统&#xff0c;广泛应用于 Web 应用和应用程序中。在本文中&#xff0c;我们将提供一份详细的 MySQL 安装与配置教程&#xff0c;帮助初学者快速上手。 ## 1. 安装 MySQL 首先&#xff0c;我们需要从 MySQL 官…...

CefFlashBrowser:终极Flash浏览器解决方案,轻松玩转经典Flash游戏与课件

CefFlashBrowser&#xff1a;终极Flash浏览器解决方案&#xff0c;轻松玩转经典Flash游戏与课件 【免费下载链接】CefFlashBrowser Flash浏览器 / Flash Browser 项目地址: https://gitcode.com/gh_mirrors/ce/CefFlashBrowser 你是否还在为无法打开珍藏的Flash游戏而烦…...

Windows 11 离线部署 WSL2 与 Ubuntu:绕过商店限制的完整实战

1. 为什么需要离线部署 WSL2 与 Ubuntu 很多开发者在 Windows 11 上使用 WSL2 时都会遇到一个头疼的问题&#xff1a;微软商店经常无法正常访问或下载速度极慢。我自己就遇到过好几次&#xff0c;明明网络连接正常&#xff0c;但就是卡在下载环节&#xff0c;进度条一动不动。这…...

Simulink仿真速度太慢?试试用C Mex S函数给模型“提提速”

Simulink性能优化实战&#xff1a;用C Mex S函数突破仿真速度瓶颈 当Simulink模型运行缓慢时&#xff0c;工程师们常常陷入漫长的等待。本文将揭示如何通过C Mex S函数这一利器&#xff0c;将仿真速度提升10倍以上&#xff0c;特别适合处理复杂算法、图像处理和大规模系统仿真等…...

【实战指南】腾讯会议回放视频如何批量下载与本地永久保存?免费工具全解析

1. 为什么需要本地保存腾讯会议回放&#xff1f; 每次参加完重要会议或培训课程&#xff0c;最怕的就是回放视频突然过期。我遇到过好几次这种情况&#xff1a;刚想复习某个关键知识点&#xff0c;发现视频已经显示"已过期"。特别是当会议组织者设置了7天自动删除规则…...

stm32cubeide+freertos+c/c++混合编程实战避坑指南

1. STM32CubeIDE与FreeRTOS环境搭建避坑指南 第一次用STM32CubeIDE配置FreeRTOS时&#xff0c;我对着时钟源选项纠结了半小时。后来发现这个选择直接影响系统稳定性——选错时钟源会导致任务调度像喝醉了一样飘忽不定。实测推荐用TIM6替代默认的SysTick作为时基&#xff0c;原因…...

看完就会:高效论文写作全流程AI论文平台推荐(2026 最新)

论文写作全流程可拆解为文献调研→选题/开题→大纲/初稿→文献综述→降重/去AI味→润色/格式→查重/投稿七大环节&#xff0c;以下2026年AI论文平台按环节精准匹配&#xff0c;兼顾中文适配、降重能力、去AI痕迹、学术合规四大核心需求&#xff0c;覆盖免费/付费、通用/垂直场景…...

创新音乐体验:foobox-cn全攻略

创新音乐体验&#xff1a;foobox-cn全攻略 【免费下载链接】foobox-cn DUI 配置 for foobar2000 项目地址: https://gitcode.com/GitHub_Trending/fo/foobox-cn 在数字音乐时代&#xff0c;如何将本地播放器与网络电台无缝融合&#xff0c;打造个性化的音乐中心&#xf…...

[RAG在LangChain中的实现]常用的向量存储和基于向量存储的检索器

向量存储是RAG解决方案的核心&#xff0c;目前市面上由很多向量存储产品&#xff0c;由免费开源的&#xff0c;也有商业闭源的&#xff1b;有本地部署的&#xff0c;也有完全云托管的&#xff1b;有传统数据库产品推出的针对向量存储的扩展&#xff0c;也有新势力专门针对向量存…...

虚拟内存 pagefile.sys 安全迁移教程|释放 3~8GB

摘要Windows 系统默认将虚拟内存&#xff08;pagefile.sys&#xff09;存放在 C 盘&#xff0c;长期占用 3~8GB 系统盘空间&#xff0c;不仅会加剧 C 盘爆满问题&#xff0c;还会增加磁盘读写压力&#xff0c;影响系统运行性能。本文整理 官方原生、安全无毒、无需第三方工具 的…...

H5端微信登录实战:从配置到用户信息获取的全流程解析

1. 为什么需要H5端微信登录&#xff1f; 每次开发新项目时&#xff0c;用户注册环节总是让人头疼。传统的账号密码注册方式&#xff0c;不仅流程繁琐&#xff0c;还经常遇到用户忘记密码的问题。我在去年开发一个电商H5项目时&#xff0c;就发现超过60%的用户流失都发生在注册…...