2023年的深度学习入门指南(3) - 前端同学如何进行chatgpt开发

2023年的深度学习入门指南(3) - 前端同学如何进行chatgpt开发

在第二篇,我们使用openai的python库封装,搞得它有点像之前学习的PyTorch一样的库。这一节我们专门给它正下名,前端就是字面意义上的前端。

给gpt4写前端

下面我们写一个最土的使用gpt4 API的页面,就一个输入框加一个回显的区域。

我们先写HTML页面:

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>gpt4聊天机器人</title><link rel="stylesheet" href="styles.css"><link rel="stylesheet"href="default.min.css"><script src="highlight.min.js"></script>
</head>
<body>
<div class="container"><h1>gpt4聊天机器人</h1><form id="inputForm"><label for="userInput">请输入聊天内容:</label><input type="text" id="userInput" name="userInput"><button type="submit">提交</button></form><div id="response"><h2>来自gpt4的回复:</h2><div id="responseText"></div></div>
</div>
<script src="script.js"></script>
</body>
</html>

我对代码的显示格式比较看重,所以增加了highlight.js来高亮代码,可以到https://highlightjs.org/download/ 这里去下载最新版本放到本地。
其它的就是一个form加上一个div。

然后是javascript,首先是响应submit事件的处理:

document.getElementById("inputForm").addEventListener("submit", async (event) => {event.preventDefault();const userInput = document.getElementById("userInput").value;if (userInput) {const responseText = document.getElementById("responseText");responseText.innerHTML = "gpt4正在思考中...";const apiResponse = await callOpenAI(userInput);}
});

接着是调用OpenAI API的部分了,因为我们没有后端,所以key暂时先明文写到网页里。

async function callOpenAI(userInput) {const apiKey = "你的openai api key";const apiURL = "https://api.openai.com/v1/chat/completions";const requestOptions = {method: "POST",headers: {"Content-Type": "application/json","Authorization": `Bearer ${apiKey}`},body: JSON.stringify({model: "gpt-4",messages: [{role: "system", content: "You are a skilled software engineer."},{role: "user", content: userInput}],max_tokens: 4096,n: 1,stop: null,temperature: 1})};try {const response = await fetch(apiURL, requestOptions);const data = await response.json();const responseTextElement = document.getElementById("responseText");responseTextElement.innerHTML = parseAndHighlightCode(data.choices[0].message.content);// Apply highlight to all <code> elementsconst codeBlocks = responseTextElement.getElementsByTagName("code");for (const codeBlock of codeBlocks) {hljs.highlightBlock(codeBlock);}} catch (error) {console.error("Error:", error);responseText.innerHTML = "An error occurred while fetching the response.";}
}

大家注意这部分参数:

            model: "gpt-4",messages: [{role: "system", content: "You are a skilled software engineer."},{role: "user", content: userInput}],

模型根据需要来选择,一般选择chatgpt,也就是’gpt-3.5-turbo’.
另外还有角色的部分,根据场景的不同,可以给system角色以更多的提示。

最后是解析代码并高亮的部分:

function parseAndHighlightCode(text) {text = String(text); // Ensure 'text' is a stringconst regex = /```(\w+)?\s*([\s\S]*?)```/g;return text.replace(regex, (match, language, code) => {const langClass = language ? ` class="${language}"` : '';return `<pre><code${langClass}>${code.trim()}</code></pre>`;});
}

该函数的作用是在输入的文本中搜索用三个反引号包裹的代码块,并将其包裹在 HTML 的 <pre><code> 标签中,如果代码块开头的反引号中指定了编程语言,还会在 <code> 标签中添加一个 class 属性。

这个函数首先将 text 参数转换为字符串类型,确保它是一个字符串。然后,它使用 RegExp 构造函数创建一个正则表达式对象,这个正则表达式对象可以匹配以三个反引号开始和结束的代码块,并且可以在反引号内指定编程语言。

样式都是chatgpt给生成的,我只是改了下支持换行显示:

body {font-family: Arial, sans-serif;background-color: #f0f0f0;margin: 0;padding: 0;
}.container {max-width: 800px;margin: 0 auto;padding: 2rem;background-color: #ffffff;box-shadow: 0px 0px 10px rgba(0, 0, 0, 0.1);
}form {display: flex;flex-direction: column;
}input {margin-bottom: 1rem;padding: 0.5rem;font-size: 1rem;
}button {background-color: #0077cc;color: #ffffff;padding: 0.5rem;font-size: 1rem;border: none;cursor: pointer;margin-bottom: 2rem;
}button:hover {background-color: #0055a5;
}
#responseText {white-space: pre-wrap;
}

