基于ChatGPT API的PC端软件开发过程遇到的问题的分析

这篇具有很好参考价值的文章主要介绍了基于ChatGPT API的PC端软件开发过程遇到的问题的分析。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

如果喜欢本文章,记得收藏哦!
关注我,一起学Java。

一、基于ChatGPT API的PC端软件开发过程遇到的问题的分析

最近这个OpenAI公司推出的GPT-4.0模型真是太火了。当然由于OpenAI目前还没有正式全面对外开放GPT-4.0 API,所以本次使用的是GPT-3.5 API。

首先来看一下效果图吧!

本客户端使用的是 JavaFX 开发的。JavaFX 相比于 Swing 来说,JavaFX 支持 CSS 样式,如果使用 Java 来开发 GUI 软件的话,还是推荐使用 JavaFX 的。JavaFX 是 2008 年由 Oracle 公司推出的项目。需要说明的是在高版本的 JDK 中不含有 JavaFX 相关的 API,所以你需要自己安装 JavaFX。因为我开发使用的是 JDK 8 所以无需自己另外安装 JavaFX,直接就可以调用 JavaFX API。

上面的图中我们可以看到使用 JavaFX 编写的 UI 界面不是太好看,没办法 Java 是我的主力编程语言,所以只能用 Java 来编写 UI 界面了。

主要有四个功能,分别是:发送,保存,查看,删除。其中发送是最核心的功能。在发送时会间接调用 GPT-3.5 API,这里为什么说是间接调用而不是直接调用呢,想必大家都知道,这个 OpenAI 公司是不对我们中国地区开放的,虽然我们可以直接访问OpenAI 的官方网站,但是不能访问 OpenAI 的产品ChatGPT。所以这里我们必须要自己使用一个国外的服务器作为中转服务器。很容易理解为啥使用中转服务器就可以访问GPT API,比如你是A,你可以访问B,但是你无法访问C,然而B是可以访问C的,那么你就可以告诉B,让B把信息传递给C。

这里我只讲开发客户端软件遇到的问题,不会讲解如何编写接口。

二、遇到的第一个问题,用户点击发送按钮后,线程阻塞

这个问题主要是因为用户点击了发送按钮后会调用 Hutool 工具类中的 HttpRequest.post() 方法将数据发送到自己定义的接口上。代码如下:

sendButton.setOnAction(e -> sendMessage());
private void sendMessage() {
    // 获取用户输入的消息并将其添加到聊天区域
    String prompt = inputArea.getText();

    // 获取当前时间
    String nowTime = getNowTime();
    chatArea.appendText(nowTime + "\n");
    chatArea.appendText("我说:" + prompt + "\n\n");

    // 清空输入框
    inputArea.setText("");

    // 存储上下文语境
    messages.add(new Message("user", prompt));

    // 获取 ChatGPT 的回复
    String reply = httpRequest(messages);

    // 机器人回复时间
    String replyTime = getNowTime();
    chatArea.appendText(replyTime + "\n");
    // 把内容显示到 UI 界面上
    chatArea.appendText("机器人说:" + reply + "\n\n");

    messages.add(new Message("assistant", reply));
}

在上面的代码中,运行的时候给用户的感觉是不好的,因为在调用 httpRequest(messages) 时会造成线程阻塞。因为在当前线程在进行网络请求时是非常耗时的操作,所以整个 main 线程会阻塞,导致应用卡顿,如果 ChatGPT 一直没有响应结果,那么会一直卡在那里。

或许你们想到的是创建一个新的线程来发送 http 请求就解决了,其实不是的,问题的根源在我们点击“发送”按钮,我们应该在点击发送按钮的时候创建新的线程,当然这里我在发送 http 的时候也是创建了新的线程。代码如下:

