使用java对接chatgpt(含全部代码)

这篇具有很好参考价值的文章主要介绍了使用java对接chatgpt(含全部代码)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

使用java对接chatgpt(含全部代码)

  1. 因为对vscode不熟悉,前段界面我也是在idea里写的,先看一下效果图是这样,比较简陋使用java对接chatgpt(含全部代码),java,java,chatgpt,开发语言

我直接上代码,关于chatgpt前端的html,对了因为这个是我用之前写的匿名群聊改的,可能有多余的就是样式没去掉,如果有人用的话自己看着可以优化下
前端这方面还有两个问题还没有优化我说一下,就是chatgpt返回的有markdown样式的话不能正常解析,二一个是换行有问题
不过不影响大方面使用,后期我会优化的

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <!-- 上述3个meta标签*必须*放在最前面,任何其他内容都*必须*跟随其后! -->
    <meta name="viewport"
          content="width=device-width, initial-scale=1.0, maximum-scale=1.0,user-scalable=no,minimal-ui">
    <title>chatgpt问答</title>
    <link rel="icon" href="./../images/favico.ico">
    <!--不同屏幕尺寸根字体设置-->
    <script src="./../js/base.js"></script>
    <!--element-ui的样式-->
    <link rel="stylesheet" href="../../backend/plugins/element-ui/index.css"/>
    <!--引入vant样式-->
    <link rel="stylesheet" href="../styles/vant.min.css"/>
    <!-- 引入样式  -->
    <!--<link rel="stylesheet" href="../styles/index.css"/>-->
    <!--本页面内容的样式-->
    <link rel="stylesheet" href="./../styles/login.css"/>

    <style scoped>
        .chat {
            font-size: 20px;
            padding-left: 5%;
            padding-right: 5%;
            padding-top: 20px;
            position: absolute;
            height: 75%;
            width: 90%;
            /*height: 500px; !* 设置内容高度 *!*/
            overflow-y: scroll; /* 启用垂直滚动 */
            overflow-x: hidden; /* 禁用水平滚动 */
        }

        .chat-header .back-btn {
            margin-right: 16px;
            cursor: pointer;
        }

        .chat-header .user-avatar {
            margin-right: 12px;
            width: 40px;
            height: 40px;
            border-radius: 50%;
            overflow: hidden;
        }

        .message-user img {
            width: 100%;
            height: 100%;
            object-fit: cover;
            object-position: center;
        }

        .chat-input {
            flex: 1;
            /*height: 40px;*/
            /*margin-right: 10px;*/
            padding-bottom: 10px;
        }

        form {
            position: fixed;
            /*padding-top: 20px;*/
            /*padding-left: 5%;*/
            bottom: 0;
            width: 90%
            /*padding-right: 5%;*/
        }

        p {
            color: black;
            font-size: 15px;
            margin-bottom: 10px;
        }

        .el-textarea {
            padding-right: 20px;
            display: inline-block;
            width: 70%;
        }

        .chat-input .el-button el-button--primary {
            margin-left: 10px;
        }

        .message-body img {
            width: 50%;
            height: 50%;
            object-fit: cover;
        }

        .avatar {
            margin-right: 12px;
            /*width: 40px;*/
            /*height: 40px;*/
            /*border-radius: 50%;*/
            overflow: hidden;
            float: left; /* 将用户头像框浮动到左侧 */
            margin-top: 5px; /* 稍微调整一下上边距,使其垂直居中 */
        }
        .message-content {
            overflow: hidden;
        }
        .message-content span{
            vertical-align: super;
        }
        .avatar img {
            width: 46px;
            height: auto;
        }

        .el-message-box {
            width: 300px;
        }

        [v-cloak] {
            display: none;
        }
    </style>


</head>
<body>

    <div class="chat" id="login" >
        <div class="chat-history" v-cloak>
            <div class="chat-bubble" v-for="message in messages" :key="message.id">
                <div class="message-content" v-if='message.role=="assistant"'>
                    <img :src="'./../images/1.ico'" alt="请等待">
                    <span>{{message.name}}</span>
                    <div class="content">{{message.content}}</div>
                </div>
                <div class="message-content" v-else>
                    <img :src="'./../images/2.ico'">
                    <span style="color: blue">{{message.name}}</span>
                    <div class="content">{{message.content}}</div>

                </div>
                <hr/>
            </div>
            <a id="myElement"></a>
        </div>

        <form>
            <div class="chat-input">
                <el-input :disabled="isButtonDisabled"
                          type="textarea"
                          placeholder="发送消息对chatgpt提问..."
                          v-model="input"
                ></el-input>
                <el-button type="primary"  @click="sendMessage">发送</el-button>
            </div>
        </form>
    </div>

