Java调用ChatGPT(基于SpringBoot和Vue)实现可连续对话和流式输出的ChatGPT APIjava

注意:流式输出在2.4节,请仔细阅读到最后,谢谢!

pom.xml中引入依赖(当前最新版本为1.1.4,可前往Github页面查看当前最新版本)

io.github.asleepyfishchatgpt1.1.4

例:

chatgpt:token:sk-xxxxxxxxxxxxxxxproxy-host:127.0.0.1proxy-port:xxxxsession-expiration-time:30其中token、proxy-host、proxy-port是必填的

上面的session-expiration-time参数很重要,是用来表示这个会话在多久不访问后被销毁,从而实现联系上下文的连续对话。

实现方式是通过ChatCompletionRequest中的user来区分某个会话,而session-expiration-time表示这个会话在多久不访问后被销毁。

如果这里看不懂请看2.1节示例

启动类上加入图中的注解则将服务注入到Spring中。

OpenAiUtils.createChatCompletion(content);//不建议使用入参content即输入的问题的字符串。但是不建议使用。

这里建议使用下面的方式,通过传入user的值,再结合session-expiration-time参数,可以实现指定某次会话,或者某个用户的连续对话。

OpenAiUtils.createChatCompletion(content,user);//建议使用入参ChatCompletionRequest里包含模型的一些可调参数。

OpenAiUtils类中还提供了多个可供选择的静态方法,可以自行查看。

上述方法的返回参数是一个list,是因为调整参数返回答案n可以一次性返回多条不同的解答(n为ChatCompletionRequest类中一个参数)。

测试代码:

@PostMapping("/chatTest")publicListchatTest(Stringcontent){returnOpenAiUtils.createChatCompletion(content,"testUser");}Post请求

入参输入:Java序列化的方式

返回结果:

["\n\nJava序列化是将Java对象转换为字节序列的过程,以便在网络上传输或将其保存到磁盘上。Java提供了两种序列化方式:\n\n1.基于Serializable接口的序列化\n\nSerializable接口是Java提供的一个标记接口,用于标记一个类可以被序列化。如果一个类实现了Serializable接口,那么它的所有非瞬态字段都会被序列化。序列化的过程可以通过ObjectOutputStream类来实现,反序列化的过程可以通过ObjectInputStream类来实现。\n\n2.基于Externalizable接口的序列化\n\nExternalizable接口也是Java提供的一个标记接口,用于标记一个类可以被序列化。与Serializable接口不同的是,Externalizable接口需要实现writeExternal和readExternal方法,这两个方法分别用于序列化和反序列化。在序列化的过程中,只有被writeExternal方法显式写入的字段才会被序列化,而在反序列化的过程中,只有被readExternal方法显式读取的字段才会被反序列化。\n\n总的来说,基于Serializable接口的序列化更加简单,但是它会序列化所有非瞬态字段,包括一些不需要序列化的字段,而基于Externalizable接口的序列化可以更加灵活地控制序列化的过程。"]再次输入:有没有更加高效的序列化框架

最简单的使用方式是

OpenAiUtils.createImage(prompt);入参表示生成图片的描述文字,还提供了一个通用的静态方法

publicstaticListcreateImage(CreateImageRequestcreateImageRequest){...}入参CreateImageRequest中有一些可以使用的参数,其中n表示生成图片的数量,responseFormat表示生成图片的格式,格式中分为url和b64_json两种,如果希望返回的是url,则返回的url会在生成一个小时后消失,默认值是url。

测试代码

@TestpublicvoidtestGenerateImg(){OpenAiUtils.createImage("英短").forEach(System.out::println);}结果默认情况下会生成一个url,点击去就可以看到图片。

在3.2的基础上做了优化,直接使用responseFormat为b64_json然后解析成图片返回。简单使用方式如下:

OpenAiUtils.downloadImage(prompt,response);通用方式如下:

publicstaticvoiddownloadImage(CreateImageRequestcreateImageRequest,HttpServletResponseresponse){...}当CreateImageRequest对象中设置的返回参数n大于1时,会将图片打包成一个zip包返回,当n等于1时直接返回图片。

