我是如何使用ChatGPT和CoPilot作为编码助手的

c230c06b4764e37e686d9c7ecadb5925.gif

这篇文章主要讨论了如何使用AI(特别是ChatGPT和Github Copilot)来提高编码速度和效率。文章中提到了AI在编写功能性代码、自动完成代码、解决问题和澄清代码等方面的应用。作者分享了他在工作中使用这些工具的一些实际案例,包括生成 CSS、编写函数、重复模式的代码、编写 ReactJS 组件等。同时,文章也指出了 AI 辅助编码的一些限制和挑战。

原文链接:https://notes.drdroid.io/how-i-use-ai-for-code-assistance

未经允许,禁止转载!

作者 | Dipesh Mittal      译者 | 明明如月

责编 | 夏萌

出品 | CSDN(ID:CSDNnews)

我已经探索过一些在编写高质量、功能性代码方面的 AI 实践应用,它们能在你编程时提供诸多便利。我一直在工作中使用 ChatGPT 网页工具和 Copilot(我们可以将 Copilot 视为 GPT 的一个变体,因为它们都基于同一核心技术构建)。

核心概括

  • GitHub Copilot:用于提升代码自动完成的速度,可以将其视作一个为初级软件工程师的职位面试做了充分准备的应聘者,你可以把需要编写的代码任务交给它处理。

我欣赏的特性:

  • 它提供了 VSCode、IntelliJ、Sublime 插件

  • 它能够很好地预测我想编写什么,尽管并非完美无瑕,但已经可以帮助我快速编写了一些常见的代码片段

ChatGPT:获取解决问题的端对端指令集,或者编写覆盖多个类和函数的完整用例的代码。此外,它还会解释生成的代码,这是 Copilot 在自动完成时所无法提供的。

接下来,我将介绍在编程时运用 AI 的六种方法:

ea85846184165e4eead9da270dbdab74.png

CSS 生成 (Github Copilot)

在构建 Dr Droid 的过程中,我设定了一个自行编写  reactjs 应用并创建新的组件的目标。尽管我们使用 Figma 制作了原型,但是要将其嵌入到页面设计中,依然需要一些技巧。我主要从事后端开发,因此编写 CSS 来处理网格、移动适配性和间距对我来说有些困难。我创建了一个包含 HTML 元素的类,并在提示中描述了我们 Figma 原型中的元素。Copilot 为这个类添加了 CSS,它基于一些实际测量做出了预测,我稍后可以对其进行调整,但它已经解决了我在选择使用哪些 CSS 样式上的疑惑。

输入:

"""给 3 个类别定义 CSS,一个是父 div,两个是子 div,子 div 应该水平对齐,它们的内部文字分别对齐到左和右"""

输出:

.parentDiv {flex-direction: 'inherit';display: 'flow-root';padding: '2px';
}.leftDiv {width: '30%';height: '100%';background: 'white';float: 'left';border: '1px solid black';text-align: 'left';
}.rightDiv {width: '70%';height: '100%';background: 'white';float: 'right';border: '1px solid black';text-align: 'right';
}

23b5066c878b25dbdfcfc5a8ab62caf2.png

利用 Copilot 编写函数:专注于排序和数据操作

在 Dr Droid 平台上,我们需要进行大量的数据转换来实现各种功能。根据测试,Copilot 在基于提示编写这些转换函数时表现出很强的实力。它也很擅长参考老字段描述新字段,编写将两个数据对象合并为一个具有不同模式的单一对象的函数。

比如,我需要一个函数来在数组中合并 JSON 对象,基于它们的两个字符串键,给出第三个数字键的不同统计。Copilot 能在你的代码环境中进行编写,无需重命名变量,而且你可以告诉它用哪个库来执行。

输入:

"""编写一个函数,该函数在数组中合并 JSON 对象,并在它们的两个字符串键上,并给出第三个数字键的平均值和中位数统计"""  

输出:

function mergeJsonArray(jsonArray, key1, key2, key3) {let mergedJson = {};let mergedJsonArray = [];jsonArray.forEach(item => {if (item[key1] in mergedJson) {if (item[key2] in mergedJson[item[key1]]) {mergedJson[item[key1]][item[key2]].push(item[key3]);} else {mergedJson[item[key1]][item[key2]] = [item[key3]];}} else {mergedJson[item[key1]] = {};mergedJson[item[key1]][item[key2]] = [item[key3]];}});for (const key1 in mergedJson) {for (const key2 in mergedJson[key1]) {let sum = 0.0;let median = 0.0;let mean = 0.0;let count = 0;let min = 0.0;let max = 0.0;mergedJson[key1][key2].forEach(item => {sum += item;count += 1;});mean = sum / count;mergedJson[key1][key2].sort((a, b) => a - b);median = mergedJson[key1][key2][Math.floor(mergedJson[key1][key2].length / 2)];min = mergedJson[key1][key2][0];max = mergedJson[key1][key2][mergedJson[key1][key2].length - 1];mergedJsonArray.push({[key1]: key1,[key2]: key2,'count': count,'sum': sum,'mean': mean,'median': median,'min': min,'max': max});}}return mergedJsonArray;
}

7941324d06bd5266237b1a2263ec5958.png

Co-pilot 的代码编写:识别并运用重复模式

我正在为测试环境编写一个跨多个数据库表进行操作的数据删除脚本。这些表都有时间戳列,但名称各不相同。我在注释中以逗号分隔的方式列出了所有的表名,然后编写了第一张表的删除 SQL 查询,以及整个删除命令的连接光标使用。完成这些后,Co-pilot 开始自动建议为这些表中的每一个迭代选择代码块,同时还根据其中的时间戳列的名称修改它们的列名。然而,它无法理解那个删除可能的顺序,它只按照模型文件中书写的顺序进行。

我在 IntelliJ 和 Sublime Text 中使用了 Co-pilot 插件。我发现 IntelliJ 插件在推荐上更具智能,尤其是在处理其他文件中的类定义的上下文时。

247b2dcc9740e9f3088b4d13075ee57e.png

通过描述需求使用 ChatGPT 生成整个 React.js 组件,只需进行少量变量调整

我在使用名为 react-flow 的 React.js 库时,想要定制部分组件替换库中的原有部分。我的目标是为其添加个性化的视觉效果,以及在组件顶部增添一些附加的文字。尽管文档详细地介绍了如何用新组件替换原有组件,但并没有明确地提到如何在保留原功能的情况下进行扩展。

于是,我向 ChatGPT 提出了问题:

如何在 react-flow 中创建自定义边,这条边是粗大的紫色线条,并且末端有一个大箭头

以下是我收到的答复:

import React from 'react';const CustomEdge = ({ id, sourceX, sourceY, targetX, targetY, style = {} }) => {const edgePath = `M ${sourceX},${sourceY} L ${targetX},${targetY}`;// 计算箭头的角度const angle = Math.atan2(targetY - sourceY, targetX - sourceX);const arrowLength = 10;// 箭头的长度// 计算箭头头部的点const arrowPoints = [[targetX - arrowLength * Math.cos(angle - Math.PI / 6), targetY - arrowLength * Math.sin(angle - Math.PI / 6)],[targetX, targetY],[targetX - arrowLength * Math.cos(angle + Math.PI / 6), targetY - arrowLength * Math.sin(angle + Math.PI / 6)],];return (<><pathid={id}d={edgePath}style={{fill: 'none',strokeWidth: '4px',stroke: 'violet',...style, // 允许覆盖样式}}/><polygonpoints={arrowPoints.map(p => p.join(',')).join(' ')}fill="violet"stroke="violet"strokeWidth="1"/></>);
};export default CustomEdge;// 在你的 React Flow 图中使用自定义边缘组件
import ReactFlow from 'react-flow-renderer';
import CustomEdge from './CustomEdge';const elements = [
// ... 你的节点和边
];const App = () => {return (<div style={{ height: '500px' }}><ReactFlow elements={elements} edgeTypes={{ customEdge: CustomEdge }} /></div>);
};export default App;

对于这段代码,我只需要对选定的 CSS 样式进行一些微调。这段代码帮我节省了大约 30 分钟的编码时间,并且代码也能顺利运行。

3863503f826bac14744b7c3c9a0e2db2.png

向 ChatGPT 请求代码片段,若运行未能成功,反馈错误信息,ChatGPT 将根据反馈进行修正直至问题解决

ChatGPT 擅长根据详尽的反馈来优化其答案。然而,反馈不只是请求再次生成或寻找更好的解决方案,你也可以在反馈中提供上下文信息。例如,我想在 react-flow 图中实现节点的自动布局,我发现有一个叫做 cola 的布局能够实现这个目标。由于在网络上难以找到具体实现的示例,我向 ChatGPT 提问:

给我一个样本代码,展示如何使用 react-flow 和 cola 布局来排列我的节点

输出:

import React from 'react';
import ReactFlow, { ReactFlowProvider, addEdge, removeElements, Controls } from 'react-flow-renderer';
import { ColaLayout } from 'react-flow-renderer/dist/layoutCola';const MyFlowComponent = () => {const initialElements = [{ id: '1', type: 'input', data: { label: 'Input Node' }, position: { x: 0, y: 0 } },{ id: '2', data: { label: 'Node 2' }, position: { x: 200, y: 50 } },{ id: '3', data: { label: 'Node 3' }, position: { x: 400, y: 100 } },{ id: 'e1-2', source: '1', target: '2' },{ id: 'e2-3', source: '2', target: '3' },];const onLoad = (reactFlowInstance) => {reactFlowInstance.fitView();  // 使图形适应视口};const layout = {type: 'cola',edgeLength: 180,animate: true,randomize: false,maxSimulationTime: 1500,};return (<div style={{ height: '500px' }}><ReactFlowProvider><ReactFlow elements={initialElements} onLoad={onLoad} layout={layout}><Controls /></ReactFlow></ReactFlowProvider></div>);
};export default MyFlowComponent;// 使用 npm 安装 cola:
npm install react-flow react-flow-renderer

然而,即便我按照提示进行了安装,代码仍然无法运行,出现了一个错误。

于是,我再次向 ChatGPT 提问:

它给我这样的错误 "Module not found: Error: Package path ./dist/layoutCola is not exported from package"。

输出:

我为这个混淆道歉。看来 layoutCola 模块不再直接在 react-flow-renderer 包中可用。要在 React Flow 中使用 "cola" 布局算法,你可以安装 react-flow-dagre 包,它提供了包括 "cola" 布局在内的额外布局选项。

然后,ChatGPT 提供了替代的代码块,并且推荐我安装一个新的库:

# 使用 npm
npm install react-flow react-flow-renderer react-flow-dagre

但这次安装过程中出现了错误:

npm ERR! 404 Not Found - GET <https://registry.npmjs.org/react-flow-dagre> - Not found

现在,ChatGPT 已经明白我的需求,即使我没主动提问,它也开始提出其他建议,指导我实现节点布局的初衷。最后,尽管并未使用 cola 布局,我还是达成了我的目标,我的问题得到了解决。

近期,我打算在 Kafka 集群和 OpenSearch 服务之间建立消息连接。虽然 Kafka 提供了相应的连接器,但我对这方面的知识了解不够。我在网上寻找了一些配置示例,尽管我找到了详细的配置 Kafka 连接到 S3 桶的示例,但我并未找到使用 OpenSearch 作为数据接收端的示例。于是,我询问了 ChatGPT 该如何操作,它提供了一套完整的指导步骤来帮助我完成这个操作。我在网上搜索了这个答案,想要弄清楚它是 ChatGPT 自我生成的,还是基于其他示例推导的,但结果发现并无类似的文章。

9dea503618285991808628f5e3489cfe.png

局限性与挑战

尽管 AI 编程辅助工具极大地提高了编程效率,但我们也必须清醒地认识到,它并非完美无缺。我们不能完全依赖它生成的代码,而应该逐步检查和测试它的输出结果。

我在使用过程中,也发现了一些局限性:

  1. 有时,Copilot 会生成一些在当前代码上下文中不存在的变量。这可能是因为虽然编码过程中考虑到了变量命名的逻辑性,但并不能保证代码的正确运行。

  2. 当向 ChatGPT 查询某些工具或技术的操作指南时,可能由于其训练数据库的时效性问题,输出的结果有时会显得过时。有些工具可能已经进行了更新,界面也发生了改变,与 ChatGPT 提供的结果不一致。我在使用 AWS 的一些服务时就遇到过这样的情况。

你是否已经在工作中用  AI 来辅助编程?你有什么看法和经验?

推荐阅读:

▶微信:有零钱的微信号不会被系统注销;拼多多旗下 Temu 在美起诉 Shein;Rust 1.71.0 发布|极客头条

▶谷歌、亚马逊、Meta等多家科技公司被爆员工「假工作」,裁员成最终归宿!

▶Stability AI 把绘画门槛打为 0!

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

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

相关文章

ChatGPT 漫游指南 - GitHub 发布 CopiltX 集成 GPT-4

简介 美国东部时间 2023 年 3 月 22 号上午 10 点&#xff0c;开源代码托管平台 GitHub 在 博客[1] 中宣布推出 CopilotX&#xff0c;集成 OpenAI 最新的 GPT-4 模型。 之前的 GitHub Copilot[2] 是基于 OpenAI 的 Codex 模型开发&#xff0c;它是 GPT-3 模型的低配版&#xff…

谷歌亚马逊或遭英国监管;昔日“大数据第一股”面临退市;特斯拉辅助驾驶系统索赔案胜诉丨每日大事件...

‍ ‍数据智能产业创新服务媒体 ——聚焦数智 改变商业 企业动态 台积电与诚新绿能签署协议&#xff0c;将购买20000GWh可再生能源 4月21日&#xff0c;台积电宣布已签署一项长期协议&#xff0c;将在20年内每年从台湾诚新绿能公司&#xff08;Ark Solar Energy&#xff09;的…

2023最新8个电脑必装软件,新电脑装完好用又高效

新买的笔记本电脑到手了&#xff0c;需要安装什么软件&#xff1f;不会真的有人这样问吧&#xff0c;万一真的有人不知道需要安装什么软件呢&#xff1f;好吧&#xff0c;提醒一下各位&#xff0c;新电脑不要乱安装软件啊&#xff0c;不然电脑很容易中病毒的。根据我多次换电脑…

云平台网络——环境配置(一)

Linux状态查询指令 Linux系统中的“root用户”概念是指一个具备所有权限的超级管理员&#xff0c;sudo命令的作用就是赋予一般的用户(比如本机的hrz)超级管理员的权限&#xff0c;使用场景就是诸如系统更新、(要求权限的)文件下载等。在sudo命令中使用的密码一般是“ 用户自己…

elexcon2023八月来袭!带您看尽AI芯片、第三代半导体、Chiplet封测领域热门展示及20+论坛...

2023年&#xff0c;AIGC在AI领域绝对是高频词汇 而GPU、车规级芯片、第三代半导体 Chiplet、3D IC、RISC-V等关键词 也在电子行业上游频频出圈 在下一轮市场上升周期到来之前&#xff0c; 企业如何把脉行业驱动增长方向&#xff1f; 实现穿越周期的可持续发展&#xff1f; 8月来…

segment anything

【唐宇迪】CV不存在&#xff1f;Meta最新的计算机视觉Segment Anything Meta终极模型&#xff0c;强到离谱&#xff01;-人工智能/计算机视觉/深度学习/机器学习_哔哩哔哩_bilibili4月5日最新发布&#xff0c;Meta正式推出模型SAM&#xff08;Segment Anything Model&#xff0…

2023年的深度学习入门指南(6) - 在你的电脑上运行大模型

2023年的深度学习入门指南(6) - 在你的电脑上运行大模型 上一篇我们介绍了大模型的基础&#xff0c;自注意力机制以及其实现Transformer模块。因为Transformer被PyTorch和TensorFlow等框架所支持&#xff0c;所以我们只要能够配置好框架的GPU或者其他加速硬件的支持&#xff0…

用Chatgpt超级写手批量制作爆款内容霸屏 (01)

有成交需要有转化&#xff0c; 有转化需要有流量&#xff0c; 有流量需要有内容&#xff0c; 好的内容&#xff0c;又是流量和转化的关键。 Chatgpt内容工厂将以好内容为载体&#xff0c; 通过Chatgpt超级写手&#xff0c; 来自动化批量生产好的内容。 什么样的内容是好的内容&…

全自动,真批量——Chatgpt超级写手机器人1.0

Part1用chatgpt写作时常常遇到以下问题&#xff1a; 01.写了一段&#xff0c;没写完就停了 02.停了之后&#xff0c;你发继续写&#xff0c;上下文衔接不上来&#xff0c;甚至毫不相干 03.提问和和回答都需要手动复制粘贴 04.提问次数多了&#xff0c;整理提问回答很麻烦 05.提…

.ART艺术域名遇上 ChatGPT:在线展示您的艺术作品的创新方式

前言 .ART 艺术域名一直走在创新的前沿&#xff0c;不断为创意社区带来技术上的创新和支持。近日&#xff0c;.ART 通过深入人工智能领域&#xff0c;与著名的 ChatGPT 合作以保持在艺术科技行业的领先地位&#xff0c;并为用户提供尖端解决方案。 视觉艺术家 Daniel Arsham 最…

使用railway部署Node项目及遇到的问题

大家好, 今天愚人节, 祝大家节日快乐~ 同时向大家推荐一个非常nice的网站, railway, 它能够免费部署项目, 并且免费的账号. 一个月有20天使用权限, 如果想要更长的时间, 就需要续费, 但是一个月20天免费, 还是非常的划算的. 大家都可以去试试, 并且还有一个好处, 它的域名是…

前端性能优化(提升13倍)

1、背景 有好几个童鞋跟我反馈&#xff0c;你测试平台在线demo加载好慢啊 慢确实是慢&#xff0c;但这事情不能赖我呀&#xff0c;肯定是腾讯云的锅。 腾讯云8m带宽的服务器&#xff0c;可是我斥巨资购入的呀 这可是价值5040元的服务器啊&#xff01;&#xff08;虽然实付只…

(亲试有效)如何完美更换WordPress网站的域名

前几天&#xff0c;一位WordPress王牌主机的用户问我&#xff0c;他的WordPress网站已经建立一年多了&#xff0c;现在想要修改网站使用的域名&#xff0c;该如何操作&#xff1f;这是WordPress用户经常遇到的问题。今天我们来给大家介绍一下&#xff0c;如何更换WordPress网站…

ChatGPT 如何用?12个场景的 Prompts 万能话术模板 四个提问技巧

“AI 不会取代人&#xff0c;只会淘汰不会使用AI的人。” 01 — 昨天的《AI启航实用变现手册》发出去后&#xff0c;有朋友问怎么用 ChatGPT 解决我的问题呢&#xff1f;遇到的场景是这样的&#xff1a;‍‍‍‍‍‍‍‍‍‍ “教育机构&#xff0c;老学员8月份续费活动都有哪些…

ChatGPT Plus停售!地球已经没有足够的算力来满足需求了

杨净 发自 凹非寺量子位 | 公众号 QbitAI 刚续费不到2周的账号&#xff0c;现在登录不上了去了。了解一圈后发现&#xff0c;GPT Plus都停售了&#xff0c;GPT 4.0 太消耗算力&#xff0c;不知道是真是假&#xff0c;或另有隐情&#xff01; 网络上众说风云&#xff0c;比如&am…

8个升级到ChatGPT Plus的理由,不升级你就out了

​关注文章下方公众号&#xff0c;可免费获取AIGC最新学习资料 导读&#xff1a;ChatGPT Plus 是 OpenAI 聊天机器人的高级付费版本。以每月 20 美元的价格&#xff0c;该服务为您提供访问 GPT-4&#xff0c;您可以享有令人难以置信的稳定性和更快的响应时间。 本文字数&#…

ChatGPT与Claude对比分析

一 简介 1、ChatGPT: 访问地址&#xff1a;https://chat.openai.com/ 由OpenAI研发,2022年11月发布。基于 transformer 结构的大规模语言模型,包含1750亿参数。训练数据集主要是网页文本,聚焦于流畅的对话交互。对话风格友好,回复通顺灵活,富有创造性。存在一定的安全性问题,可…

小提琴 吉他 二胡 钢琴曲谱智能应用开发 五线谱 六线谱 四线谱简谱播放识别SDK

智域智联科技致力于用“智能化教学 音乐软件模块”及“在线教育AiScore 平台”赋能传统音乐教育&#xff0c;使音乐教 育机构智能化教育转型成为可能。 AifbdScore是一个跨平台的声音识别和评 测库&#xff0c;运用人工智能深度学习算法采集各 种乐器不同音高的时域、频域特征训…

【收集】键盘钢琴 和弦琴谱 (带HTML版开发流程)

目录 键盘钢琴开发 《御剑江湖》 《星之所在》 《童话》 《一直很安静》 《雨的印记》 《天空之城》 《苍海一声笑》 《卡农》 《Tifa Theme》(under construction) 键盘钢琴开发 烦闷中&#xff0c;何以解忧&#xff1f;听君一曲&#xff0c;莫问秋…… 顺着找到的V…

基于 Python 的音乐流派分类

音乐就像一面镜子&#xff0c;它可以告诉人们很多关于你是谁&#xff0c;你关心什么&#xff0c;不管你喜欢与否。我们喜欢说“you are what you stream” - Spotify Spotify 拥有 260 亿美元的净资产&#xff0c;是如今很受欢迎的音乐流媒体平台。它目前在其数据库中拥有数百万…