【大模型应用】小白借助chatgpt开发谷歌插件

大模型正缓慢地渗透进入我们的生活,尽管目前还没有现象级的产品应用,但它已足以让我痴迷于它,我对它能够提升程序员的生产效率笃定无疑。

本次我用一个下午做了一次尝试,使用大模型帮助我开发一个谷歌插件。开发之前,我对谷歌插件的认识仅限于知道如何安装和删除插件。

我想开发一个谷歌插件,功能如下:
1. 通过快捷键FY触发弹窗
2. 弹窗中有两个tab,一个是翻译,一个是函数命名
3. 翻译tab的功能是我输入英文自动转换为中午呢、我输入中文则自动转换为英文
4. 函数命名tab则可以根据我输入的描述,自动生成5个对应的代码命名以上功能我需要借助大模型实现,帮我调用openAI的接口。请首先提供完整的思路给我

当输入上述文案时,chatgpt会回复完整的思路,参考思路后可让其提供代码

请根据上述的思路,给我完整的代码,并给我注释

大模型给我的回复是

首先,我们需要在manifest.json文件中定义插件的基本信息和权限:
{"manifest_version": 3,"name": "My Extension","version": "1.0","permissions": ["storage"],"host_permissions": ["<all_urls>"],"action": {"default_popup": "popup.html","default_icon": {"16": "images/icon16.png","48": "images/icon48.png","128": "images/icon128.png"}},"background": {"service_worker": "background.js"},"commands": {"_execute_action": {"suggested_key": {"default": "Ctrl+Shift+Y","mac": "MacCtrl+Shift+Y"},"description": "Opens popup"}}
}然后,我们需要在background.js文件中监听快捷键事件:
chrome.commands.onCommand.addListener(function(command) {if (command === "_execute_browser_action") {chrome.browserAction.openPopup();}
});接下来,我们需要在popup.html文件中定义弹窗的界面:
<!DOCTYPE html>
<html>
<head><link rel="stylesheet" type="text/css" href="popup.css">
</head>
<body><div id="tab" class="tab"><button class="tablinks" onclick="openTab(event, 'Translate')">Translate</button><button class="tablinks" onclick="openTab(event, 'FunctionName')">Function Name</button></div><div id="Translate" class="tabcontent"><textarea id="inputTranslate" placeholder="Enter text..."></textarea><button id="btnTranslate">Translate</button><p id="outputTranslate"></p></div><div id="FunctionName" class="tabcontent"><textarea id="inputFunctionName" placeholder="Enter description..."></textarea><button id="btnFunctionName">Generate Function Name</button><p id="outputFunctionName"></p></div><script src="popup.js"></script>
</body>
</html>在popup.css文件中定义弹窗的样式:
/* Style the tab */
.tab {overflow: hidden;border: 1px solid #ccc;background-color: #f1f1f1;
}/* Style the buttons inside the tab */
.tab button {background-color: inherit;float: left;border: none;outline: none;cursor: pointer;padding: 14px 16px;transition: 0.3s;
}/* Change background color of buttons on hover */
.tab button:hover {background-color: #ddd;
}/* Create an active/current tablink class */
.tab button.active {background-color: #ccc;
}/* Style the tab content */
.tabcontent {display: none;padding: 6px 12px;border: 1px solid #ccc;border-top: none;
}
最后,我们需要在popup.js文件中实现弹窗的功能:
// Open the specified tab
function openTab(evt, tabName) {// Get all elements with class="tabcontent" and hide themvar tabcontent = document.getElementsByClassName("tabcontent");for (var i = 0; i < tabcontent.length; i++) {tabcontent[i].style.display = "none";}// Get all elements with class="tablinks" and remove the class "active"var tablinks = document.getElementsByClassName("tablinks");for (i = 0; i < tablinks.length; i++) {tablinks[i].className = tablinks[i].className.replace(" active", "");}// Show the current tab, and add an "active" class to the button that opened the tabdocument.getElementById(tabName).style.display = "block";evt.currentTarget.className += " active";
}// Call the Google Translate API
function translate(text) {// TODO: Implement this function
}// Call the OpenAI API
function generateFunctionName(description) {// TODO: Implement this function
}// Add event listeners to the buttons
document.getElementById("btnTranslate").addEventListener("click", function() {var text = document.getElementById("inputTranslate").value;translate(text);
});document.getElementById("btnFunctionName").addEventListener("click", function() {var description = document.getElementById("inputFunctionName").value;generateFunctionName(description);
});

