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

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

将你的 Kibana Dev Console 请求导出到 Python 和 JavaScript 代码

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

成都世运会志愿者招募报名流程及证件照制作方法

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

大数据技术的前景如何?

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

LLM | 论文精读 | 基于大型语言模型的自主代理综述

论文标题&#xff1a;A Survey on Large Language Model based Autonomous Agents 作者&#xff1a;Lei Wang, Chen Ma, Xueyang Feng, 等 期刊&#xff1a;Frontiers of Computer Science, 2024 DOI&#xff1a;10.1007/s11704-024-40231-1 一、引言 自主代理&#xff08;…...

详解Redis相关缓存问题

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

ubuntu 24 (wayland)如何实现无显示器远程桌面

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

《模拟电子技术基础》第六版PDF课后题答案详解

《模拟电子技术基础》第六版是在获首届全国优秀教材建设奖一等奖的第五版的基础上&#xff0c;总结6年来的教学实践经验修订而成的新形态教材。为满足国家人才培养的需求&#xff0c;适应新型教学模式&#xff0c;并考虑到大多数院校逐渐减少课程学时的现状&#xff0c;在不降低…...

python知识收集

文章目录 语法def声明函数class声明类class 子类(父类) 继承 数据结构列表列表操作 元组元组操作 字典遍历字典 集合 文件读写读文件写文件 csv模块读入写入 time模块发送邮件制作二维码滚动广告 语法 def声明函数 class声明类 class 子类(父类) 继承 数据结构 列表 列表…...

传奇996_3——使用补丁添加怪物

找素材&#xff0c;看素材是否是打包好的&#xff0c;没有的话就使用工具进行素材打包&#xff08;打包好后尽量别改名&#xff09;&#xff0c;并复制进客户端&#xff0c;D:\chuanqinew\996M2_debug\dev\anim\monster找到模型表cfg_model_info.xls&#xff0c;复制表中前几行…...

「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 是一种动态类型的编程语言&#xff0c;其核心特性之一就是对象和原型链。理解原型及其工作机制对于掌握 JavaScript 的继承和对象关系非常重要。 什么是原型 每个对象都有一个内部属性 ​​[[Prototype]]​​​&#xff0c;这个属性指向创建该对象的构造函数的原型…...

【华为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小结&#xff08;数据控制语言&#xff09; 1、查询表不在当前使用的数据库&#xff0c;可以在表名前加数据库名。 2、系统数据库mysql 的 user 表。 3、在系统数据库mysql 的 user 表当中如何判断创建的用户是否唯一&#xff1f; 4、系统数据库mysql 的 user 表当…...

法律智能助手:开源NLP系统助力法律文件高效审查与检索

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

如何使用AdsPower指纹浏览器克服爬虫技术限制,安全高效进行爬虫!

随着中国开发者日益成熟&#xff0c;应用质量明显提升&#xff0c;越来越多的开发者选择出海寻找机会扩大市场。但“应用出海”说起来容易&#xff0c;做起来难。其中&#xff0c;最大的困恼就是对海外市场缺乏了解。 很多开发者会选择使用网络爬虫&#xff08;Web Crawling&a…...

四、虚拟化配置寄存器(HCR_EL2)

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

我要成为算法高手-滑动窗口篇

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

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/…...

Vue v-on

vue : v-on:func --------------------------- data(){ return{ prop:any; } } methods:{ func(){ } } template:, v-on...

快速生成高质量提示词,Image to Prompt 更高效

抖知书老师推荐&#xff1a; 随着 AI 技术的不断发展&#xff0c;视觉信息与语言信息之间的转换变得越来越便捷。在如今的数字化生活中&#xff0c;图像与文字的交互需求愈发旺盛&#xff0c;很多人都希望能轻松将图像内容直接转化为文本描述。今天我们来推荐一款实用的 AI 工…...

SELS-SSL/TLS

一、了解公钥加密&#xff08;非对称加密&#xff09; 非对称加密中&#xff0c;用于加密数据的密钥与用于解密数据的密钥不同。私钥仅所有者知晓&#xff0c;而公钥则可自由分发。发送方使用接收方的公钥对数据进行加密&#xff0c;数据仅能使用相应的私钥进行解密。 你可以将…...

算法:排序

排序算法 1. 简单排序1.1 直接插入排序1.2 冒泡排序1.3 简单选择排序 2. 希尔排序3. 快速排序4. 堆排序5. 归并排序 将文件的内容按照某种规则进行排列。 排序算法的稳定判定&#xff1a;若在待排序的一个序列中&#xff0c; R i R_i Ri​和 R j R_j Rj​的关键码相同&#xf…...

MyBatis-Plus 更新对象时如何将字段值更新为 null

MyBatis-Plus 是一个 MyBatis 的增强工具&#xff0c;在简化开发、提高效率方面表现非常出色。然而&#xff0c;在使用 MyBatis-Plus 更新对象时&#xff0c;默认情况下是不会将字段值更新为 null 的。这是因为 MyBatis-Plus 使用了非空字段策略&#xff08;FieldStrategy&…...

