倚天屠龙:Github Copilot vs Cursor

武林至尊,宝刀屠龙。号令天下,莫敢不从。倚天不出,谁与争锋!

作为开发人员吃饭的家伙,一款好的开发工具对开发人员的帮助是无法估量的。还记得在学校读书的时候,当时流行CS架构的RAD,Delphi和VisualBasic大行其道。就因为Delphi开发快,即使原来没学过Pascal(当时都是学C、C++),对Pascal也谈不上喜爱,还是用了Delphi开发学校的人事系统、国际交流与合作处的信息管理系统等。后面又碰到香港同行用Visual Basic开发的PC同步软件,又跟着学了一波Visual Basic。

后面J2EE大势浩浩荡荡,又经历了JBuilder(可惜了,Borland)、Eclipse、Intellij Idea、Visual Code等IDE的变迁。

然后是去年ChatGPT的发布,开启了生成式AI的浪潮,面向对象编程开始进入“注释驱动编程“、”面向注释编程” 😁
在这里插入图片描述

根据2023年JetBrains的全球开发者生态调研[1],84%的开发者表示他们在工作中正在积极使用生成式AI工具。60%的受访者认为,AI辅助编程工具将从根本上改变软件开发就业市场,但只有13%的人相信人工智能将完全代替开发人员编写代码。大约三分之一的开发者认为软件开发中大多数编程将会变成快速工程。开发者认为人工智能将成为帮助他们编写代码的有效辅助工具,而不是完全取代他们。

不管人工智能是否能取代开发人员,都建议你现在开始接触AI辅助编程工具。我推荐你从尝试GitHub Copilot和Cursor开始。要怎么样才能用好这些辅助工具?刚注册Cursor的时候,我收到一封来自Cursor的email,里面这句话让我印象深刻:
As you get started, keep in mind that programming with AI is a new style of coding. It requires rethinking what you spend time on and what you offload to the computer.

在你开始编程时,请记住,使用人工智能编程是一种新的编码风格。它需要你重新思考在什么上花时间以及你将什么工作交给计算机来处理。

GitHub Copilot

GitHub Copilot可以说是先行者,但是要等到Copilot Chat上线,产品才算完整。GitHub Copilot目前是收费的,每个月10美元。新用户可以免费试用一个月。

虽然GitHub Copilot声称已经升级为GPT-4模型(we’ve upgraded your Copilot Chat experience, bringing more accurate code suggestions and explanations with OpenAI’s GPT-4 model.),但是用起来感觉还不是,可能还没有全部升级完成?

GitHub Copilot最强大的就是面向注释编程,顺畅的时候真是“心有灵犀一点通”,写代码是如虎添翼、快如闪电;但是不顺的时候,说不出的拧巴,感觉就真的是你正专心开车的时候,突然副驾驶要抢你的方向盘 🥵 运用之妙,存乎一心。用得好是神兵利器,用得不好就是卧龙凤雏了。

看下面的例子(response_str是LangChain调用GPT-4返回的,死活不肯返回纯粹的json格式,只好自己处理),Copilot给我提示……

在这里插入图片描述

碰到这种情况,补充注释就好:
# 检测response_str,如果是markdown格式的块:以```json开头,以```结尾,就转换为纯粹的json格式,因为json.loads只能处理纯粹的json格式

Gopilot会给出新的方案:

if response_str.startswith("```json") and response_str.endswith("```"):

response_str = response_str[7:-3]

Cursor

Cursor刚推出时完全免费,而且用的还是GPT-4,一鸣惊人,后来估计GPT-4太贵了,变成了有限免费:每月可以使用50条GPT-4请求和200条GPT-3.5请求。不过它每个月收费20美元,有点贵,建议自己开通微软的Azure的GPT-4服务,那样按用量付费,怎么也用不了20美元。没有用过GPT4的时候,觉得GPT-3.5也不错,可是用了GPT4,就再也回不去了。曾经沧海难为水。