修改输入框高度

只支持一行看起来不太好,那干脆我们多支持几行:

<div class="container"><h1>gpt4聊天机器人</h1><form id="inputForm"><label for="userInput">请输入聊天内容:</label><!--input type="text" id="userInput" name="userInput"--><textarea id="userInput" rows="10" cols="50" placeholder="请输入内容"></textarea><button type="submit">提交</button></form><div id="response"><h2>来自gpt4的回复:</h2><div id="responseText"></div></div>
</div>

这样输入大段文本的时候能更舒服一点。

我们还可以将其改成文本区域自动适应的。

我们可以给textarea增加一个oninput事件处理函数:

<textarea id="userInput" rows="1" cols="80" placeholder="请输入内容" oninput="autoResize(this)"></textarea>

实现起来也很简单,将高度改成auto:

function autoResize(textarea) {textarea.style.height = 'auto'; // Reset the height to 'auto'textarea.style.height = textarea.scrollHeight + 'px'; // Set the new height based on scrollHeight
}

为了能够让页面加载时也根据内容调整,我们给DOMContentLoaded事件上注册一个函数:

document.addEventListener('DOMContentLoaded', () => {const userInput = document.getElementById('userInput');autoResize(userInput);
});

让chatgpt成为有身份的人

我们知道,在chatgpt的使用中,告诉chatgpt具体的情境会大大提升准确率。
于是我们给角色增加一个输入框吧:

<div class="container"><h1>gpt4聊天机器人</h1><form id="inputForm"><label for="userInput">请输入聊天内容:</label><!--input type="text" id="userInput" name="userInput"--><textarea id="userInput" rows="1" cols="80" placeholder="请输入内容" oninput="autoResize(this)"></textarea><button type="submit">提交</button></form><div id="system-input"><h2>你希望gpt4扮演一个什么样的角色</h2><input id="systemInput" type="text" placeholder="你是一个友好的聊天机器人"/></div><div id="response"><h2>来自gpt4的回复:</h2><div id="responseText"></div></div>
</div>

然后将用户输入发给openai:

    const systemInput = document.getElementById("systemInput").value;const requestOptions = {method: "POST",headers: {"Content-Type": "application/json","Authorization": `Bearer ${apiKey}`},body: JSON.stringify({model: "gpt-4",messages: [{role: "system", content: systemInput},{role: "user", content: userInput}],max_tokens: 4096,n: 1,stop: null,temperature: 1})};

样式有点难看啊,我们写个样式吧:

#system-input {display: flex;flex-direction: column;align-items: center;margin-bottom: 20px;
}#system-input h2 {margin-bottom: 10px;
}#systemInput {font-size: 16px;padding: 8px 12px;width: 100%;max-width: 500px;border: 1px solid #ccc;border-radius: 4px;box-sizing: border-box;outline: none;transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;
}#systemInput:focus {border-color: #66afe9;box-shadow: 0 0 4px rgba(102, 175, 233, 0.6);
}

chatgpt回复部分也稍微调下样式:

#response {display: flex;flex-direction: column;align-items: center;margin-bottom: 20px;
}#response h2 {margin-bottom: 10px;
}#responseText {font-size: 16px;padding: 15px;width: 100%;max-width: 600px;border: 1px solid #ccc;border-radius: 4px;background-color: #f8f9fa;box-sizing: border-box;white-space: pre-wrap; /* Ensures line breaks are maintained */word-wrap: break-word; /* Allows long words to wrap onto the next line */
}

总之调整下样式吧。

样子写下来大致是:

body {font-family: 'Noto Sans SC', sans-serif;font-size: 16px;line-height: 1.6;color: #333;
}.container {max-width: 800px;margin: 0 auto;padding: 2rem;background-color: #ffffff;box-shadow: 0px 0px 10px rgba(0, 0, 0, 0.1);
}h1 {font-size: 2.5em;font-weight: bold;text-align: center;margin: 20px 0;color: #333;
}h2 {margin-bottom: 10px;font-weight: bold;text-align: center;
}form {display: flex;flex-direction: column;align-items: center;margin-bottom: 20px;}label {display: inline-block;font-size: 1.2em;font-weight: bold;color: #333;margin-bottom: 10px;
}#userInput {font-size: 16px;padding: 8px 12px;width: 100%;max-width: 500px;border: 1px solid #ccc;border-radius: 4px;box-sizing: border-box;outline: none;transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;margin-bottom: 20px;
}#userInput:focus {border-color: #66afe9;box-shadow: 0 0 4px rgba(102, 175, 233, 0.6);
}button {font-size: 1em;font-weight: bold;color: #fff;background-color: #007bff;border: none;border-radius: 4px;padding: 7px 20px;cursor: pointer;transition: background-color 0.2s ease-in-out;margin-bottom: 20px;
}button:hover {background-color: #0056b3;
}#response {display: flex;flex-direction: column;align-items: center;margin-bottom: 20px;
}#responseText {font-size: 16px;padding: 15px;width: 100%;max-width: 600px;border: 1px solid #ccc;border-radius: 4px;background-color: #f8f9fa;box-sizing: border-box;white-space: pre-wrap; /* Ensures line breaks are maintained */word-wrap: break-word; /* Allows long words to wrap onto the next line */
}#systemInput {font-size: 16px;padding: 8px 12px;width: 100%;max-width: 500px;border: 1px solid #ccc;border-radius: 4px;box-sizing: border-box;outline: none;transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;margin-bottom: 20px;
}#systemInput:focus {border-color: #66afe9;box-shadow: 0 0 4px rgba(102, 175, 233, 0.6);
}

增加模型选择功能

我们再增加一个选择使用gpt4还是chatgpt的功能吧,先加元素:

<div class="container"><h1>gpt4聊天机器人</h1><form id="inputForm"><label for="userInput">请输入聊天内容</label><textarea id="userInput" rows="1" cols="80" placeholder="请输入内容" oninput="autoResize(this)"></textarea><label for="systemInput">你希望gpt4扮演一个什么样的角色</label><input id="systemInput" type="text" placeholder="你是一个友好的聊天机器人"/><div id="model-selection"><label for="modelSelect">选择模型类型</label><select id="modelSelect"><option value="gpt-4">GPT-4</option><option value="gpt-3.5-turbo">GPT-3.5 Turbo</option></select></div><button type="submit">提交</button></form><div id="response"><h2>来自gpt4的回复:</h2><div id="responseText"></div></div>
</div>

再加代码:

    const systemInput = document.getElementById("systemInput").value;const model = document.getElementById("modelSelect").value;const requestOptions = {method: "POST",headers: {"Content-Type": "application/json","Authorization": `Bearer ${apiKey}`},body: JSON.stringify({model: model,messages: [{role: "system", content: systemInput},{role: "user", content: userInput}],max_tokens: 4096,n: 1,stop: null,temperature: 1})};

最后加上样式:

#model-selection {display: flex;flex-direction: column;align-items: center;margin-bottom: 20px;
}#modelSelect {font-size: 1em;padding: 8px;border: 1px solid #ccc;border-radius: 4px;outline: none;cursor: pointer;
}

看看效果:
在这里插入图片描述

小结

从上面一步一步的例子,我们可以看到,前端对于用户更好地使用大模型有着不可替代的重要作用。
上面的功能我们还可以不断增加下去,比如我们可以增加例子,保存记录,反馈错误等等。

虽然没有写一行python代码,也没有微调模型(当然是可以做的),但是这里面是有对于AI的深刻理解的。

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

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

相关文章

利用ChatGPT优化代码

