Java 调用OpenAI完成聊天

这段时间比较火的chatGPT,准确来说应该只是openAI的一个小部分,这里对openAI的功能接口进行一个java实现,以文本补全、聊天(也就是chatGPT)和图像生成作为演示,体会一下AI的强大力量。

一、openAI账号创建以及测试

1.账号

访问openai.com注册,按照提示输入注册就行,这里注意的就是需要外国手机号,还浪费了我几十块钱,可恶。。

2.创建API KEY

在个人中心里面创建一下api密钥,这里要注意key只有创建时可以看到,创建完之后就不可见了,因此在创建时要注意复制保存,当然如果实在忘了,删除重新创建一个就行
在这里插入图片描述

二、配置Maven

  <dependency><groupId>com.netflix.feign</groupId><artifactId>feign-core</artifactId><version>8.18.0</version></dependency><dependency><groupId>com.netflix.feign</groupId><artifactId>feign-jackson</artifactId><version>8.18.0</version></dependency><dependency><groupId>com.netflix.feign</groupId><artifactId>feign-okhttp</artifactId><version>8.18.0</version></dependency>

三、配置yml文件

key就是OpenAI官网申请的API KEY

open-ai:url: https://api.openai.com/key: xxxxxxxxx

三、Controller(以流的方式返回)

@Api(tags = "客户端-客户管理")
@RestController
@RequestMapping("/client/chatUser")
public class ChatUserClientController {@Resourceprivate ChatUserService chatUserService;/*** 返回数据流 优化用户体验* @return*/@ApiOperation(value = "发送聊天",produces = MediaType.APPLICATION_OCTET_STREAM_VALUE)@PostMapping("/sendMessage")public ResponseBodyEmitter sendMessageByStream(@RequestBody OpenAIChatSendMessage openAIChatSendMessage) {return chatUserService.sendMessage(openAIChatSendMessage);}}

四、接口层

public interface ChatUserService extends IService<ChatUser>{ResponseBodyEmitter sendMessage(OpenAIChatSendMessage openAIChatSendMessage);
}

五、实现层