sendButton.setOnAction(e -> {
    Task<Void> task = new Task<Void>() {
        @Override
        protected Void call() throws Exception {
            // 执行耗时操作,例如发送网络请求或执行计算密集型任务
            sendMessage();
            // 返回null
            return null;
        }
    };

    // 在后台线程上执行Task
    new Thread(task).start();

    // 将操作提交到JavaFX应用程序线程队列中
    Platform.runLater(() -> {
        // 在此更新UI或执行其他需要在JavaFX应用程序线程上执行的操作
    });
});
private void sendMessage() {
    // 获取用户输入的消息并将其添加到聊天区域
    String prompt = inputArea.getText();

    // 获取当前时间
    String nowTime = getNowTime();
    chatArea.appendText(nowTime + "\n");
    chatArea.appendText("我说:" + prompt + "\n\n");

    // 清空输入框
    inputArea.setText("");

    // 存储上下文语境
    messages.add(new Message("user", prompt));

    // 获取 ChatGPT 的回复
    // String reply = httpRequest(messages);

    // 创建新的线程去发送 ChatGPT 请求
    FutureTask<String> task = new FutureTask<String>(new Callable<String>() {
        @Override
        public String call() throws Exception {
            return httpRequest(messages);
        }
    });
    new Thread(task).start();
    try {
        String reply = task.get();

        // 机器人回复时间
        String replyTime = getNowTime();
        chatArea.appendText(replyTime + "\n");
        // 把内容显示到 UI 界面上
        chatArea.appendText("机器人说:" + reply + "\n\n");

        messages.add(new Message("assistant", reply));
    } catch (Exception e) {
        e.printStackTrace();
    }
}

注意:如果想要更新 UI 界面的内容,那么可以使用Platform.runLater()

三、第二个问题是ChatGPT无法进行连续对话,也就是没有上下文语境

这个问题折腾了好久。官方开发文档好像也没有特地说明这一点。我是研究了 GitHub 的代码,并且网上搜索了别人的想法,然后知道必须要把聊天记录再次发送给 ChatGPT API。但是这样就会消耗更多的资金。因为 OpenAI 并非真的是 Open。

我们每次把聊天记录发送给 ChatGPT 就行。

这里我们使用一个集合存放聊天记录,每次把聊天记录追加到集合里面即可。然后把 List 集合发送到 ChatGPT API。

// 存放上下文语境
private List<Message> messages = new ArrayList<>();
// 存储上下文语境
messages.add(new Message("system", "你是一个助手"));
messages.add(new Message("user", prompt));
messages.add(new Message("assistant", reply));

其中 Message 类代码如下:

@Data
@NoArgsConstructor
@AllArgsConstructor
public class Message {
    private String role;
    private String content;
}

ChatGPT 开发文档中说明了 role 有三种值,一个是 system,表示让 ChatGPT 充当什么角色,第二种取值是 user,表示用户,第三种是 assistant,表示 ChatGPT。而角色对应的内容存储到 content 变量中。这类似于 map 集合,也就是 role 是 key,content 是 value。


有更多问题欢迎访问博客。文章来源地址https://www.toymoban.com/news/detail-401930.html