Unreal5从入门到精通之如何在VR中使用3DUI

文章目录 前言创建3DUI1.新建控件蓝图2.添加控件到画布上3.新建Actor蓝图MyUIActor4.添加控件组件Widget5.设置控件类和画布大小6.创建MyUIActor实例到场景中3DUI和VR射线交互1.添加按钮的点击事件2.设置MyUIActor碰撞响应3.VRPawn添加控件交互组件4.添加手柄Trigger点击事件绑…...

ViSual studio如何安装 并使用GeographicLib

在C的 Boost.Geometry、GDAL/OGR 和 GeographicLib。这些库都可以用于计算两个经纬度点之间的地面距离。 . Boost.Geometry 描述&#xff1a;Boost库的一部分&#xff0c;提供了几何计算功能&#xff0c;包括计算两点之间的地面距离。 优势&#xff1a;轻量级、易于集成到C项…...

Java程序设计:spring boot(11)——分布式缓存 Ehcache 整合

目录 1 Spring Cache 相关注解说明 1.1 CacheConfig 1.2 Cacheable 1.3 CachePut 1.4 CacheEvict 1.5 Caching 2 环境配置 2.1 pom.xml 依赖添加 2.2 ehcahe.xml ⽂件添加 2.3 application.yml 缓存配置 2.4 启动缓存 2.5 JavaBean 对象实现序列化 3 缓存实现 3.…...

豆包,攻克数字是个什么工具?《GKData-挖掘数据的无限可能》(数据爬虫采集工具)

豆包&#xff0c;攻克数字是个什么工具&#xff1f; “攻克数字” 指的是 “攻克数字&#xff08;GKData&#xff09;” 这样一款工具。是一款针对网页、APP中数据自动解析转表存入数据库的软件&#xff0c;为数据工作者而生。它是一个不会编程也能用的可视化数据解析为标准二…...

说一说QWidget

目录 关于QWidget 作为界面组件时&#xff0c;你需要有印象的 1. 控制属性 2. 组件状态与交互属性 3. 外观和样式属性 4. 布局与子组件管理属性 5. 图标和光标属性 6. 大小策略属性 作为单独的窗体的属性 写Qt快两年了&#xff0c;也写过一些规模偏大的软件&#xff0c…...

新乡网站开发公司/百度识图在线网页版

以前从来没有这么渴望过有一套自己的房子&#xff0c;我想现在我明白了为什么岳父岳母要我们有一套房子了。1. 租房的时候&#xff0c;房子是人家的&#xff0c;人家说你什么时候搬就什么时候搬2.设施都是公共的&#xff0c;谁都想方便自己使用3.没有想到现在租房子的价格也可以…...

wordpress主题怎么设置/千锋教育培训机构怎么样

int dep[N<<1];//记录欧拉序列每个位置的深度 int fin[N];//树中每个点第一次访问时的idx int p[N<<1];//欧拉序列 int dp[N<<1][20];//ST表 int cnt;//idx //p[]、dep[]以及dp的第一维记得开点数两倍。 //因为这三个数组的操作对象都是欧拉序列&#xff0c;…...

wordpress标签归类/最新腾讯新闻

Algorithm Boyer-Moore 第一步&#xff1a; 对于给定的模式和在模式及文本中用到的字母表&#xff0c;按照给出的描述构造坏符号移动表。 第二步&#xff1a; 按照之前给出的描述&#xff0c;利用模式来构造好后缀移动表。 第三步&#xff1a; 将模式与文本的开始处对齐。 …...

建设网站0基础需要学什么/chrome官网下载

这个作业属于哪个课程 https://edu.cnblogs.com/campus/xnsy/SoftwareEngineeringClass2 这个作业要求在哪里 https://edu.cnblogs.com/campus/xnsy/SoftwareEngineeringClass2/homework/3341 团队名称 Eight party to gain&#xff08;八方来财&#xff09; https://www…...

教资注册网址/南京seo整站优化技术

实施目的 syslog提供日常维护日志外&#xff0c;还提供系统登陆&#xff0c;***尝试等安全性的日志信息&#xff0c;帮助管理员进行审计和追踪。 问题影响无法对用户的操作进行日志记录&#xff0c;增加潜在的安全风险系统当前状态查看/etc/syslog.conf文件配置并记录实施步骤…...

长沙企业建站公司/seo关键词优化外包

以下内容部分摘自微软官网&#xff1a;Windows 10/ Windows Server 2016 Hyper-V 允许虚拟网络的本机网络地址转换 (NAT)。本指南将引导你完成&#xff1a;创建 NAT 网络将现有虚拟机连接到新网络确认虚拟机正确连接要求&#xff1a;Windows 10 周年更新或更高版本已启用 Hyper…...