chatgpt这么火?前端如何实现类似chatgpt的对话页面

📋 个人简介

  • 💖 作者简介:大家好,我是阿牛,全栈领域优质创作者😜
  • 📝 个人主页:馆主阿牛🔥
  • 🎉 支持我:点赞👍+收藏⭐️+留言📝
  • 📣 系列专栏:前端实用小demo🍁
  • 💬格言:迄今所有人生都大写着失败,但不妨碍我继续向前!🔥

请添加图片描述

目录

    • 📋 个人简介
  • 前言
    • 最终效果
    • 页面布局
      • flex布局一
      • flex布局二(重点)
    • js部分
    • 完整代码
  • 结语

前言

自从去年11月份chatgpt出圈之后,他的热度就居高不减,也出现了很多人借助接口开发的国内版本,那么本篇博客就从前端的角度来看看前端如何实现类似chatgpt的对话功能!

最终效果

源码在文末获取!

在这里插入图片描述
因为这是我写在一个项目中的,单独提出来可能配色效果不同,但功能和做法只要我们掌握了,那么自己想怎么写就怎么写!

页面布局

这一块比较简单,分析过chatgpt的页面的就会知道,他的页面布局方式是采用flex布局的,flex布局确实好用,那么我也是基于Bootsrap+jquery+flex布局完成了简易版的对话功能!主要有两个地方用到了flex布局!

flex布局一

在这里插入图片描述
这里的头像和文字采用的就是flex布局,并且文字和图片顶部对齐,防止文字较多依旧和图片中间对齐的bug。
需要设置css:

display: flex;
align-items: flex-start;

其中align-items: flex-start;的作用就是让文字与图片顶部对齐!

在这里插入图片描述

flex布局二(重点)

第二处用到flex布局的地方就是这个搜索框:
在这里插入图片描述
很多人觉得这个对话框很简单,flex布局实现输入框和按钮在同一行确实简单,但你要好好看看chatgpt的官网,都是有小细节的,这里面还是有很多知识点的。

首先,我要说的是这个输入框用的textarea,而不是input,区别在于,input输入的内容是不能换行的,但textarea文本框可以,但使用textarea的问题是,参数rows设置为一行,这个文本框的高度会很低,达不到chatgpt的那个页面要求,rows设置大一点或者这个文本框的高度给高一点会有一个问题就是输入时他的光标不会在文本框的高度中间,而是在第一行,我们是没法通过其他方式让输入光标垂直居中的,因此这也不符合chatgpt页面的要求,所以这确实是个值的学习的一点!看了chatgpt页面的做法后,我悟了,下面一张图来说明chatgpt是如何做的:

在这里插入图片描述
如图,你只要将textarea边框取消掉,然后focus伪类将边框效果也取消掉,外边再套一个div边框将textarea文本框和按钮套在里面就好了!

.ipt{display:flex;align-items: center;position: absolute;bottom: 60px;margin: 0 15px;padding-right: 15px;border-radius: 15px;width: calc(100% - 30px);height: 50px;border: 1px solid #e7eaec;
}
.ipt textarea {resize: none;overflow-y: auto;border: none;box-shadow: none;
}
.ipt textarea:focus{border: none !important;box-shadow: none !important;
}

最后,将这个输入框定位到页面底部就好!

js部分

首先,页面部分,我们添加消息到页面,包括用户的问题以及ai的回复,添加消息到页面时需要向上滚动:

// 添加用户消息到窗口
function addUserMessage(message) {var messageElement = $('<div class="row message-bubble"><img class="chat-icon" src="' + userIcon + '"><p class="message-text">' + message + '</p></div>');chatWindow.append(messageElement);chatInput.val('');chatWindow.animate({ scrollTop: chatWindow.prop('scrollHeight') }, 500);
}// 添加回复消息到窗口
function addBotMessage(message) {var messageElement = $('<div class="row message-bubble"><img class="chat-icon" src="' + botIcon + '"><p class="message-text">' + message + '</p></div>');chatWindow.append(messageElement);chatInput.val('');chatWindow.animate({ scrollTop: chatWindow.prop('scrollHeight') }, 500);
}