可以根据自己的需求在此处添加判断逻辑

  
@Service
public class ChatUserServiceImpl extends ServiceImpl<ChatUserMapper, ChatUser> implements ChatUserService {@Resourceprivate OpenAIApiDao openAIApiDao;@Overridepublic ResponseBodyEmitter sendMessage(OpenAIChatSendMessage openAIChatSendMessage) {List<OpenAIChatMessage> messages = openAIChatSendMessage.getMessages();if (CollectionUtils.isEmpty(messages) || messages.size() == 1) {throw new NingException(ServiceCode.FAILED);}// 可在次数加判断逻辑ResponseBodyEmitter emitter = new ResponseBodyEmitter();CompletableFuture.runAsync(() -> {// 调用 OpenAI 返回openAIChatSendMessage.setStream(true);Response response = openAIApiDao.sendChatByOpenAI(openAIChatSendMessage);try {try (InputStream inputStream = response.body().asInputStream()) {byte[] buffer = new byte[1024];int bytesRead = -1;while ((bytesRead = inputStream.read(buffer)) != -1) {emitter.send(Arrays.copyOf(buffer, bytesRead));}} finally {emitter.complete();response.close();}} catch (IOException e) {emitter.completeWithError(e);}});return emitter;}}

六、OpenAIApiDao

public interface OpenAIApiDao {Response sendChatByOpenAI(OpenAIChatSendMessage openAIChatSendMessage);}

七、feign初始化、调用

包含跳过https校验

@Slf4j
@Service
public class OpenAIApiDaoImpl implements OpenAIApiDao {private static OpenAIChatApi OPEN_AI_CHAT_API;@Value("${open-ai.url}")protected String url;@Value("${open-ai.key}")private String key;private static SSLSocketFactory createTrustAllSslSocketFactory(TrustManager[] trustManagers) throws NoSuchAlgorithmException, KeyManagementException {SSLContext sslContext = SSLContext.getInstance("TLS");sslContext.init(null, trustManagers, new SecureRandom());return sslContext.getSocketFactory();}@PostConstruct@SneakyThrowsprotected void init() {// 跳过https校验// 1. 创建一个不进行任何证书校验的 TrustManagerTrustManager[] trustAllCerts = new TrustManager[] {new X509TrustManager() {public void checkClientTrusted(X509Certificate[] chain, String authType) {}public void checkServerTrusted(X509Certificate[] chain, String authType) {}public X509Certificate[] getAcceptedIssuers() { return new X509Certificate[0]; }}};// 2. 创建一个 OkHttpClient.Builder 对象,并将上面创建的 TrustManager 设置到 OkHttpClient.Builder 中OkHttpClient.Builder builder = new OkHttpClient.Builder().hostnameVerifier((hostname, session) -> true).sslSocketFactory(createTrustAllSslSocketFactory(trustAllCerts), new X509TrustManager() {@Overridepublic void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException {}@Overridepublic void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException {}@Overridepublic X509Certificate[] getAcceptedIssuers() {return new X509Certificate[0];}});OPEN_AI_CHAT_API = Feign.builder().client(new feign.okhttp.OkHttpClient(builder.build())).decoder(new Decoder.Default()).encoder(new JacksonEncoder()).errorDecoder(new ErrorDecoder.Default()).target(OpenAIChatApi.class, url);}@Overridepublic Response sendChatByOpenAI(OpenAIChatSendMessage openAIChatSendMessage) {return OPEN_AI_CHAT_API.sendChatMessage(key, openAIChatSendMessage);}
}

八、调用层

public interface OpenAIChatApi {/*** 聊天消息发送*/@RequestLine("POST v1/chat/completions")@Headers({"Content-Type: application/json","Authorization: {key}","Accept: application/octet-stream"})Response sendChatMessage(@Param("key") String key, OpenAIChatSendMessage messages);}

九、VO类

1.OpenAIChatMessage

@Data
public class OpenAIChatMessage {private String role;private String content;
}

2.OpenAIChatSendMessage

@Data
public class OpenAIChatSendMessage {@ApiModelProperty("消息记录")private List<OpenAIChatMessage> messages;@ApiModelProperty("是否使用流式传输")private Boolean stream;@ApiModelProperty("温度(准确率,温度越高消费时间约长)")private BigDecimal temperature;@ApiModelProperty("指定生成文本的概率阈值。这个参数可以控制生成文本的多样性,以避免生成过于相似的文本。")private BigDecimal top_p;
}

ok,齐活~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/54935.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

chat-gpt私服,无障碍使用高端AI工具,欢迎免费试用~

要说最近最火的技术&#xff0c;那就是chat-gpt了&#xff0c;我个人在平时工作中&#xff0c;也用了很多次&#xff0c;确实能提高不少工作效率&#xff0c;比如&#xff1a; 让它写写常用的示例代码&#xff1a; -让它进行角色扮演 也能为繁杂的工作带来不少乐趣&#xff0c…

Worldcoin完成1.15亿美元融资,它会成为下一个史诗级加密项目吗?

ChatGPT 创始人 Sam Altman 联合创办的加密项目 Worldcoin 刚刚宣布完成了 1.15 亿美元 C 轮融资&#xff0c;这位 AI 领域最炙手可热的人物为何会创办这个加密项目&#xff0c;这是他 AI 愿景的一部分吗&#xff1f; Blockchain Capital 领投了 Worldcoin 的这轮最新的融资&am…

ChatGPT如何帮助学生学习

​ 一些教育工作者担心学生可能使用ChatGPT作弊。因为这个AI工具能写报告和计算机代码&#xff0c;画出复杂图表……甚至已经有许多学校把ChatGPT屏蔽。 研究发现&#xff0c;学生作弊的主要原因是想考得好。是否作弊与作业和考试的打分方式有关&#xff0c;所以这与技术的便…

Python盯盘机器人,实时监控股票价格,还能邮件通知你

前言 Python凭借其开发效率高和功能强大的特性&#xff0c;在众多编程语言中脱颖而出&#xff0c;成为大数据时代的分析利器。 据我多年的领悟&#xff0c;编程语言只是一种按照人的意图去实现特定功能的高效工具而已&#xff0c;程序化所实现的核心决策功能依然需要人工智慧…

NLP实战:Pytorch实现6大经典深度学习中文短文本分类-bert+ERNIE+bert_CNN+bert_RNN+bert_RCNN+bert_DPCNN

目录 Introduction 导言数据集Python环境及安装相应依赖包Anaconda环境配置 源代码地址预训练语言模型下载新建saved_dict文件夹 Bert模型说明 ERNIEERNIE 1.0ERNIE2.0ERNIE 3.0 bert_CNN、bert_RNN、bert_RCNN、bert_DPCNN模型说明 各模型效果对比参考资料其它资料下载 Introd…

程序员诗2首:悲催诗(史)与爱情诗

这几周《非诚勿扰》来了不少IT男&#xff0c;而且来自硅谷&#xff0c;这触发了大家对程序员的好奇心&#xff0c;其中主持人孟非读的一首诗堪称经典&#xff0c;我载下来&#xff0c;大家来吐吐槽&#xff01; 举头望明月&#xff0c;低头写程序。 但愿人长久&#xff0…

程序员可以有多浪漫,盘点那些像诗一样美的代码(C语言版)

文章目录 「没有你&#xff0c;我无法向世界问好」「让你的每个程序都可以留下笑脸」「UNHANDLED LOVE」「IMPORT SOUL」「很久很久以前&#xff0c;...」「都听你的」「Hello World」「最萌宏定义」「假作真时真亦假」「嘤语言 & e语言」「面向StackOverflow编程」「Don’…

JAVA 仿QQ聊天程序(附源码)

个人推荐: &#x1f4e2;&#x1f4e2;&#x1f4e2; 前些天发现了一个蛮有意思的人工智能学习网站,8个字形容一下 "通俗易懂&#xff0c;风趣幽默"&#xff0c;感觉非常有意思,忍不住分享一下给大家。点击跳转到教程。 前言: 第一次通过java编写完了一个模拟QQ的C/S…

2022年营销传播研究报告

第一章 行业概况 营销传播是公司试图向消费者直接或间接地告知、劝说和提醒其销售的产品和品牌信息的活动。在某种意义上&#xff0c;营销传播代表着公司及其品牌的声音&#xff0c;它们是公司与消费者进行对话和建立关系的桥梁。营销传播能够通过强化顾客忠诚度&#xff0c;提…

【RPA之家转载】捷报频传,影刀RPA荣获“时尚行业数字化卓越产品大奖”

RPA之家&#xff08;RPA之家|RPA|RPA新闻|RPA案例|RPA应用|RPA咨询|RPA培训|RPA认证|RPA教程&#xff09;是中国具有影响力的RPA垂直交流社区&#xff0c;社区汇聚了RPA领域的各类从业人员。其中包括RPA开发工程师、售前工程师、业务分析师、架构师、运维工程师、项目管理、项目…

哪家代运营公司比较好?天猫代运营公司十大排名任你挑选。

如今的疫情反反复复&#xff0c;在这种情形下&#xff0c;电商行业呈现了更大的发展空间。而随着互联网的发展&#xff0c;也让传统的实体店铺陷入了困境&#xff0c;于是大家纷纷进行了新的尝试&#xff0c;向线上电商平台进军&#xff0c;但是由于电商的技术壁垒比较高&#…

《python爬爬乐》入门篇:结构类型详解

python爬虫 字典 python中的字典(dict)&#xff0c;来源于生活中的目录。它的主要特征&#xff0c;不是根据位置来访问数据&#xff0c;而是根据一个预先约定好的关键字(key)来访问指定数据(value)&#xff0c;键和值使用“key : value”的方式来保存&#xff0c;可以称之为键…

不知道说些什么

周一入职新公司到今天连续干了三天&#xff0c;去公司基本从早干到晚&#xff0c;事很满&#xff0c;没时间看新闻看书思考。所以吧 起了这么一个标题。 最近有个瓜是绿地京津冀事业部营销部负责人陈军被实名举报&#xff0c;举报人举报绿地员工睡自己老婆&#xff0c;还怀了孩…

透过宝尊电商Q1财报,看品牌电商全渠道发展的想象力

北京时间5月18日晚间&#xff0c;宝尊电商公布其Q1财报&#xff0c;从基本面来看&#xff0c;宝尊电商行业龙头地位稳固。 财报显示&#xff0c;宝尊2021年Q1 总净营收达20.2亿元人民币&#xff0c;同比增33%。其中&#xff0c;非美国会计准则下运营利润达7,575万元人民币&…

互联网日报 | 瑞幸咖啡内部调查基本完成;12306官方支付宝小程序上线;华为openGauss正式开源...

今日看点 ✦ 瑞幸咖啡宣布内部调查基本完成&#xff0c;2019年净收入被夸大约21.2亿元 ✦ 华为正式宣布开源数据库能力&#xff0c;并成立openGauss开源社区 ✦ 紫光国微旗下紫光安全芯获得全球最高等级认证&#xff0c;实现中国零突破 ✦ 海航将推"嗨购自贸港"产品&…

全年GMV突破40亿元关口,为何如涵仍难造出第二个“张大奕”?

北京时间6月3日&#xff0c;网红电商公司如涵控股&#xff08;以下简称如涵&#xff09;发布了其截至3月31日的2020财年Q4及全年财报。从核心数据来看&#xff0c;如涵Q4营收出现下滑&#xff0c;但净亏损同比收窄&#xff1b;全年营收虽录得同比增长&#xff0c;亏损却在进一步…

Amazon SageMaker:搭建企业级AI模型的完整解决方案

目录 1 企业级AI应用的高昂成本2 什么是Amazon SageMaker&#xff1f;3 案例一&#xff1a;快速构建图像分类应用3.1 卷积神经网络3.2 本地测试版本3.3 Amazon SageMaker版本 4 案例二&#xff1a;快速构建AI绘画应用4.1 扩散模型简介4.2 模型构建与部署4.3 AI绘画测试(文生图)…

外贸业务员如何通过google搜索多个关键词批量提取客户网址?

做外贸通过google开发客户&#xff0c;已是主流。很多外贸公司已不做平台&#xff0c;完全自主开发客户。 通过google搜索客户的原理是什么&#xff1f;你客户的网站信息会被google收录(比如公司网址、公司介绍、公司产品、只要是网站出现的信息基本上都会被收录)&#xff0c;…

chatgpt赋能python:Python制图:数据可视化的艺术

Python 制图: 数据可视化的艺术 作为一名有着10年 Python 编程经验的工程师&#xff0c;我深信数据可视化是企业或项目中至关重要的一环。Python 具有强大的数据分析和可视化能力&#xff0c;通过一些库&#xff0c;如 Matplotlib、Seaborn 和 Plotly&#xff0c;我们可以轻松…

chatgpt赋能python:Python坐标图:简单易用的数据可视化工具

Python 坐标图&#xff1a;简单易用的数据可视化工具 作为一种通用工具&#xff0c;Python 不仅在数据科学、自然语言处理、机器学习和深度学习等领域应用广泛&#xff0c;还在数据可视化方面表现出色。Python 的数据可视化库丰富多样&#xff0c;其中最受欢迎的就是 Matplotl…