<!-- 开发环境版本,包含了有帮助的命令行警告 -->
<script src="../../backend/plugins/vue/vue.js"></script>
<!-- 引入组件库 -->
<script src="../../backend/plugins/element-ui/index.js"></script>
<!-- 引入vant样式 -->
<script src="./../js/vant.min.js"></script>
<!-- 引入axios -->
<script src="../../backend/plugins/axios/axios.min.js"></script>
<script src="./../js/request.js"></script>
<script src="./../api/login.js"></script>

</body>

<script>
    new Vue({
        el: "#login",
        data() {
            return {
                lock:true,
                input:'',
                messages:[
                ],
                isButtonDisabled: false,
                isInteger: 0
            };
        },
        created() {
            let uuid = localStorage.getItem('uuid');
            if (uuid == null) {
                uuid = Math.random().toString(36).substring(2, 10);
                localStorage.setItem('uuid', uuid);
            }
        },
        watch: {
            messages(value) {
                if (this.isInteger != value.length) {
                    this.isInteger = value.length;
                    this.scrollToEnd();
                }
            },
        },
        methods:{
            async sendMessage(){
                if (this.isButtonDisabled) {
                    return;
                }
                this.isButtonDisabled = true;

                let uuid = localStorage.getItem('uuid');
                if(this.input!=null&&this.input!=''&&this.lock==true){
                    this.lock=false;
                    this.messages.push({role:"user",content:this.input,name:"笨笨的杰瑞"});

                    $axios.post("/chatgpt", { userId: uuid, message: this.input })
                        .then((res) => {
                            this.messages.push({role:'assistant',content:res,name:"聪明的汤姆"});
                            this.lock=true;
                            this.isButtonDisabled = false;
                        });
                    this.input='';
                }
            },
            scrollToEnd() {
                const element = document.getElementById('myElement');
                element.scrollIntoView(false);
            }
        }
    });
</script>
</html>

后端代码如下

@RestController
@RequestMapping("/chatgpt")
public class chatgptController {
    private final String OPENAI_API_KEY = "你的sk";
    private final String OPENAI_API_URL = "https://api.openai.com/v1/chat/completions";
    private Map<String, List<String>> userSessions = new HashMap<>();

    @PostMapping
    public String chatWithGPT(@RequestBody ChatRequest chatRequest) {

        //获取用户的标识和消息
        String userId = chatRequest.getUserId();
        String message = chatRequest.getMessage();
        // 检查用户会话是否存在
        if (!userSessions.containsKey(userId)) {
            //第一次进来肯定不存在会话中,这时候我们放进去
            userSessions.put(userId, new ArrayList<>());
        }
        //把发送的消息扔进这个人的list中
        List<String> sessionMessages = userSessions.get(userId);
        sessionMessages.add(message);

        // 构建请求头
        HttpHeaders headers = new HttpHeaders();
        headers.setContentType(MediaType.APPLICATION_JSON);
        headers.setBearerAuth(OPENAI_API_KEY);

        // 构建请求体
        String requestBody = buildRequestBody(userId, sessionMessages);

        // 发送请求
        RestTemplate restTemplate = new RestTemplate();
        SimpleClientHttpRequestFactory factory = new SimpleClientHttpRequestFactory();
        //我用的呆里端口33210,这个要改
        factory.setProxy(new Proxy(Proxy.Type.HTTP, new InetSocketAddress("127.0.0.1", 33210)));
        restTemplate.setRequestFactory(factory);

        HttpEntity<String> request = new HttpEntity<>(requestBody, headers);
        ResponseEntity<String> response = restTemplate.postForEntity(OPENAI_API_URL,request, String.class);
        // 提取回复消息
        String responseBody = response.getBody();
        String reply = extractReplyFromResponse(responseBody);
        System.out.println("-------------------"+reply+"--------------------");

        //把回复消息也存进当前用户的的list中,方便上下文记忆
        sessionMessages.add(reply);

        return reply;
    }

    private String buildRequestBody(String userId, List<String> sessionMessages) {
        JSONArray messagesArray = new JSONArray();
        for (String message : sessionMessages) {
            JSONObject messageObj = new JSONObject();
            messageObj.put("role", "user");
            messageObj.put("content", message);
            messagesArray.add(messageObj);
        }

        JSONObject requestBodyObj = new JSONObject();
        requestBodyObj.put("model", "gpt-3.5-turbo");
        requestBodyObj.put("messages", messagesArray);

        return requestBodyObj.toString();
    }

    private String extractReplyFromResponse(String response) {
        JSONObject jsonObject = JSONUtil.parseObj(response);
        JSONArray choices = jsonObject.getJSONArray("choices");
        JSONObject firstChoice = choices.getJSONObject(0);
        JSONObject message = firstChoice.getJSONObject("message");
        String reply = message.getStr("content");

        return reply;
    }
}