设置使用Azure API

点开Cursor Setting的Advanced,就可以用Azure的API按量付费。
在这里插入图片描述

生成代码

Cursor常用的快捷键是Ctrl+K(生成代码、修改代码)、Ctrl+L(跳到CHAT界面),以至于有人笑称以前的码农是CV大法走天下,新一代码农是KL在手,天下我有。

我们来实战看一下Ctrl+K生成代码,以抓取LangChain的文档(https://python.langchain.com/docs/get_started)为例。

按Ctrl+K,输入:
以 https://python.langchain.com/ 作为baseUrl,baseUrl+/docs/get_started 作为起点,抓取文档,对于每一个文档,进行html解析,继续抓取class为"pagination-nav__link–next"的链接,直至抓取最后一个文档。所有抓取的文档保存到本地的docs目录下。对于每一个链接,要判断是否已经抓取过了。

第一版运行出错:

File “f:\Ivan\study\get-langchain-docs\get_langchain_docs.py”, line 15, in save_document

file.write(response.text)
UnicodeEncodeError: ‘gbk’ codec can’t encode character ‘\U0001f99c’ in position 252: illegal multibyte sequence
选中出错信息,按Ctrl+Shift+L,问:要改编码吧?
Cursor给出了解决方法:

with open(os.path.join(folder, filename), 'w') as file:
        file.write(response.text)

改成:

with open(os.path.join(folder, filename), 'w', encoding='utf-8') as file:
        file.write(response.text)

再次运行,发现文件名不对,给文件名加上扩展名:filename += “.html”

还发现有这种url,结尾多了/:https://python.langchain.com/docs/expression_language/how_to/

Ctrl+K输入:如果full_url以/结尾,则去掉尾部的/ ,自动生成代码(这种实际上自己输入更快,不熟悉Python的话可以让Cursor生成):

if full_url.endswith('/'):
            full_url = full_url[:-1]

最终得到了这样的源码:

# 以 https://python.langchain.com/ 作为baseUrl,baseUrl+/docs/get_started 作为起点,抓取文档,对于每一个文档,进行html解析,继续抓取class为"pagination-nav__link--next"的链接,直至抓取最后一个文档。所有抓取的文档保存到本地的docs目录下。对于每一个链接,要判断是否已经抓取过了。

import os
import time
import requests
from bs4 import BeautifulSoup

def save_document(url, folder='docs'):
    if not os.path.exists(folder):
        os.makedirs(folder)
    response = requests.get(url)
    soup = BeautifulSoup(response.text, 'html.parser')
    # 修改文档中的CSS路径
    for link in soup.find_all('link', href=True):
        if link['href'].startswith('/assets/css/'):
            link['href'] = '.' + link['href']
    filename = url.split('/')[-1] or 'index.html'
    filename += ".html"
    with open(os.path.join(folder, filename), 'w', encoding='utf-8') as file:
        file.write(str(soup))
    return soup

def get_next_link(soup):
    link_tag = soup.find(class_="pagination-nav__link--next")
    if link_tag and 'href' in link_tag.attrs:
        return link_tag['href']
    return None

def crawl_docs(start_url, base_url='https://python.langchain.com'):
    visited = set()
    next_url = start_url
    while next_url:
        full_url = base_url + next_url
        if full_url.endswith('/'):
            full_url = full_url[:-1]
        if full_url not in visited:
            print('visiting', full_url)
            visited.add(full_url)
            soup = save_document(full_url)
            time.sleep(3)
            next_url = get_next_link(soup)
        else:
            break

if __name__ == '__main__':
    start_path = '/docs/get_started'
    crawl_docs(start_path)

还不错,是吧?

注:上面只是用来演示如何使用Cursor,如果经常要抓取某些网站的文档来投喂大模型,可以考虑专门的开源项目,如gpt-crawler:https://github.com/BuilderIO/gpt-crawler 说到这个,不得不提Java的开源项目,如Spring Boot,一般都会提供单独的pdf文件,要投喂大模型太方便了。

另外,Cursor可以提问除了与编程无关的问题,可以当作chatgpt的GPT4版本来用。这对于苦于无法开通chatgpt plus会员的用户来说,可以当作暂时的解决方法。虽然不能用多模态,但还是具备高质量的对话能力,很多时候也够用了。

如你可以在Cursor里面提问“胃反酸是怎么回事?”,它会回答:

胃反酸,也被称为胃酸倒流或胃食道反流病(GERD),是指胃中的酸性内容物反流到食道中。这是由于食道下部的肌肉环(称为食道括约肌)不能正常关闭,导致胃酸逆流到食道。

胃反酸的常见症状包括心烧(胸骨后部的烧灼感)、喉咙痛、口腔有酸味、咳嗽、声音嘶哑、感觉有东西卡在喉咙中等。

胃反酸可能由多种因素引起,包括饮食习惯、生活方式、怀孕、肥胖、某些药物和疾病等。如果你经常感到胃反酸,应该寻求医生的帮助,因为长期的胃酸倒流可能导致食道炎、食道溃疡甚至食道癌。

GitHub Copilot只会傲娇地告诉你:作为一个AI编程助手,我专注于软件开发主题。对于医疗健康相关的问题,建议你咨询医疗专业人士或者使用专门的医疗咨询服务。

思考

不管是GitHub Copilot还是Cursor,请善用他们的CHAT界面,和他们聊关于编程的问题。这个绝对是诲人不倦的好老师,对于学习一门新的编程语言,也特别方便。

AI编程助手已经可以帮我们完成很多琐碎、重复的工作,那么在接下来的AI大潮中,程序员要如何提升自己:

  1. 提升自己的沟通能力

AI只会越来越强,但是你不能很好的表达自己的想法,AI也帮不了你。建议多写学习笔记、博客等,不要在意有多少访问量,多表达就好。

  1. 提升自己的判断力

暂时AI只能辅助你,最终还是你来做决策,还是要熟悉自己的领域,知道哪些是好的,哪些是不好的。

  1. 提升自己的审美能力

程序员写的是代码,最终出来的是产品,产品都是要给人用的。拥有更好的审美能力有助于做出更好的产品、有灵魂的产品。

扩展

除了GitHub Copilot和Cursor,还有不少的竞品,可能会差一点,也不会差太多。

  • CodeWhisperer

亚马逊信奉长期主义,它的CodeWhisperer(https://aws.amazon.com/cn/codewhisperer/)一直默默发展,面向个人用户提供无限制的代码智能生成服务。

  • Codeium

Codeium(https://codeium.com/)是由初创公司研发的一款对标Github Copilot的代码智能生成插件,支持主流的各种编程语言,同样面向个人用户免费使用。

Codeium Chat目前也打算支持GPT-4,正在进行beta测试:https://codeium.com/waitlist/gpt-4?referrer=extension

  • CodeGeeX

CodeGeeX(https://github.com/THUDM/CodeGeeX2)除了免费,还是开源的。除了常规的根据上下文和提示生成代码的功能以外,CodeGeeX还具有代码跨语言翻译功能。

前不久国内技术社区CSDN的中国开发者生态——AI辅助编程的相关调研中,受访者认为国产代码生成工具中,CodeGeeX的采用率较为领先。

  • 通义灵码

阿里巴巴的通义灵码(https://tongyi.aliyun.com/lingma)刚推出不久,目前看来也不错,期待能更好。

这么多编程助手,你选哪一个?或者说小孩子才做选择,成年人全都要? 😍 我目前代码生成、代码修改、Chat以Cursor为主,代码自动完成以GitHub Copilot辅助,其他编程助手密切关注。

2024年,会否有更强大的开发者AI工具胜出?让你能发出“噫!微斯人,吾谁与归?”

参考

  1. 2023年JetBrains的全球开发者生态调研:https://www.jetbrains.com/lp/devecosystem-2023/

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

二维码智慧门牌管理系统升级解决方案:存疑地址轻松管理

文章目录 前言一、存疑地址的统一管理二、数据查询、导出和编辑功能三、提交地址审核机制 前言 随着二维码智慧门牌管理系统在企业中的广泛应用,地址存疑成为了一个亟待解决的问题。为了帮助企业有效管理这些存疑地址,我们推出了升级解决方案&#xff0…

YOLOv8改进 | 2023 | AKConv轻量级架构下的高效检测(既轻量又提点)

一、本文介绍 本文给大家带来的改进内容是AKConv是一种创新的变核卷积,它旨在解决标准卷积操作中的固有缺陷(采样形状是固定的),AKConv的核心思想在于它为卷积核提供了任意数量的参数和任意采样形状,能够使用任意数量…

FreeRTOS-软件定时器

软件定时器 在FreeRTOS中可以设置无数个软件定时器,都是基于系统滴答中断。 使用软件定时器需要指定时间:启动定时器和运行回调函数。启动定时器和运行回调函数的间隔为定时器的周期。 使用软件定时器需要指定类型:一次性(回调函数…

优维产品最佳实践第17期:善用控制台

「 背 景 」 遇到页面报错时,是不是感到困扰,不知如何解决? 页面响应缓慢时,是否感到迷茫,不清楚从何入手排查? 面对主机高负载时,是不是觉得确认异常根因很有挑战? 本期最佳实践…

变配电智能监控系统

变配电智能监控系统是一种能够实时监测电力变压器和配电柜、配电箱运行状态的智能设备。这种系统利用先进的传感器和数据通信技术,能够实时监测电力设备的运行状态,包括电压、电流、温度、湿度等参数,并且能够对这些数据进行处理和分析&#…

新媒体营销模拟实训室解决方案

一、引言 随着互联网的发展,新媒体已成为企业进行营销和品牌推广的重要渠道。然而,对于许多企业来说,如何在新媒体上进行有效的营销仍是一大挑战。为了解决这个问题,我们推出了一款新媒体营销模拟实训室解决方案,以帮…

焊接专业个人简历(通用25篇)

如果大家想在焊接行业的求职中脱颖而出,轻松斩获心仪职位,参考这25篇通用的焊接专业个人简历案例,无论您是初学者还是资深焊工,都能从中找到适合自己的简历内容。参考这些简历,让您的求职之路更加顺畅。 焊接专业个人…

Web漏洞分析-SQL注入XXE注入(中上)

随着互联网的不断普及和Web应用的广泛应用,网络安全问题愈发引起广泛关注。在网络安全领域中,SQL注入和XXE注入是两个备受关注的话题,也是导致许多安全漏洞的主要原因之一。本博客将深入研究这两种常见的Web漏洞,带您探寻背后的原…

C++基础 -38- 模板函数的局限性

模板函数无法对自定义数据类型进行操作(如类) 这个时候我们重载一个函数来匹配操作即可 #include "iostream"using namespace std;class base { public:base(int a) : a(a) {}int a; };template <class T, class T1> bool compare(T a, T1 b) {if (a > b…

蓝桥杯-03-蓝桥杯学习计划

蓝桥杯-03-蓝桥杯学习计划 参考资料 相关文献 报了蓝桥杯比赛&#xff0c;几乎零基础&#xff0c;如何准备&#xff0c;请大牛指导一下。谢谢&#xff1f; 蓝桥杯2022各组真题汇总(完整可评测) 基础学习 C语言网 ACM竞赛入门,蓝桥杯竞赛指南 廖雪峰的官方官网 算法题单 洛谷…

【JavaEE】单例模式

作者主页&#xff1a;paper jie_博客 本文作者&#xff1a;大家好&#xff0c;我是paper jie&#xff0c;感谢你阅读本文&#xff0c;欢迎一建三连哦。 本文于《JavaEE》专栏&#xff0c;本专栏是针对于大学生&#xff0c;编程小白精心打造的。笔者用重金(时间和精力)打造&…

爬虫概念、基本使用及一个类型和六个方法(一)

目录 一、爬虫简介 1.什么是爬虫 2.爬虫的核心 3.爬虫的用途 4.爬虫的分类 5.反爬手段 二、Urllib基本使用 1.导入我们需要的包 2.定义一个url 3.模拟浏览器向服务器发送请求 4.获取响应中的页面的源码 5.打印数据 三、一个类型和六个方法 1.定义url&#xff0c;并…

C++初阶 | [七] string类(上)

摘要&#xff1a;标准库中的string类的常用函数 C语言中&#xff0c;字符串是以\0结尾的一些字符的集合&#xff0c;为了操作方便&#xff0c;C标准库中提供了一些str系列的库函数&#xff0c; 但是这些库函数与字符串是分离开的&#xff0c;不太符合OOP(面向对象)的思想&#…

【vue】vue-slick-carousel插件,实现横向滚动列表手动左右滚动(也可设置为自动滚动)

需求&#xff1a;图片列表横向滚动的时候&#xff0c;隐藏原始滚动条&#xff0c;通过左右箭头控制滚动条往左右按一定的步长移动。 el-carousel走马灯一滚动就是一屏&#xff0c;不适合我的需求 在npm官网搜vue-slick-carousel&#xff0c;查看更详细的配置 vue-slick-caro…

解决xshell连接诶树莓派中文乱码的问题

系统版本 解决办法 在根目录下找到 /etc/profile 修改profile文件,添加以下两行.以便重启之后也能生效: export LANGzh_CN.utf8 export LC_ALLzh_CN.utf8注意: /etc/profile的修改需要root权限才能修改! 在xshell的编码格式改为UTF-8

全志T527设置gpio口输出高电平实际输出低电平

前言 在调试T527的时候&#xff0c;主板另外添加了gpio口去控制usb口的电源开关&#xff0c;软件上面需要在内核运行的时候将gpio口设置输出高电平&#xff0c;usb口才可以正常使用。改好系统固件后&#xff0c;升级发现&#xff0c;机器开机动画过程中可以控制gpio口去打开us…

竞赛选题YOLOv7 目标检测网络解读

文章目录 0 前言1 yolov7的整体结构2 关键点 - backbone关键点 - head3 训练4 使用效果5 最后 0 前言 世界变化太快&#xff0c;YOLOv6还没用熟YOLOv7就来了&#xff0c;如果有同学的毕设项目想用上最新的技术&#xff0c;不妨看看学长的这篇文章&#xff0c;学长带大家简单的…

[C国演义] 第二十三章

第二十三章 两个字符串的最小ASCLL删除和最长重复子数组 两个字符串的最小ASCLL删除和 力扣链接 求 删除字符的ASCLL和的最小值 ⇒ 正难则反 ⇒ 求公共子序列的ASCLL和的最大值 两个数组的dp问题 ⇒ 分区间讨论 ⇒ dp[i][j] -- nums1数组的[0, i] 区间 和 nums2数组的[0, j] …

《opencv实用探索·九》中值滤波简单理解

1、引言 均值滤波、方框滤波、高斯滤波&#xff0c;都是线性滤波方式。由于线性滤波的结果是所有像素值的线性组合&#xff0c;因此含有噪声的像素也会被考虑进去&#xff0c;噪声不会被消除&#xff0c;而是以更柔和的方式存在。这时使用非线性滤波效果可能会更好。中值滤波是…

手搓图片滑动验证码_JavaScript进阶

手搓图片滑动验证码 背景代码效果图展示网站 背景 在做前端项目开发的时候&#xff0c;少不了登录注册部分&#xff0c;既然有登录注册就少不了机器人验证&#xff0c;验证的方法有很多种&#xff0c;比如短信验证码、邮箱验证码、图片滑动、图片验证码等。 由于鄙人在开发中…