当我得到上述的回复后,我就在本地新建一个目录,并按照chatgpt给的命名创建文件、粘贴内容。
在谷歌浏览器中选择该目录插件后,触发该插件出现报错,我将报错信息发送给chatgpt:

出现报错如下:
Refused to execute inline event handler because it violates the following Content Security Policy directive: "script-src 'self'". Either the 'unsafe-inline' keyword, a hash ('sha256-...'), or a nonce ('nonce-...') is required to enable inline execution. Note that hashes do not apply to event handlers, style attributes and javascript: navigations unless the 'unsafe-hashes' keyword is present.<button class="tablinks" onclick="openTab(event, 'Translate')">Translate</button>

chatgpt立马纠正自己的错误并给出下面的回复:

你需要将新的事件监听器代码添加到popup.js文件中,并确保你的HTML元素有对应的ID。下面是整合后的popup.js文件的完整代码:
// Open the specified tab
function openTab(evt, tabName) {// Get all elements with class="tabcontent" and hide themvar tabcontent = document.getElementsByClassName("tabcontent");for (var i = 0; i < tabcontent.length; i++) {tabcontent[i].style.display = "none";}// Get all elements with class="tablinks" and remove the class "active"var tablinks = document.getElementsByClassName("tablinks");for (i = 0; i < tablinks.length; i++) {tablinks[i].className = tablinks[i].className.replace(" active", "");}// Show the current tab, and add an "active" class to the button that opened the tabdocument.getElementById(tabName).style.display = "block";evt.currentTarget.className += " active";
}// Call the Google Translate API
function translate(text) {// TODO: Implement this function
}// Call the OpenAI API
function generateFunctionName(description) {// TODO: Implement this function
}// Add event listeners to the buttons when the DOM is fully loaded
document.addEventListener('DOMContentLoaded', function () {// Event listeners for tab buttonsvar translateTab = document.getElementById('translateTab');var functionNameTab = document.getElementById('functionNameTab');if (translateTab) {translateTab.addEventListener('click', function(event) {openTab(event, 'Translate');});}if (functionNameTab) {functionNameTab.addEventListener('click', function(event) {openTab(event, 'FunctionName');});}// Event listeners for action buttonsdocument.getElementById("btnTranslate").addEventListener("click", function() {var text = document.getElementById("inputTranslate").value;translate(text);});document.getElementById("btnFunctionName").addEventListener("click", function() {var description = document.getElementById("inputFunctionName").value;generateFunctionName(description);});
});
请注意,我在添加事件监听器之前添加了if语句来检查元素是否存在,以避免在元素不存在时尝试添加事件监听器导致的错误。同时,确保你的HTML文件中的按钮元素有对应的ID,如下所示:
<button class="tablinks" id="translateTab">Translate</button>
<button class="tablinks" id="functionNameTab">Function Name</button>

因为我完全不懂前端代码,所以我只会把插件的报错告诉chatgpt,而chatgpt就会帮我解决问题。最终经过几轮的问答,我给该插件赋予了翻译功能(中译英、英译中)、生成函数名功能(调用文心大模型,调用国内的接口较快,也可改为调用openAI)。至此,我的插件第一步开发结束啦,后续继续完善。

总结

基于本插件,我感受到了chatgpt赋能的力量。对于我这样完全不懂前端代码的开发者,最终能够通过对话就把插件完成了,算是完成我一直以来的一个小愿望。相信不久的将来,我连复制粘贴代码都不需要了。感谢chatgpt,期待更强大的AI到来。

代码内容已分享出来啦。

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

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

相关文章

西米支付:到底什么是NFT(数字藏品支付通道)(NFT支付通道)

