网易首页 > 网易号 > 正文 申请入驻

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

0
分享至

这篇文章主要讨论了如何使用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 的六种方法:

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';

利用 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': maxreturn mergedJsonArray;

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

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

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

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

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

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

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

以下是我收到的答复:


import React from 'react';
const CustomEdge = ({ id, sourceX, sourceY, targetX, targetY,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 (id={id}d={edgePath}style={{fill: 'none',strokeWidth: '4px',stroke: 'violet',...style, // 允许覆盖样式points={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 (

'500px' }}>


export default App;

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

向 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 (

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 提供了替代的代码块,并且推荐我安装一个新的库:


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

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

npm ERR! 404 Not Found - GET - Not found

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

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

局限性与挑战

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

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

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

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

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

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
王家卫也不好使了,内地大爆剧《繁花》收视在TVB剧集中垫底

王家卫也不好使了,内地大爆剧《繁花》收视在TVB剧集中垫底

港叔
2024-06-12 10:42:42
人社部再发通知,事关企业职工退休,各地各部门各企业必须执行

人社部再发通知,事关企业职工退休,各地各部门各企业必须执行

爱意随风起呀
2024-06-13 19:56:51
中国史和世界史为什么不一起学?看完网友回复,我突然明白了!

中国史和世界史为什么不一起学?看完网友回复,我突然明白了!

有趣的羊驼
2024-06-06 14:27:16
“三小时内开除全体员工”“房子都没人卖了”!深圳一老牌房企被曝全员解散,员工上门维权却已无人对接

“三小时内开除全体员工”“房子都没人卖了”!深圳一老牌房企被曝全员解散,员工上门维权却已无人对接

每日经济新闻
2024-06-13 00:26:08
5 天超 1.3 亿播放量!抖音现象级视频出现了

5 天超 1.3 亿播放量!抖音现象级视频出现了

科技狐
2024-06-13 10:57:05
对华断供3个月,阿斯麦终于迎来反噬,外媒:光刻机成一堆废铁

对华断供3个月,阿斯麦终于迎来反噬,外媒:光刻机成一堆废铁

柏铭锐谈
2024-06-13 12:16:54
回顾太嚣张了!东莞“人肉市场”横行,记者秘密暗访爆出真实内幕

回顾太嚣张了!东莞“人肉市场”横行,记者秘密暗访爆出真实内幕

五月读书汇
2024-06-13 12:08:20
果然还是道教符合我的精神状态!网友:以后谁再毁我道心 我跟谁急

果然还是道教符合我的精神状态!网友:以后谁再毁我道心 我跟谁急

开玩笑的水母
2024-06-13 16:21:17
沙特降到第三档,运气好,分到超级好签,国足可能前二直接出线?

沙特降到第三档,运气好,分到超级好签,国足可能前二直接出线?

第一体育
2024-06-13 13:09:54
黄一鸣孩子有继承权吗?王思聪前女友豆得儿破防,状态令人担心

黄一鸣孩子有继承权吗?王思聪前女友豆得儿破防,状态令人担心

素素娱乐
2024-06-13 08:27:35
姆巴佩称欧洲杯比世界杯困难?梅西:他们漏掉了很多世界冠军

姆巴佩称欧洲杯比世界杯困难?梅西:他们漏掉了很多世界冠军

直播吧
2024-06-13 04:49:03
23点,中国女排扭转乾坤,赖亚文新身份亮相,蔡斌这次没有食言!

23点,中国女排扭转乾坤,赖亚文新身份亮相,蔡斌这次没有食言!

体坛猪八戒
2024-06-14 01:12:44
瓦屋山女游客被落石砸中身亡!知情人曝其身份,父亲还不知晓噩耗

瓦屋山女游客被落石砸中身亡!知情人曝其身份,父亲还不知晓噩耗

六毛朵朵
2024-06-13 13:27:49
荷兰哭诉说:中国空军欺负我,还对我贴脸围观

荷兰哭诉说:中国空军欺负我,还对我贴脸围观

一个坏土豆
2024-06-13 20:24:17
一女子生完孩子不到十天与丈夫同房,竟然死掉了!

一女子生完孩子不到十天与丈夫同房,竟然死掉了!

阿燕姐说育儿
2024-06-13 18:00:36
“一丝不挂”新舞蹈?惹争议,被摸下体更不害臊,金星质疑是对的

“一丝不挂”新舞蹈?惹争议,被摸下体更不害臊,金星质疑是对的

吃鱼思故渊
2024-05-16 21:48:21
河南省应急管理厅:全省因旱不能播种面积达323万亩

河南省应急管理厅:全省因旱不能播种面积达323万亩

鲁中晨报
2024-06-13 15:59:04
俄军苏-57隐形战机遇袭迷雾重重!面对外媒猜测,俄国防部始终不予回应

俄军苏-57隐形战机遇袭迷雾重重!面对外媒猜测,俄国防部始终不予回应

环球网资讯
2024-06-11 07:40:13
顺义要被堵死了.…源自无人驾驶

顺义要被堵死了.…源自无人驾驶

悠闲葡萄
2024-06-13 18:03:37
放弃冲第3冠!38岁纳达尔宣布退出温网,全力备战生涯最后1届奥运

放弃冲第3冠!38岁纳达尔宣布退出温网,全力备战生涯最后1届奥运

我爱英超
2024-06-13 21:28:38
2024-06-14 03:44:49
CSDN
CSDN
成就一亿技术人
24720文章数 241819关注度
往期回顾 全部

科技要闻

小红书员工仅1/5工龄满2年 32岁就不让进了

头条要闻

上海楼市新政后有业主熬夜卖房:比之前最低价高360万

头条要闻

上海楼市新政后有业主熬夜卖房:比之前最低价高360万

体育要闻

乔丹最想单挑的男人走了

娱乐要闻

森林北报案,称和汪峰的感情遭受压力

财经要闻

私募大佬孙强:中国为什么缺少耐心资本

汽车要闻

升级8155芯片 新款卡罗拉锐放售12.98-18.48万

态度原创

房产
亲子
游戏
手机
健康

房产要闻

再度告急!海口连续仨月住宅入市不足千套!竟有楼盘卖爆!

亲子要闻

3岁幼崽教我做事?敢放手的人先享受世界

流萤的魅力!为迎接她上线崩铁开启线下活动,邀约地点藏玄机

手机要闻

鸿蒙份额超越 iOS/小爱同学接入豆包大模型

晚餐不吃or吃七分饱,哪种更减肥?

无障碍浏览 进入关怀版