好了,这就是关于通过java调用chatgpt的全部代码了文章来源地址https://www.toymoban.com/news/detail-598860.html

到了这里,关于使用java对接chatgpt(含全部代码)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 17行代码用python对接openai的api实现chatgpt微信对话机器人

    itchat python依赖下载 这里推荐这个。链接:衡天云

    2024年02月01日
    浏览(59)
  • 超级详细 JAVA 对接 ChatGPT 教程,实现自己的AI对话小助手

    大家好,由于近期需要对接了ChatGPT API所以特地记录下来,据介绍该模型是和当前官网使用的相同的模型,如果你还没体验过ChatGPT,那么今天就教大家如何打破网络壁垒,打造一个属于自己的智能助手把。本文包括API Key的申请以及网络代理的搭建,那么事不宜迟,我们现在开

    2024年02月08日
    浏览(41)
  • 玄子Share-自然语言编程(NLP)_Java开发小白向 ChatGPT 提问的最佳模板

    以下内容均为 ChatGPT 回答 玄子: 我向你提问时,问题描述精确的重要性 ChatGPT 3.5 问题描述的精确性非常重要,因为它可以让回答者更好地理解您的问题,并且更容易提供准确和有用的解决方案。如果问题描述不够清晰或不够详细,回答者可能会误解您的问题或者理解不到位

    2023年04月09日
    浏览(50)
  • go语言恶意代码检测系统--对接前端可视化与算法检测部分

    恶意代码检测系统。 功能点 详细描述 注册账号 未注册用户注册成为产品用户,从而具备享有产品各项服务的资格 登录账号 用户登录产品,获得产品提供的各项服务 上传恶意样本 用户可以将上传自己的收集到的恶意样本及其样本属性,网站会对该恶意样本进行保存 获取恶

    2024年02月12日
    浏览(43)
  • vs code 如何使用copilot(对接了chatgpt)

    VS Code 是一个非常流行的开发工具,而 Copilot 则是一个基于 GPT 模型的代码生成工具,可以通过 VS Code 安装相关的插件来使用。 以下是在 VS Code 中使用 Copilot 的步骤: 下载安装 VS Code 插件 首先,你需要下载并安装 Copilot 的 VS Code 插件。在 VS Code 中依次点击扩展 搜索“Copilot”

    2024年02月11日
    浏览(37)
  • Java 微信小程序-发货信息录入接口 对接代码

    微信小程序-发货信息录入接口开发文档 POST https://api.weixin.qq.com/wxa/sec/order/upload_shipping_info?access_token=ACCESS_TOKEN 参见「查询物流公司编码列表」对接代码

    2024年02月03日
    浏览(70)
  • Java:读取excel文件中的内容(简单、详细、明确、有全部代码)

    注意: jxl 仅支持读取 .xls 文件,读 .xlsx 会报错! 在 pom.xml 中引入 jxl 的依赖 支持读取 xlsx 文件的 poi 依赖说明、使用方法及更多详细内容可以参考: Java读取excel的方式,一篇文章看懂(详细)

    2024年02月12日
    浏览(48)
  • ChatGPT工作提效之小鹅通二次开发批量API对接解决方案(学习记录同步、用户注册同步、权益订购同步、开发文档)

    ChatGPT工作提效之初探路径独孤九剑遇强则强 ChatGPT工作提效之在程序开发中的巧劲和指令(创建MySQL语句、PHP语句、Javascript用法、python的交互) ChatGPT工作提效之生成开发需求和报价单并转为Excel格式 ChatGPT是一种实时对话生成模型,能够帮助用户快速地回答问题、提供信息,并

    2024年02月06日
    浏览(49)
  • Java实现五子棋小游戏(附思路讲解,全部代码,游戏截图)

    本文章是如何实现一个单机版双人五子棋小游戏,通过Swing技术进行可视操作. 个人简介: 🤦‍♂️个人主页:码云不秃头. 😜本人是一名大三学生,马上就要变成考研狗啦,通过一学期对Java学习,经过老师的教学,实现单机版的双人五子棋小游戏,大家互相学习,也同时为了完成我的实

    2024年02月07日
    浏览(48)
  • 微信支付-超详细java开发-小程序对接

    本文适用于有一定基础的开发者,简单易通。后台用的的是java,我用的是springBoot,其它框架基本同理,前端就是一个简单的demo。微信官方提供了V2和V3两种方式,本文基于V2版支付开发(后续更新V3)。V2和V3版本区别 1.思路介绍 本次以微信小程序开发为例,如果自己想要玩一

    2024年02月09日
    浏览(58)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包