@RestControllerpublicclassChatGPTController{@GetMapping("/downloadImage")publicvoiddownloadImage(Stringprompt,HttpServletResponseresponse){OpenAiUtils.downloadImage(prompt,response);}}发送get请求,然后选择SendandDownload

我用的get工具是idea里面下载的插件FastRequest的,用Postman也是可以的,但是要选择SendandDownload,上图中绿色的箭头是Send,蓝色的是SendandDownload。

生成流式回答的方法是OpenAiUtils的createStreamChatCompletion方法,本工具类重载了同名的多个参数的方法,其中最通用的方法是

publicstaticvoidcreateStreamChatCompletion(ChatCompletionRequestchatCompletionRequest,OutputStreamos){...}最简单的方法是

publicstaticvoidcreateStreamChatCompletion(Stringcontent){...}其中的content即本次对话的问题。

这里需要主义的是,上述第一个方法中的OutputStreamos其实是一个必传的对象,上述的最简单的方法实际上是默认传递的System.out这个os对象,也就是将流式问答的结果显示到IDEA的控制台。

如果需要将流式问答的结果显示到其他界面可以自发的传入OutputStreamos对象,这里有一个简便的方法是

publicstaticvoidcreateStreamChatCompletion(Stringcontent,OutputStreamos){...}只需要输入问题,和输出流对象即可。

代码如下:

本次测试的结果如下面的Gif图所示

上述的方法中输出流传入的是System.out对象,该对象实际上就是一个PrintStream对象,会把输出结果展示到控制台。

如果需要将输出结果在浏览器展示,可以从前端传入一个HttpServletResponseresponse对象,拿到这个response以后将response.getOutputStream()这个输出流对象传入createStreamChatCompletion方法的入参中。同时,为了避免结果输出到浏览器产生乱码和支持流式输出,需要ContentType和CharacterEncoding。