众所周知&#xff0c;ChatGPT是一个基于大规模预训练语言模型的对话系统&#xff0c;由OpenAI开发。它可以帮助我们查找资料&#xff0c;进行内容创作&#xff0c;翻译语言等。那么&#xff0c;对于程序猿来说&#xff0c;可以利用ChatGPT干些什么呢&#xff1f;下面给大家看下…

ChatGpt前端代码实现《点击变色功能》

效果-点击按钮变色 效果-增加过渡效果 完整代码如下 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport…

我用尽了洪荒之力,解开了ChatGPT 写前端代码的封印,结果...

我用尽了洪荒之力&#xff0c;解开了ChatGPT 写前端代码的封印 介绍 ChapGPT 听起来好得令人难以置信&#xff0c;所以让我们让它为我们编写一些 JS 代码。我想看看它是否可以解决我作为前端开发人员每天所做的任务。 是驴子是马拉出来溜溜&#xff0c;我们还是直接进入主题一探…

从0开始搭建前端项目:使用ChatGPT实现高自动化完成率,提高开发效率并掌握最新前端技术

目录 简介ChatGPT简介使用ChatGPT确定项目开发流程提问前端框架包含哪些技术&#xff1f;提问当前最流行的前端框架提问开发流程关于整个视频展示 简介 大家好&#xff0c;我是老李&#xff0c;我很高兴向您介绍我即将发布的一系列关于前端项目开发的文章。在这个系列中&#…

chatgpt赋能python:如何利用Python赚钱

如何利用Python赚钱 Python是一种高级编程语言&#xff0c;因其易学、易用和灵活性而备受程序员和企业的欢迎。在当今数字化时代&#xff0c;Python已经成为广告和营销领域中最热门的编程语言之一&#xff0c;因为它可以被用于制定和执行各种营销策略。本文将介绍如何利用Pyth…

如何利用ChatGPT提升10倍Python效率

作为初学者&#xff0c;我们总是有一些不好意思问的问题。 现在我们可以尽情社恐&#xff0c;我们甚至可以向 ChatGPT 提出最低级的代码问题。 假设我们忘记了如何将两个字典合并。以下是 ChatGPT 可以如何帮助你的部分。 ChatGPT 还可以协助你进行更好的在线学习。假设你正在…

提高副业收入,学习利用ChatGPT工具的重要性

今天聊聊网上怎样做副业&#xff0c;才能让每天收入越来越多&#xff0c;不管你承不承认&#xff0c;从2022年到现在的2023年&#xff0c;人人都感觉没钱了&#xff0c;赚钱越来越难啦&#xff01; 有时好几个月&#xff0c;甚至半年到一年都找不到合适的工作&#xff0c;在这…

ChatGPT的prompt技巧公式

范例演示&#xff1a;如何用ChatGPT绘制一个五角星&#xff1f;⭐️ prompt 角色 任务 要求 提示【步骤拆解、范例说明&#xff0c;技巧点拨等】 用大白话解释就是要告诉chatgpt&#xff1a;你是谁&#xff1f;要做什么&#xff1f;要做成什么样&#xff1f;要怎么做&#…

chatGPT怎么用?提问技巧指南

大家好&#xff0c;我是权知星球&#xff0c;今天跟大家来讨论一下chatGPT怎样用的问题&#xff0c;给大家提供一些提问指南。 自从ChatGPT问世以来&#xff0c;越来越多人对这个工具着迷。现在&#xff0c;很多时候我都会把ChatGPT当做我的工作小助手。然而&#xff0c;尽管C…

使用 ChatGPT 的 7 个技巧 | Prompt Engineering 学习笔记

概述 前段时间在 DeepLearning 学了一门大火的 Prompt 的课程&#xff0c;吴恩达本人授课&#xff0c;讲的通俗易懂&#xff0c;感觉受益匪浅&#xff0c;因此在这里总结分享一下我的学习笔记。 为什么要学习 Prompt &#xff1f; 因为在未来的 AIGC 年代&#xff0c;学习有效…

留学生ChatGPT使用技巧:如何用作参考才不算抄袭?