到了这里,关于基于ChatGPT API的PC端软件开发过程遇到的问题的分析的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 手机版ChatGPT软件开发

        手机版ChatGPT软件开发需要以下步骤:     确定需求:明确手机版ChatGPT软件的功能和特点,包括用户界面、交互方式、语音识别、自然语言处理等方面的要求。     设计UI界面:根据需求设计手机版ChatGPT软件的UI界面,包括首页、导航栏、对话框等元素的设计,保证良好

    2024年02月15日
    浏览(35)
  • Fpga开发笔记(二):高云FPGA发开发软件Gowin和高云fpga基本开发过程

    若该文为原创文章,转载请注明原文出处 本文章博客地址:https://hpzwl.blog.csdn.net/article/details/135620590 红胖子网络科技博文大全:开发技术集合(包含Qt实用技术、树莓派、三维、OpenCV、OpenGL、ffmpeg、OSG、单片机、软硬结合等等)持续更新中… 上一篇:《Fpga开发笔记(一):

    2024年01月16日
    浏览(73)
  • chatgpt模拟机器人软件开发

        ChatGPT的参数取决于具体的模型和实现方式,但以下是一些常见的ChatGPT参数:     模型深度:指模型中神经网络的层数。通常情况下,层数越多,模型的表达能力也就越强。     隐藏单元大小:指在模型中每个隐藏层中神经元的数量。通常情况下,隐藏单元数量越多,模

    2024年02月01日
    浏览(49)
  • 盘点好用的API管理软件,API管理开发工具Postman

    Postman是一款简单高效的api管理开发工具,你可以在组织良好的图形用户界面中管理,组织和测试API,并加速新应用程序的开发。Postman破解版为您提供了为API创建和组织HTTP请求的可能性,同时还集成了测试功能。您可以创建自定义方案并以简化的方式分析API响应。而且由于云

    2023年04月08日
    浏览(39)
  • 软件测试/测试开发丨ChatGPT在软件测试领域的应用

    随着互联网技术的迅速发展,软件已经成为现代社会中不可或缺的一部分。而软件测试作为保障软件质量的关键环节,也越来越受到人们的关注。在这个领域,ChatGPT作为一种新型的人工智能技术,正逐渐应用于软件测试领域,为软件测试带来了诸多创新和改进。 在软件测试

    2024年02月14日
    浏览(63)
  • 软件工程:小组开发过程技术(VS VSS UNIX C++)

            ( 注:这个东西是2007年写的,算是个缅怀,或是个吐槽。所有注都是本次发布新加的。 ) 简介         本文讲述完全没有软件工程经验的软件小组如何借助VS VSS等工具为UNIX开发C++程序,实现在小组规模的初级开发过程。这不是TSPi或者CMM,这比CMM1级(初始级)

    2024年02月07日
    浏览(70)
  • openharmony开发最新4.0版本----介绍openharmony(基于api10 ,华为dev studio 4.0,分享学习过程中遇到的难题难点),学习笔记,持续更新

            DevEco Studio(OpenHarmony)使用指南:         HUAWEI DevEco Studio For OpenHarmony(以下简称DevEco Studio)是基于IntelliJ IDEA Community开源版本打造,面向OpenHarmony全场景多设备的一站式集成开发环境(IDE),为开发者提供工程模板创建、开发、编译、调试、发布等E2E的Open

    2024年02月03日
    浏览(47)
  • ChatGPT 驱动软件开发:AI 在软件研发全流程中的革新与实践

    计算机技术的发展和互联网的普及,使信息处理和传输变得更加高效,极大地改变了金融、商业、教育、娱乐等领域的运作方式。数据分析、人工智能和云计算等新兴技术,也在不断地影响和改变着各个行业。 如今,我们正在见证人工智能技术的突破性发展。以OpenAI的ChatG

    2024年02月08日
    浏览(60)
  • 【好书推荐】ChatGPT 驱动软件开发:AI 在软件研发全流程中的革新与实践

    计算机技术的发展和互联网的普及,使信息处理和传输变得更加高效,极大地改变了金融、商业、教育、娱乐等领域的运作方式。数据分析、人工智能和云计算等新兴技术,也在不断地影响和改变着各个行业。 如今,我们正在见证人工智能技术的突破性发展。以OpenAI的ChatG

    2024年02月06日
    浏览(92)
  • 软件测试/测试开发丨​利用ChatGPT编写测试用例

    测试用例是测试人员的核心工作内容,是测试人员思想的“实现类”,其充分体现了测试的思路,可以为后续的测试行为提供指导,是测试人员了解业务的重要根据和质量之根本。如果测试用例设计得不完成,出现了遗漏,那么通常是会出现大家不想看到的后果,如漏测、线

    2024年02月08日
    浏览(59)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包