这里消息添加带页面后,清空了输入框的内容,接下来还需要给输入框添加加一个键盘事件,也就是点击enter键也可以发送消息!

// 处理 Enter 键按下
chatInput.keypress(function(e) {if (e.which == 13) {chatBtn.click();}
});

最后就是发送消息与获得消息的一部分了:

// 处理用户输入
chatBtn.click(function() {var message = chatInput.val();if (message.length == 0){common_ops.alert("请输入内容!")  // 弹窗  return  }addUserMessage(message);chatBtn.attr('disabled',true) // 消息发送后让提交按钮不可点击// 发送信息到后台$.ajax({url: '/chat',method: 'POST',data: {"prompt": JSON.stringify(message)},success: function(res) {res = JSON.parse(res);addBotMessage(res.content);chatBtn.attr('disabled',false)  // 成功接受消息后让提交按钮再次可以点击},error: function(jqXHR, textStatus, errorThrown) {addBotMessage('<span style="color:red;">' + '出错啦!请稍后再试!' + '</span>');chatBtn.attr('disabled',false) }});
});

这些逻辑都很简单,我不再总结,需要注意的是,我在发送消息到后台等待相应的过程让按钮的状态是不可点击的,直到后台返回消息才可以进行下一次问答!但这里我没有处理键盘事件,也就是说你可以点击enter继续向后台发送消息,这也是一个bug,只不过我没有处理,你们不需要的可以去掉这个键盘事件就好了,当然也可以在发送消息到获得回答的这个时间段像禁用发送按钮一样,禁止enter键盘事件或者解绑这个键盘事件,这个你们自己去完成,这里我不在多说(总要留点东西让你们自己去思考去感悟!)

完整代码

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><link href="../../static/css/bootstrap.min.css" rel="stylesheet"><title>chat</title><style>.answer{width: 100%;position: relative;height: 70vh;}.ipt{display:flex;align-items: center;position: absolute;bottom: 60px;margin: 0 15px;padding-right: 15px;border-radius: 15px;width: calc(100% - 30px);height: 50px;border: 1px solid #e7eaec;}.ipt textarea {resize: none;overflow-y: auto;border: none;box-shadow: none;}.ipt textarea:focus{border: none !important;box-shadow: none !important;}#chatWindow {max-height: calc(70vh - 120px);height:auto;overflow-y: auto;}.message-bubble {padding: 10px;margin: 5px;display: flex;align-items: flex-start;border-bottom: 1px dashed #e7eaec;}.message-bubble p {font-size: 18px;margin-left:15px;}.chat-icon {width: 30px;height: 30px;border-radius: 3px;}</style>
</head>
<body><div><div class="row"><div class="col-xs-12"><div><h1 class="text-center m-b-lg">Chat with ChatGPT</h1></div><div class="answer"><div id="chatWindow" class="mb-3"></div><div class="input-group ipt"><div class="col-xs-12"><textarea id="chatInput" class="form-control" rows="1"></textarea></div><button id="chatBtn" class="btn btn-primary" type="button">Go !</button></div></div></div></div></div></div> 
</body>
<script src="../../static/plugins/jquery-2.1.1.js"></script>
<script src="../../static/js/bootstrap.min.js"></script>
<script src="../../static/plugins/layer/layer.js"></script>
<script src="../../static/js/common.js"></script>
<script>$(document).ready(function() {var chatBtn = $('#chatBtn');var chatInput = $('#chatInput');var chatWindow = $('#chatWindow');var userIcon = '/static/images/user/{{ current_user.avatar }}'var botIcon = '/static/images/aichat/chatgpt.png';// 添加用户消息到窗口function addUserMessage(message) {var messageElement = $('<div class="row message-bubble"><img class="chat-icon" src="' + userIcon + '"><p class="message-text">' + message + '</p></div>');chatWindow.append(messageElement);chatInput.val('');chatWindow.animate({ scrollTop: chatWindow.prop('scrollHeight') }, 500);}// 添加回复消息到窗口function addBotMessage(message) {var messageElement = $('<div class="row message-bubble"><img class="chat-icon" src="' + botIcon + '"><p class="message-text">' + message + '</p></div>');chatWindow.append(messageElement);chatInput.val('');chatWindow.animate({ scrollTop: chatWindow.prop('scrollHeight') }, 500);}// 处理用户输入chatBtn.click(function() {var message = chatInput.val();if (message.length == 0){common_ops.alert("请输入内容!")    return  }addUserMessage(message);// messages.push({"role": "user", "content": message})chatBtn.attr('disabled',true) // 消息发送后让提交按钮不可点击// 发送信息到后台$.ajax({url: '/chat',method: 'POST',data: {"prompt": JSON.stringify(message)},success: function(res) {res = JSON.parse(res);addBotMessage(res.content);chatBtn.attr('disabled',false)  // 成功接受消息后让提交按钮再次可以点击},error: function(jqXHR, textStatus, errorThrown) {addBotMessage('<span style="color:red;">' + '出错啦!请稍后再试!' + '</span>');chatBtn.attr('disabled',false) }});});// 处理 Enter 键按下chatInput.keypress(function(e) {if (e.which == 13) {chatBtn.click();}});});
</script>
</html>

这里面用到的layer.js就是一个弹窗组件,百度可以搜到,common.js是我自己对layer.js方法的封装,这个页面其实你不这两个js文件也行,因为整个页面只有下面的代码用到了弹窗:

if (message.length == 0){common_ops.alert("请输入内容!")    return  
}

其实简陋点,一个alert就搞定了!

结语

如果你觉得博主写的还不错的话,可以订阅下面的这个flask专栏,这是博主唯一的付费专栏,我做的这个页面也是最近项目的一部分,这个项目也是用flask做的,我会将他全部总结开源到这个flask专栏中。

【flask从入门到实战】专栏9.9火热订阅中,已包含两个项目,全站独一无二的脚手架搭建,直接复制简单无脑操作,项目结构类似Django,感兴趣的可以看看哦!

🏰系列专栏
👉flask框架快速入门

其他专栏请前往博主主页查看!

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

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

相关文章

张俊林:ChatGPT 会成为下一代搜索引擎吗

文|张俊林知乎 这是「进击的Coder」的第 774 篇技术分享 作者&#xff1a;张俊林 来源&#xff1a;知乎 “ 阅读本文大概需要 9 分钟。 ” 本文将从以下几个方面展开&#xff1a; 引言ChatGPT 的技术原理ChatGPT 能否取代 Google、百度等传统搜索引擎 引言 作为智能对话系统&a…

ChatGPT终于被缝进了搜索引擎…

文&#xff5c;Alex Pine 发自 凹非寺源&#xff5c;量子位 见惯了列表式搜索引擎&#xff0c;你有没有想过给它换种画风&#xff1f; 有人脑洞大开&#xff0c;把艳惊四座的ChatGPT和必应搜索结合起来&#xff0c;搞出了一个智能搜索引擎&#xff1a; 既有ChatGPT式的问答&…

提升搜索效率-----使用chatGPT插件让搜索结果直接展示在谷歌界面右侧

今天分享一个chatGPT的进阶玩法&#xff0c;使用谷歌浏览器插件的形式&#xff0c;将chatGPT植入到浏览器的搜索结果内。 而chatGPT会将你的搜索问题的结果&#xff0c;同步展示在谷歌搜索界面的右侧。 但还是要注意科学上网&#xff01;&#xff01;但毕竟谷歌也需要科学才能挤…

重磅!微软推出首款 ChatGPT 版搜索引擎!

微软近期推出了首款 ChatGPT 版搜索引擎&#xff0c;今天带大家一起来看一下。 一夜之间&#xff0c;全球最大的科技公司仿佛都回到了自己年轻时的样子。 在谷歌宣布「实验性对话式人工智能服务」Bard 之后仅 24 小时&#xff0c;北京时间 2 月 8 日凌晨两点&#xff0c;微软发…

将ChatGPT集成到搜索引擎上(稳定版)

前言&#xff1a; ChatGPT已经火了有一段时间了&#xff0c;针对它的各种工具也层出不穷&#xff0c;笔者今天推荐的是一款google插件ChatGPT for Google,它是一款将ChatGPT集成到Google浏览器的插件&#xff0c;支持大多数搜索引擎&#xff0c;可能有些人已经使用过&#xff0…

Gmail 之父:有了 ChatGPT,搜索引擎活不过两年了

【导读】Gmail创始人表示&#xff1a;再有两年时间&#xff0c;ChatGPT将彻底摧毁谷歌赖以生存的搜索引擎&#xff0c;就像当年搜索引擎彻底干掉黄页电话簿一样。 从ChatGPT横空出世的那天起&#xff0c;微软应该感到庆幸。 除了庆幸自己几年前的10亿美元没白投之外。更重要的…

神奇智能搜索引擎:perplexity智能搜索引擎(ChatGPT与Edge合体——联网版chatGPT)

目录 前言一、Perplexity AI网站介绍二、优点介绍2-0、界面介绍2-1、纯净、时效性、来源说明2-2、基于AI对话形式的搜索引擎 三、使用方法介绍总结 前言 ChatGPT背后的语言大模型OpenAI GPT 3.5&#xff0c;和微软的必应检索系统整合在一起&#xff1b;同时吸取这二者的长处&am…

ChatGPT热炒之前 搜索引擎SEO算法已经悄然改变

2022年4月起&#xff0c;某度算法有了新的调整&#xff0c;这对于靠SEO获得流量的公司简直可以说是灭顶之灾。原本SEO从业者还指望跟之前一样&#xff0c;等算法调整稳定后&#xff0c;网站的自然排名还会再回来&#xff0c;但等到了10月份&#xff0c;仍然没有回暖的迹象&…

谷歌急了,搜索引擎被ChatGPT颠覆的可能性

社区成员正在热议&#x1f447; The Generalist最近发了一篇文章&#xff1a;主要讲了关于谷歌、ChatGPT和搜索的未来。其中探讨了几个问题&#xff1a;自去年年底ChatGPT推出以来&#xff0c;OpenAI产品一直被誉为是&#xff1a;搜索的未来&#xff0c;也是潜在的谷歌杀手。那…

ChatGPT取代搜索引擎?谷歌急了,百度不慌:早已布局

梦晨 衡宇 发自 凹非寺量子位 | 公众号 QbitAI 生成式AI要取代搜索引擎的声音&#xff0c;出现在ChatGPT发布的第一天。 后来越传越邪乎&#xff0c;有人设想以后大家找资料都不说google一下了&#xff0c;而是geept一下。 还有人说&#xff0c;搜索引擎给的一页10个蓝蓝的链接…

ChatGPT与搜索引擎合体,谷歌都不香了,LeCun转发|在线可玩

Alex Pine 发自 凹非寺量子位 | 公众号 QbitAI 见惯了列表式搜索引擎&#xff0c;你有没有想过给它换种画风&#xff1f; 有人脑洞大开&#xff0c;把艳惊四座的ChatGPT和必应搜索结合起来&#xff0c;搞出了一个智能搜索引擎&#xff1a; 既有ChatGPT式的问答&#xff0c;又像…

Bing+ChatGPT 对传统搜索引擎的降维打击

早些时候申请了新版 Bing 的内测资格&#xff0c;终于收到了通过的邮件。 一天的体验之后&#xff0c;我的感受是&#xff1a;当新版 Bing 具备了 ChatGPT 的聊天能力之后&#xff0c;它的能力不论是对传统搜索引擎&#xff0c;还是 ChatGPT 自身&#xff0c;都将是降维打击。 …

【ChatGPT进阶】2.如何使用ChatGPT替代搜索引擎?

在知乎上面有个很热门的话题&#xff1a;如何评价 ChatGPT &#xff1f;会取代搜索引擎吗&#xff1f; 这个话题下面大多数的回答都是认为ChatGPT是无法代替搜索引擎的。 但是&#xff0c;笔者我认为ChatGPT是可以代替的&#xff0c;只是很多人没有掌握使用技巧&#xff0c;导…

chatGPT与传统搜索引擎的比较

AI时代已来&#xff0c;越来越多的公司将AI技术引入到公司业务中&#xff0c;帮助公司提高生产效率和决策的正确性。而目前最火的chatGPT与传统搜索引擎有什么区别呢&#xff1f;今天和大家分享这方面的知识。与传统搜索引擎相比&#xff0c;ChatGPT在搜索过程中有一些本质的变…

ChatGPT 这玩意好吓人,真能颠覆搜索引擎?

大家好&#xff0c;我是校长。 前一段风靡世界的是 AI 绘画&#xff0c;不过&#xff0c;这两天又有一个 AI 聊天机器人风靡世界了&#xff0c;热度简直比 AI 绘画有过之而无不及。 这个东西就是 ChatGPT &#xff0c;IT 互联网圈的人都在疯狂的体验它&#xff0c;而且都在感慨…

ChatGPT情商很高,但并不适合当搜索引擎

微软和谷歌正急于使用大型语言模型技术来强化搜索引擎。但有充分的理由认为&#xff0c;相比于提供事实性信息&#xff0c;这项技术更适合作为人们情感上的伴侣。 美媒评论称&#xff0c;目前基于大型语言模型的人工智能工具&#xff0c;例如ChatGPT&#xff0c;更擅长共情而不…

ChatGPT 等大语言模型取代不了搜索引擎!

【CSDN 编者按】自 ChatGPT 火爆以来&#xff0c;有关其取代搜索引擎的讨论不绝于耳&#xff0c;微软更是直接 ChatGPT 融入到 Bing 以对抗 Google。近日&#xff0c;来自华盛顿大学的两位教授给出了他们的回答&#xff1a;“ChatGPT 和 LaMDA 之类的大型语言模型并不适合作为访…

ChatGPT 支持的搜索引擎 Bing 究竟什么样?

微软于2月8日北京时间凌晨在 Redmond 线下举办一场媒体活动&#xff0c;围绕微软的产品以及 AI&#xff0c;公布最新消息。这里我们先回顾一下微软在 AI 上的布局。 2019年&#xff0c;微软向 OpenAI 投资10亿美元&#xff0c;成为了 OpenAI 紧密的合作伙伴&#xff0c;而微软…

ChatGPT是如何回答问题的?它与搜索引擎的区别在哪里?

在阅读本篇文章&#xff0c;我推荐大家先观看下面链接的视频&#xff0c;而本文章的内容基本上视频都有提及&#xff0c;只不过在此做一下进一步的知识整理和总结&#xff0c;方便大家对相关知识的回顾。同时也建议大家关注一下视频Up&#xff0c;他的视频极具深度&#xff0c;…

ChatGPT能否取代Google、Baidu,成为下一代搜索引擎?一文了解最近火出圈的ChatGPT

前 言 OpenAI这家公司又放大招了&#xff0c;继发布GPT、GPT2和GPT3模型后&#xff0c;本月初发布了ChatGPT模型【也被称为GPT3.5】&#xff0c;结合大家的测试效果来看&#xff0c;该模型效果确实很震撼&#xff0c;在人工智能圈子引起了不小的轰动。在AI发展相对处于低谷期的…