NFT到底指的是什么呢&#xff1f; 数字藏品的实际意义在于它们打破了传统艺术品的物质形态束缚。数字藏品可以通过虚拟现实和区块链技术进行创作、展示和交易。它们不仅可以满足人们对艺术品的审美需求&#xff0c;还可以成为一种投资和资产保值增值的方式。数字藏品的实际意义…

排序——归并排序

文章目录 基本思想递归版本思路代码实现 非递归版思路代码实现 特性结果演示 基本思想 归并排序&#xff08;MERGE-SORT&#xff09;是建立在归并操作上的一种有效的排序算法,该算法是采用分治法&#xff08;Divide andConquer&#xff09;的一个非常典型的应用。将已有序的子…

开发实践6_缓存^中间件

以下学习 朔宁夫 开发工程师 课程。 缓存可提高程序响应速度。数据库缓存(可过期)/ Redis缓存(Key:Value)/ Memcacheed缓存/ 程序层缓存。 一 缓存 1. 数据库缓存 创建缓存数据表 // python manage.py createcachetable cache_table setting // # 缓存配置 CACHES {def…

第十部分 make 的运行

目录 一、make 的退出码 二、指定 Makefile 三、指定目标 “all” “clean” “install” “print” “dist” “TAGS” “check”和“test” 四、检查规则 五、make 的参数 一般来说&#xff0c;最简单的就是直接在命令行下输入 make 命令&#xff0c;make 命令会…