@GetMapping("/streamChatWithWeb")publicvoidstreamChatWithWeb(Stringcontent,HttpServletResponseresponse)throwsIOException{//需要指定response的ContentType为流式输出,且字符编码为UTF-8response.setContentType("text/event-stream");response.setCharacterEncoding("UTF-8");//禁用缓存response.setHeader("Cache-Control","no-cache");OpenAiUtils.createStreamChatCompletion(content,response.getOutputStream());}测试结果过程的Gif图如下所示:

调用的后端方法同2.4.2节方法streamChatWithWeb,前端只需要在界面传入问题,点击提问按钮即可返回结果流式输出到文本框中。

THE END
1.ChatGPT在线网页界面全面解析推荐使用ChatGPT4.0,国内可直接访问: ChatGPT在线网页界面为用户提供了一个直观、便捷且功能丰富的交互平台。以下是对ChatGPT在线网页界面的全面解析: 一、界面布局 ChatGPT在线网页界面通常包括以下几个主要部分: 标题栏:位于页面顶部,通常包含ChatGPT的标识、版本信息(如ChatGPT 4.0)以及可能的登录/注册按钮。 https://www.729.cn/news/685.html
2.ChatGPT新版本界面和功能曝光……界面私有界面设计新界面设计:新版本的ChatGPT界面进行了视觉上的改进,采用了黑白色调,显得更加高级,同时模型选择从对话区域中间移动到了左上方。 Magic Maker功能:这是一个自定义GPT的功能,允许用户创建具有独特风格和领域的GPT。与之前的Custom Instructions不同,这个功能更加强大,可以基于用户的描述来抽取Custom Instructions。 http://k.sina.com.cn/article_1627825392_6106a4f004000z5l2.html
3.chatgpt的界面怎么翻译中文?Worktile社区要将ChatGPT界面翻译成中文,以下是一些建议和步骤: 1.了解ChatGPT界面:首先,你需要了解ChatGPT界面的各个部分和功能,这样才能准确地进行翻译。ChatGPT通常包括输入框、对话历史记录、结果展示框和一些设置选项等。 2.确定需要翻译的文本:对ChatGPT界面进行翻译时,你需要确定哪些文本需要被翻译。这可能包括按钮、标签、https://worktile.com/kb/ask/559190.html
4.从人机界面设计黄金三法则视角看ChatGPT的界面设计的“好”与“坏体验过很多国内外的AI工具,近期接触到了人机界面设计的黄金三法则,发现很多 AI 工具的界面设计存在很多违背人机界面设计的黄金三法则的地方。 本文将介绍什么是人机界面设计的黄金三法则,同时从人机交互设计的黄金三法则的角度谈谈ChatGPT界面设计的“好”与“坏”。 https://blog.csdn.net/w605283073/article/details/137385782
5.CHATGPT使用界面MACCHATGPT使用界面MAC 导读:CHATGPT是一款优秀的聊天机器人,它的使用界面非常友好,也非常适合MAC用户使用。下面我们就来介绍一下CHATGPT使用界面MAC的基本知识。在使用CHATGPT前,我们需要确保自己已经安装了适当的软件 CHATGPT是一款优秀的聊天机器人,它的使用界面非常友好,也非常适合MAC用户使用。下面我们就来介绍一下http://chatgpt.kuyin.cn/article/22566.html
6.bootstrapvue实现chatgpt聊天界面vue聊天uibootstrap vue 实现chatgpt聊天界面 vue聊天ui 推荐一款基于Vue的前端IM聊天组件 基于VUE 2.0 的 IM 聊天组件 特性 拥有丰富的自定义功能,任意搭配出不同风格的聊天界面 可以单独使用内部组件,比如编辑框/按钮/popover 等 不依赖任何第三方组件库 可任意扩展的聊天消息类型https://blog.51cto.com/u_16213682/10716328
7.chatgpt桌面版打开白屏导读:为帮助您更深入了解chatgpt桌面版打开白屏,小编撰写了chatgpt桌面版打开白屏,chatgpt桌面版本,chatgpt桌面版,chatgpt打开界面,chatgpt桌面版打不开等5个相关主题的内容,以期从不同的视角,不同的观点深入阐释chatgpt桌面版打开白屏,希望能对您提供帮助。 http://chatgpt.cmpy.cn/article/2372519.html
8.仿chatGPT或chatPDF的前端界面布局,css实现对话聊天布局代码,响应式chatPDF或者chatGPT的界面挺简洁的,就是一个左侧的列表以及右侧的对话列表,现在使用css实现这样的布局 充分运用了flex布局方式实现,左右分栏,以及对话形式展示效果 下面是效果图: 在手机设备看就隐藏左侧,右侧100%适应 下面就是html和css的布局代码 .chatpdf{ display:https://www.cnblogs.com/taoshihan/p/17343058.html
9.ChatGPT为ChatGPTAPI提供了一个轻快好用的Web图形界面将神/Chuanhu-ChatGPT forked fromGitee 极速下载/Chuanhu-ChatGPT 确定同步? 同步操作将从Gitee 极速下载/Chuanhu-ChatGPT强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!! 确定后同步将在后台操作,完成时将刷新页面,请耐心等待。 https://portrait.gitee.com/JiangShen/Chuanhu-ChatGPT
10.chatGPT怎么改中文ChatGPT是由OpenAI开发的交互式AI大模型,它能够自动生成文本,回答问题以及完成其他各种语言任务,目前来看,ChatGPT主要是英文界面,如果想要改成中文界面,需要进行一些设置,本文将详细介绍如何将ChatGPT改成中文界面,首先需要打开ChatGPT的官网:https://chatgpt.com/https://www.kdun.com/ask/116231.html
11.springbootopenai后端:http://gpt.ht.mj.ink:8899 技术社区 http://doc.mj.ink MidJourney API接口文档 视频教程 后端启动教程后端界面启动教程PC端启动教程 本项目不在任何平台出售,如有发现请积极举报 超级AI大脑产品架构图 项目关系 项目Star简介 springboot-openai-chatgpt https://toscode.mulanos.cn/ylzl/springboot-openai-chatgpt
12.支持并行问询多种LLM模型,支持chatglm3等本地模型。接入通义千ChatGPT + GLM3 + MOSS + LLAMA2 + 通义千问(需要熟悉Nvidia Docker运行时) #修改docker-compose.yml,保留方案2并删除其他方案。然后运行:docker-compose up 安装方法III:其他部署方法 Advanced Usage I:自定义新的便捷按钮(学术快捷键) 现在已可以通过UI中的界面外观菜单中的自定义菜单添加新的便捷按钮。如果https://github.com/binary-husky/gpt_academic