Java调用chatgpt
目前openai的chatgpt在国内使用有一定难度,不过国内的大模型在大部分情况下已经不弱于chatgpt,而且还更便宜,又能解决国内最敏感的内容安全问题。本文后续以spring ai调用国内chatgpt厂商实现为例,讲解怎么构建一个java调用chatgpt的应用。在构建java调用chatgpt的应用过程中,我们将使用java编程语言来编写代码,并通过spring框架来整合chatgpt的功能。通过调用国内chatgpt厂商提供的接口,我们可以实现与chatgpt的交互,从而构建出一个功能强大的java应用。在应用中,我们可以使用java代码来处理用户输入,并通过调用chatgpt的接口来获取相应的回复。这样,我们就可以在java应用中实现与chatgpt的对话功能,为用户提供智能化的服务。通过使用java调用chatgpt,我们可以构建出更加智能化的应用,为用户提供更好的体验。
24年12月截止了,赶紧来拿奖金!总计30万,Spring AI Alibaba 应用框架挑战赛开赛点此了解
Spring AI介绍
Spring AI是一个专为AI工程设计的应用框架,它继承了Spring生态系统的优良传统,比如可移植性、模块化设计等。该框架致力于将POJOs(Plain Old Java Objects)作为构建块应用于AI领域,使得开发者能够利用熟悉的Java语言和面向对象编程范式来创建复杂的AI应用程序。Spring AI最核心的优势在于提供了一套统一的接口标准,允许开发者编写一次代码即可轻松切换不同的AI服务提供商(例如OpenAI、Azure、阿里云等),极大地简化了跨平台迁移的工作量。此外,其对Spring生态系统的完美兼容性意味着现有基于Spring的应用可以无缝集成AI功能,进一步降低了开发门槛。
Spring AI alibaba介绍
Spring AI Alibaba是基于Spring AI框架构建的实现,专注于接入阿里云百炼系列的大模型服务。通过Spring AI Alibaba,开发者可以轻松地利用通义大模型进行文本生成、图像生成、语音合成等任务。其核心优势在于提供了统一的API接口,使得开发者能够以一致的方式调用不同类型的AI服务,并且只需修改配置即可切换不同的AI提供者,极大地简化了开发过程中的复杂度。此外,Spring AI Alibaba还支持本地部署及多种主流AI框架(如OpenAI和Ollama)的集成,进一步增强了其灵活性与适用性。
基于spring ai alibaba 生成做聊天的详细例子
基于Spring AI Alibaba生成做聊天的详细例子,我们将依照给定的知识来分析并提供详细的步骤。首先,要实现一个允许用户输入信息并通过流(Flux)返回响应的聊天API,需要理解的是整个过程依赖于对通义千问大模型的服务调用。下面将逐步说明如何通过配置和编写代码来完成这一目标。
前置条件
确保您的开发环境满足以下要求:
- JDK版本至少为17。
- Spring Boot版本为3.3.x或更高。
- 已经在阿里云上申请了通义千问服务的API Key,并且已经按照指示将其设置到了系统变量中。
配置阿里云API Key
根据我了解的信息中的描述,在命令行中设置环境变量或者直接在application.properties
文件里配置阿里云API Key:
export AI_DASHSCOPE_API_KEY=你的实际API-Key值
或者在application.properties
中添加:
spring.ai.dashscope.api-key=${AI_DASHSCOPE_API_KEY}
Maven仓库配置
由于Spring AI的部分库尚未发布到Maven中央仓库,因此需要额外配置Spring自己的仓库地址至项目的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-starter
以及指定Spring Boot的版本作为父级依赖,以确保自动装配机制能够正确工作:
<parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>3.3.4</version><relativePath/>
</parent><dependencies><dependency><groupId>com.alibaba.cloud.ai</groupId><artifactId>spring-ai-alibaba-starter</artifactId><version>1.0.0-M2</version></dependency><!-- 其他依赖... -->
</dependencies>
创建Controller处理聊天请求
接下来创建一个控制器类用于接收用户的输入并通过聊天客户端向AI发送请求,同时利用Flux进行流式响应:
@RestController
@RequestMapping("/ai")
@CrossOrigin(origins = "*")
public class ChatController {private final ChatClient chatClient;@Value("classpath:correct-and-expand.st")Resource resource;public ChatController(ChatClient.Builder builder) {this.chatClient = builder.build();}@GetMapping("/chatStream")public Flux<String> chatSteam(@RequestParam String input) {PromptTemplate promptTemplate = new PromptTemplate(resource);Prompt prompt = promptTemplate.create(Map.of("input", input));return chatClient.prompt(prompt).stream().content();}
}
此控制器定义了一个名为/chatStream
的GET方法端点,该端点接受一个名为input
的查询参数,并使用它构造一个提示语句给到聊天客户端。最终结果会以流的形式被客户端消费。
以上步骤详尽地介绍了如何从零开始构建一个基于Spring AI Alibaba支持Prompt与流式输出的聊天API。遵循上述指南,您可以顺利地为您的应用添加强大的AI对话能力。请注意保持所有配置和代码片段的一致性,并根据实际情况调整相关细节如版本号等。
基于Spring AI Alibaba生成一个图片的详细例子
根据我了解的信息提供的信息,我们将基于Spring Boot集成Spring AI Alibaba来实现动漫美女图的图像生成。以下是详细的步骤说明:
1. 确认前置要求
- JDK版本需要在JDK17(含)以上。
- Spring Boot版本需为3.3.x或更高。
2. 申请阿里云资源及API KEY
首先,您需要访问阿里云百炼页面并按照以下步骤操作:
- 登录您的阿里云账号。
- 开通“百炼大模型推理”服务,并等待开通成功的短信通知。
- 成功后再次登录阿里云百炼页面,点击右上角的小人图标 -> API-KEY -> 创建新的API-KEY。
- 记录生成的API-KEY,这将在稍后的配置中使用。
接着,设置环境变量以存储API KEY:
export AI_DASHSCOPE_API_KEY=YOUR_GENERATED_API_KEY
3. 开通通义万象图像生成模型
- 进入百炼控制台。
- 在左侧菜单选择“模型广场”,查找并选择图像生成类目下的通义万象模型。
- 点击该模型的“API调用”按钮,在打开的页面顶部复制模型英文名(例如
wanx-v1
),用于后续代码配置。
4. 配置项目依赖
添加仓库地址
在您的pom.xml
文件中加入如下仓库配置以便获取最新版的Spring AI Alibaba组件:
<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
内添加必要的依赖包:
<parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>3.3.4</version><relativePath/>
</parent><dependencies><dependency><groupId>com.alibaba.cloud.ai</groupId><artifactId>spring-ai-alibaba-starter</artifactId><version>1.0.0-M2.1</version></dependency><!-- 其他必要依赖 -->
</dependencies>
5. 配置应用属性
编辑application.properties
文件,设置API KEY等信息:
spring.ai.dashscope.api-key=${AI_DASHSCOPE_API_KEY}
6. 编写控制器代码
创建一个新的REST控制器ImageModelController.java
,内容如下所示:
@RestController
@RequestMapping("/ai")
public class ImageModelController {private final ImageModel imageModel;@Autowiredpublic ImageModelController(ImageModel imageModel) {this.imageModel = imageModel;}@GetMapping("/image")public ResponseEntity<String> generateImage(@RequestParam String input) {try {ImageOptions options = new ImageOptionsBuilder().withWidth(1024).withHeight(1024).withModel("wanx-v1") // 使用从阿里云获取到的具体模型名称.withN(1).build();ImagePrompt prompt = new ImagePrompt(input, options);ImageResponse response = imageModel.call(prompt);List<ImageGeneration> results = response.getResults();if (results.isEmpty()) {return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body("No image generated.");}String imageUrl = results.get(0).getOutput().getUrl();return ResponseEntity.ok(imageUrl);} catch (Exception e) {return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(e.getMessage());}}
}
7. 测试接口
启动应用程序后,通过浏览器或者Postman等工具访问http://localhost:8080/ai/image?input=动漫美女
这样的URL来请求生成图像。返回的结果应该是一个指向新生成图片的URL链接。
相关文章:

Java调用chatgpt
目前openai的chatgpt在国内使用有一定难度,不过国内的大模型在大部分情况下已经不弱于chatgpt,而且还更便宜,又能解决国内最敏感的内容安全问题。本文后续以spring ai调用国内chatgpt厂商实现为例,讲解怎么构建一个java调用chatgp…...

将你的 Kibana Dev Console 请求导出到 Python 和 JavaScript 代码
作者:来自 Elastic Miguel Grinberg Kibana Dev Console 现在提供将请求导出到可立即集成到你的应用程序中的 Python 和 JavaScript 代码的选项。 你使用过 Kibana 开发控制台吗?这是一个非常棒的原型设计工具,可让你以交互方式构建和测试 El…...

成都世运会志愿者招募报名流程及证件照制作方法
成都世运会志愿者招募正在如火如荼地进行中,许多热心公益的青年们纷纷报名参与。本文将详细介绍如何通过官方渠道报名,并使用手机来自行制作符合要求的4:5比例的白底证件照。 一、志愿者报名流程概述首先,报名成都世运会志愿者需要通过官方指…...

大数据技术的前景如何?
在当今数字化迅猛发展的时代,大数据技术的前景显得尤为广阔。随着数据量的激增,如何有效利用这些数据成为了各行各业关注的焦点。未来五年,大数据技术的发展趋势可以从市场规模、技术融合、行业应用和政策支持等多个方面进行深入分析。 1. 市…...

LLM | 论文精读 | 基于大型语言模型的自主代理综述
论文标题:A Survey on Large Language Model based Autonomous Agents 作者:Lei Wang, Chen Ma, Xueyang Feng, 等 期刊:Frontiers of Computer Science, 2024 DOI:10.1007/s11704-024-40231-1 一、引言 自主代理(…...

详解Redis相关缓存问题
目录 缓存更新策略 定期⽣成 实时⽣成 缓存淘汰策略 Redis内置缓存淘汰策略 缓存预热 缓存穿透 缓存雪崩 缓存击穿 缓存更新策略 定期⽣成 每隔⼀定的周期(⽐如⼀天/⼀周/⼀个⽉), 对于访问的数据频次进⾏统计. 挑选出访问频次最⾼的前 %N的数据. 实时⽣成 先给缓存…...

ubuntu 24 (wayland)如何实现无显示器远程桌面
ubuntu 24默认采用的是wayland而非x11,查过文档vnc对wayland的支持不是很好,折腾了好久,弄了一个如下的方案供参考: 硬件条件 需要一个显卡欺骗器或者可以接HDMI口作为视频信号源输出的设备。 将ubuntu的主机的HDMI输出接到该硬…...

《模拟电子技术基础》第六版PDF课后题答案详解
《模拟电子技术基础》第六版是在获首届全国优秀教材建设奖一等奖的第五版的基础上,总结6年来的教学实践经验修订而成的新形态教材。为满足国家人才培养的需求,适应新型教学模式,并考虑到大多数院校逐渐减少课程学时的现状,在不降低…...
python知识收集
文章目录 语法def声明函数class声明类class 子类(父类) 继承 数据结构列表列表操作 元组元组操作 字典遍历字典 集合 文件读写读文件写文件 csv模块读入写入 time模块发送邮件制作二维码滚动广告 语法 def声明函数 class声明类 class 子类(父类) 继承 数据结构 列表 列表…...
传奇996_3——使用补丁添加怪物
找素材,看素材是否是打包好的,没有的话就使用工具进行素材打包(打包好后尽量别改名),并复制进客户端,D:\chuanqinew\996M2_debug\dev\anim\monster找到模型表cfg_model_info.xls,复制表中前几行…...

「Mac畅玩鸿蒙与硬件13」鸿蒙UI组件篇3 - TextInput 组件获取用户输入
在鸿蒙应用开发中,TextInput 组件用于接收用户输入,适用于文本、密码等多种输入类型。本文详细介绍鸿蒙 TextInput 组件的使用方法,包括输入限制、样式设置、事件监听及搜索框应用,帮助你灵活处理鸿蒙应用中的用户输入。 关键词 TextInput 组件用户输入输入限制事件监听搜索…...

MCU裸机任务调度架构
第1章 方式一(平均主义) int main(int argc, char **argv){/* RTC 初始化 */bsp_RTC_Init(&rtc);/* 串口初始化 */uartInit(115200);/* LED初始化 */ledInit();while(1){// 任务1(获取传感器数据)// 任务2// 任务3} } 1.1 平均主义的缺陷 获取传感器数据可以600ms去读取一…...

【Web前端】JavaScript 对象原型与继承机制
JavaScript 是一种动态类型的编程语言,其核心特性之一就是对象和原型链。理解原型及其工作机制对于掌握 JavaScript 的继承和对象关系非常重要。 什么是原型 每个对象都有一个内部属性 [[Prototype]],这个属性指向创建该对象的构造函数的原型…...
【华为HCIP实战课程二十六】中间到中间系统协议IS-IS配置默认路由及IS-IS数据库,网络工程师
一、IS-IS路由器分类 1、L1路由器:Level-1路由器负责区域内的路由,它只与属于同一区域的Level-1和Level-1-2路由器形成邻居关系,属于不同区域的Level-1路由器不能形成邻居关系。Level-1路由器只负责维护Level-1的链路状态数据库LSDB,该LSDB包含本区域的路由信息。到本区域…...

mysql上课总结(2)(DCL的所有操作总结、命令行快速启动/关闭mysql服务)
目录 一、DCL小结(数据控制语言) 1、查询表不在当前使用的数据库,可以在表名前加数据库名。 2、系统数据库mysql 的 user 表。 3、在系统数据库mysql 的 user 表当中如何判断创建的用户是否唯一? 4、系统数据库mysql 的 user 表当…...

法律智能助手:开源NLP系统助力法律文件高效审查与检索
一、系统概述 思通数科AI平台是一款融合了自然语言处理和多标签分类技术的开源智能文档分类工具,特别适用于法律行业。平台采用深度学习的BERT模型来进行特征提取与关系抽取,实现了精准的文档分类和检索。用户可以在线训练和标注数据,使系统…...

如何使用AdsPower指纹浏览器克服爬虫技术限制,安全高效进行爬虫!
随着中国开发者日益成熟,应用质量明显提升,越来越多的开发者选择出海寻找机会扩大市场。但“应用出海”说起来容易,做起来难。其中,最大的困恼就是对海外市场缺乏了解。 很多开发者会选择使用网络爬虫(Web Crawling&a…...

四、虚拟化配置寄存器(HCR_EL2)
bit字段描述63:60TWEDELTWE延迟。当HCR_EL2.TWEDEn为1,由HCR_EL2引起的WFE*陷阱的最小延迟为2的(TWEDEL 8)次方,单位周期。59TWEDEnTWE推迟启用。让由HCR EL2.TWE引起的WFE*指令延迟陷入可配置。0:陷入的延迟是已经定义的;1&…...

我要成为算法高手-滑动窗口篇
目录 滑动窗口算法题目1:长度最小的子数组题目2:无重复字符的最长子串题目3:最大连续1的个数题目4:将x减到0的最小操作数题目5:水果成篮题目6:找到字符串中所有的字母异位词题目7:串联所有单词的子串题目8:最小覆盖子串 滑动窗口算法 滑动窗口的本质还是双指针,只不…...

jenkins搭建及流水线配置
1.安装docker curl https://mirrors.aliyun.com/repo/Centos-7.repo >> CentOS-Base-Aliyun.repomv CentOS-Base-Aliyun.repo /etc/yum.repos.d/yum -y install yum-utils device-mapper-persistent-data lvm2yum-config-manager --add-repo http://mirrors.aliyun.com/…...

iOS 26 携众系统重磅更新,但“苹果智能”仍与国行无缘
美国西海岸的夏天,再次被苹果点燃。一年一度的全球开发者大会 WWDC25 如期而至,这不仅是开发者的盛宴,更是全球数亿苹果用户翘首以盼的科技春晚。今年,苹果依旧为我们带来了全家桶式的系统更新,包括 iOS 26、iPadOS 26…...

关于iview组件中使用 table , 绑定序号分页后序号从1开始的解决方案
问题描述:iview使用table 中type: "index",分页之后 ,索引还是从1开始,试过绑定后台返回数据的id, 这种方法可行,就是后台返回数据的每个页面id都不完全是按照从1开始的升序,因此百度了下,找到了…...
Java - Mysql数据类型对应
Mysql数据类型java数据类型备注整型INT/INTEGERint / java.lang.Integer–BIGINTlong/java.lang.Long–––浮点型FLOATfloat/java.lang.FloatDOUBLEdouble/java.lang.Double–DECIMAL/NUMERICjava.math.BigDecimal字符串型CHARjava.lang.String固定长度字符串VARCHARjava.lang…...
今日科技热点速览
🔥 今日科技热点速览 🎮 任天堂Switch 2 正式发售 任天堂新一代游戏主机 Switch 2 今日正式上线发售,主打更强图形性能与沉浸式体验,支持多模态交互,受到全球玩家热捧 。 🤖 人工智能持续突破 DeepSeek-R1&…...

springboot整合VUE之在线教育管理系统简介
可以学习到的技能 学会常用技术栈的使用 独立开发项目 学会前端的开发流程 学会后端的开发流程 学会数据库的设计 学会前后端接口调用方式 学会多模块之间的关联 学会数据的处理 适用人群 在校学生,小白用户,想学习知识的 有点基础,想要通过项…...

使用LangGraph和LangSmith构建多智能体人工智能系统
现在,通过组合几个较小的子智能体来创建一个强大的人工智能智能体正成为一种趋势。但这也带来了一些挑战,比如减少幻觉、管理对话流程、在测试期间留意智能体的工作方式、允许人工介入以及评估其性能。你需要进行大量的反复试验。 在这篇博客〔原作者&a…...
JS手写代码篇----使用Promise封装AJAX请求
15、使用Promise封装AJAX请求 promise就有reject和resolve了,就不必写成功和失败的回调函数了 const BASEURL ./手写ajax/test.jsonfunction promiseAjax() {return new Promise((resolve, reject) > {const xhr new XMLHttpRequest();xhr.open("get&quo…...

【C++进阶篇】智能指针
C内存管理终极指南:智能指针从入门到源码剖析 一. 智能指针1.1 auto_ptr1.2 unique_ptr1.3 shared_ptr1.4 make_shared 二. 原理三. shared_ptr循环引用问题三. 线程安全问题四. 内存泄漏4.1 什么是内存泄漏4.2 危害4.3 避免内存泄漏 五. 最后 一. 智能指针 智能指…...
苹果AI眼镜:从“工具”到“社交姿态”的范式革命——重新定义AI交互入口的未来机会
在2025年的AI硬件浪潮中,苹果AI眼镜(Apple Glasses)正在引发一场关于“人机交互形态”的深度思考。它并非简单地替代AirPods或Apple Watch,而是开辟了一个全新的、日常可接受的AI入口。其核心价值不在于功能的堆叠,而在于如何通过形态设计打破社交壁垒,成为用户“全天佩戴…...

关于easyexcel动态下拉选问题处理
前些日子突然碰到一个问题,说是客户的导入文件模版想支持部分导入内容的下拉选,于是我就找了easyexcel官网寻找解决方案,并没有找到合适的方案,没办法只能自己动手并分享出来,针对Java生成Excel下拉菜单时因选项过多导…...