掌握ChatGPT使用技巧对于留学生至关重要&#xff0c;为免触犯学术规条而影响求学生涯&#xff0c;留学生们在使用ChatGPT时都必须格外谨慎。ChatGPT的诞生和爆火&#xff0c;确实大大提高了人们的工作效率&#xff0c;然而对于教育系统来说&#xff0c;却是一场灾难。近期&…

官方网《yucea。cc》ChatGPT加拿大背后的南宫小秘密28圈

最近,如果要问科技圈发生了哪些大事,火爆全网的ChatGPT一定是当之无愧的“明日之星”。 ChatGPT是一款人工智能聊天机器人,自2022年11月下旬上线以来,迅速在社交媒体上走红,仅5天时间,注册用户就突破100万。在不到两个月的时间里,其注册用户已突破一亿。其用户增长速度可…

如何利用ChatGPT革新智能合约和区块链

一、开篇 最近几年&#xff0c;人工智能&#xff08;AI&#xff09;的进步革新了各个行业。ChatGPT是由OpenAI开发的大型语言模型&#xff0c;属于新型的人工智能创新&#xff0c;因此它有潜力改变我们对智能合约和区块链技术的看法。 智能合约可以利用区块链技术自动执行合约…

如何利用AI学习区块链知识,ChatGPT x Kapa.ai ⇒ 开发者的福音

由OpenAI推出的人工智能聊天机器人ChatGPT在各大平台掀起了一阵狂热之风。发布仅四个月的时间&#xff0c;获得超一亿用户&#xff0c;成长速度远高于现今网络应用巨头脸书和Amazon。随着最新版本GPT-4的正式上线&#xff0c;其AI性能和完善程度再度提升&#xff0c;深受用户和…

ChatGPT和IEN在区块链和元宇宙中的应用

ChatGPT是一种强大的自然语言生成技术&#xff0c;它在区块链和元宇宙中都有广泛的应用。以下是ChatGPT在区块链和元宇宙中的应用场景和实例&#xff1a; 1、区块链应用场景中的ChatGPT 智能合约&#xff1a;ChatGPT可以用来生成智能合约的自然语言文本&#xff0c;使得用户能…

ChatGPT-4问世,区块链开发人员要被替代?

来源/cointelegraph 编译/Nick 3月14日&#xff0c;OpenAI宣布推出大型的多模态模型GPT-4&#xff0c;可以接收图像和文本输入&#xff0c;输出文本&#xff0c;“比以往任何时候都更具创造性和协作性”&#xff0c;并且“由于它有更广泛的常识和解决问题的能力&#xff0c;可以…

简化流程,区块链开发者使用ChatGPT的几种姿势!

简化流程&#xff0c;区块链开发者使用ChatGPT的几种姿势&#xff01; 本文转载自XuperCore开源社区用户thinkingdraw&#xff0c;原文链接https://xupercore.csdn.net/63e4e7df2bcaa918ade995b9.html ChatGPT到底有多火&#xff1f;根据瑞银的研究报告&#xff0c;从推出到活跃…

[Nonebot2]chatgpt

前言 今天我要教大家的是 如何实现nonebot之Gpt接入 准备 1.获取开发者key 获取key的地址&#xff1a;这里你们自行了解&#xff0c;有些原因不能展示 如图所示&#xff0c;我已经创建好一个key了&#xff0c;大家也可以点击Create new secret key按钮来创建一个新的key&am…

冰橙GPT chatGPT开放接口使用说明

冰橙GPT稳定提供API接口服务 定时有人进行问题排查处理 1小时内问题响应 接入了腾讯云的内容安全检测 有任何疑问请加入QQ交流群&#xff1a;310872519 1.请求地址&#xff1a;https://gpt.bcwhkj.cn/api/v2.Gptliu/search 2.请求方式: POST 3.bo…

QQ接入

转载请标明:转载自【小枫栏目】,博文链接:http://blog.csdn.net/rexuefengye/article/details/9833851 简介 本文档主要介绍接入QQ平台的一些内容&#xff0c;便于查阅和使用。 第一步&#xff1a;搭建QQSDK 1.下载对应的 SDK&#xff0c; 将sdk这个目录添加到工程中&#xff…