代码随想录算法训练营第20天(二叉树6 | 654.最大二叉树 617.合并二叉树 700.二叉搜索树中的搜索 98.验证二叉搜索树

二叉树 part06 654.最大二叉树解题思路 617.合并二叉树解题思路 700.二叉搜索树中的搜索解题思路 98.验证二叉搜索树解题思路误区 654.最大二叉树 又是构造二叉树&#xff0c;昨天大家刚刚做完 中序后序确定二叉树&#xff0c;今天做这个 应该会容易一些&#xff0c; 先看视频&…

12.云原生之kubesphere中应用部署方式

云原生专栏大纲 文章目录 k8s中应用部署Kubernetes常用命令 kubesphere中可视化部署应用创建工作负载服务暴露 helm部署应用helm命令行部署应用kubesphere中使用应用仓库 k8s中应用部署 在k8s中要想部署应用&#xff0c;需要编写各种yaml文件&#xff0c;一旦应用依赖比较复杂…

不同整数的最少数目和单词直接最短距离

写是为了更好的思考&#xff0c;坚持写作&#xff0c;力争更好的思考。 今天分享两个关于“最小、最短”的算法题&#xff0c;废话少说&#xff0c;show me your code&#xff01; 一、不同整数的最少数目 给你一个整数数组arr和一个整数k。现需要从数组中恰好移除k个元素&…

蓝桥杯备赛 | 洛谷做题打卡day2

​ 蓝桥杯备赛 | 洛谷做题打卡day2 嵌套循环yyds&#xff01;&#xff01; 题目来源&#xff1a;洛谷P2670 [NOIP2015 普及组] 扫雷游戏 题目背景 NOIP2015 普及组 T2 题目描述 扫雷游戏是一款十分经典的单机小游戏。在 n n n 行 m m m 列的雷区中有一些格子含有地雷&am…

如何去开发直播电商系统小程序

明确你的直播电商系统的功能和特性&#xff0c;包括用户注册、商品展示、购物车、支付结算、直播功能、评论互动等。根据需求确定系统的基本架构和主要模块。 技术选型&#xff1a;选择适合你的直播电商系统的技术栈。考虑前端框架&#xff08;如React、Vue.js&#xff09;、后…

ardupilot开发 --- 固件定制(OEM) 篇

0. 前言 固件功能定制OEM Customization&#xff1a; 原厂设备制造商OEM&#xff08;Original Equipment Manufacturer&#xff09;、代工功能勾选参数预设固件名称自定义 1. 基于某个飞控硬件来定制自己的飞控产品 可以自定义的包括&#xff1a;固件名称、预设参数、lua脚本…

C语言:编译和链接

目录 一&#xff1a;翻译环境和运行环境 二&#xff1a;翻译环境 2.1预处理&#xff08;预编译&#xff09; 2.2编译 2.2.1 词法分析&#xff1a; 2.2.2语法分析 2.2.3语义分析 2.3 汇编 三&#xff1a;运行环境 一&#xff1a;翻译环境和运行环境 在ANSI C的任何一种…

【go语言】读取toml文件

一、简介 TOML&#xff0c;全称为Toms Obvious, Minimal Language&#xff0c;是一种易读的配置文件格式&#xff0c;旨在成为一个极简的数据序列化语言。TOML的设计原则之一是保持简洁性&#xff0c;易读性&#xff0c;同时提供足够的灵活性以满足各种应用场景。 TOML文件由…

力扣每日一练(24-1-16)

我一开始想到的是&#xff0c;如果数字相同则加一。 然而&#xff0c;对了一点点&#xff0c;而已。 高手的方法不是普通人在几分钟内能想得出来的&#xff0c;hh 继续补充&#xff1a; 如果数字不同则减一&#xff0c;如果计数到达了0&#xff0c;则更新数字&#xff0c;最…

论文复现|tightly focused circularly polarized ring Airy beam

请尊重原创的劳动成果 如需要转载&#xff0c;请后台联系 前言 采用MATLAB复现一篇论文里面的插图&#xff0c;涡旋光束的聚焦的仿真方式有很多种&#xff0c;这里采用MATLAB进行仿真&#xff0c;当然也有其他的很多方式&#xff0c;不同的方式各有千秋。 论文摘要 本文证明…

Kafka消费流程

Kafka消费流程 消息是如何被消费者消费掉的。其中最核心的有以下内容。 1、多线程安全问题 2、群组协调 3、分区再均衡 1.多线程安全问题 当多个线程访问某个类时&#xff0c;这个类始终都能表现出正确的行为&#xff0c;那么就称这个类是线程安全的。 对于线程安全&…

uni-app的学习【第三节】

五 运行环境判断与跨端兼容 uniapp为开发者提供了一系列基础组件,类似HTML里的基础标签元素,但uni-app的组件与HTML不同,而是与小程序相同,更适合手机端使用。 虽然不推荐使用 HTML 标签,但实际上如果开发者写了`div`等标签,在编译到非H5平台时也会被编译器转换为 `view`…

@RequiresApi(api = Build.VERSION_CODES.O)

问题 RequiresApi(api Build.VERSION_CODES.O) 详细问题 对于代码 // 格式化日期为MySQL的DATE类型格式private String formatDate(LocalDate date) {DateTimeFormatter formatter DateTimeFormatter.ofPattern("yyyy-MM-dd");return date.format(formatter);}o…

C# 面向切面编程之AspectCore初探

写在前面 AspectCore 是Lemon名下的一个国产Aop框架&#xff0c;提供了一个全新的轻量级和模块化的Aop解决方案。面向切面也可以叫做代码拦截&#xff0c;分为静态和动态两种模式&#xff0c;AspectCore 可以实现动态代理&#xff0c;支持程序运行时在内存中“临时”生成 AOP 动…

解决git : 无法将“git”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。请检查名称的拼写,如果包括路径,请确保路径正确

首先&#xff0c;确保你已经正确安装了git&#xff0c;并且git的安装路径已经添加到系统的环境变量中。你可以在命令行中输入“git --version”来检查git是否已经正确安装和配置。 如果git已经正确安装并且路径已经添加到系统的环境变量中&#xff0c;但仍然出现这个问题&…

深入云原生—基于KubeWharf深度剖析-以公司实际应用场景为例深度解读

各位好&#xff0c;这里是难忘&#xff0c;本人对云原生也是研究了2年多了&#xff0c;算是略有所得&#xff0c;本次就来深入云原生—基于KubeWharf深度剖析场景与解读。我们需要先了解一下 KubeWharf&#xff0c;可能很多人都感觉到有点陌生吧&#xff0c;下面我们来一起学习…