当前位置: 首页 > news >正文

倚天屠龙: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 BeautifulSoupdef 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 soupdef 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 Nonedef crawl_docs(start_url, base_url='https://python.langchain.com'):visited = set()next_url = start_urlwhile next_url:full_url = base_url + next_urlif 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:breakif __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/

相关文章:

倚天屠龙:Github Copilot vs Cursor

武林至尊,宝刀屠龙。号令天下,莫敢不从。倚天不出,谁与争锋! 作为开发人员吃饭的家伙,一款好的开发工具对开发人员的帮助是无法估量的。还记得在学校读书的时候,当时流行CS架构的RAD,Delphi和V…...

【web安全】RCE漏洞原理

前言 菜某的笔记总结,如有错误请指正。 RCE漏洞介绍 简而言之,就是代码中使用了可以把字符串当做代码执行的函数,但是又没有对用户的输入内容做到充分的过滤,导致可以被远程执行一些命令。 RCE漏洞的分类 RCE漏洞分为代码执行…...

EI论文复现:基于组合双向拍卖的共享储能机制研究程序代码!

本程序参考EI期刊论文《基于组合双向拍卖的共享储能机制研究》,文中的组合双向拍卖交易机制较为新颖,本质上属于博弈范畴,共享储能是目前的研究热点,牵涉到共享储能参与者的投标策略和收益函数,文中所提模型可为电力市…...

ThinkPHP 5 中,你可以使用定时任务调度器(TaskScheduler)来执行其他定时任务

在 ThinkPHP 5 中,你可以使用定时任务调度器(TaskScheduler)来执行其他定时任务。以下是一个示例代码,演示如何在一个定时任务中执行另一个定时任务: 首先,你需要创建一个继承自 think\console\Command 的…...

mysql:免费的GUI客户端工具推荐并介绍常用的操作

给大家推荐几个常用的 mysql 数据库客户端 sequel-pro sequel-ace 官网下载地址 免费 sequel-ace 可以理解为 Sequel Pro 的升级版,由于Sequel Pro官方不维护了,特别是对 MySQL 8.0 支持不好,所以现在由社区维护了新分支 sequel-ace&#x…...

[Unity数据管理]自定义菜单创建Unity内部数据表(ScriptableObject)

Unity 在开发的时候如果数据量比较大&#xff0c;或者一部分数据需要存在云端&#xff0c;那么就需要一些数据库 轻量型到大型的包括&#xff1a; 数组-内存存储读取 列表-内存存储读取 List<T> tList new List<T>(); XML-硬盘存储读取 JSON-硬盘存储读取 …...

使用JAVA语言写一个排队叫号的小程序

以下是一个简单的排队叫号的小程序&#xff0c;使用JAVA语言实现。 import java.util.LinkedList; import java.util.Queue; import java.util.Scanner;public class NumberingSystem {public static void main(String[] args) {Queue<String> queue new LinkedList<…...

openGauss学习笔记-140 openGauss 数据库运维-例行维护-例行维护表

文章目录 openGauss学习笔记-140 openGauss 数据库运维-例行维护-例行维护表140.1 相关概念140.2 操作步骤140.3 维护建议 openGauss学习笔记-140 openGauss 数据库运维-例行维护-例行维护表 为了保证数据库的有效运行&#xff0c;数据库必须在插入/删除操作后&#xff0c;基于…...

ubuntu20.04使用LIO-SAM对热室空间进行重建

一、安装LIO-SAM 1.环境配置 默认已经安装过ros sudo apt-get install -y ros-Noetic-navigation sudo apt-get install -y ros-Noetic-robot-localization sudo apt-get install -y ros-Noetic-robot-state-publisher 安装 gtsam(如果是18.04的ubuntu直接按照官网配置&…...

如何选学生用的台灯?眼科专家都说好的学生台灯分享!

根据中国眼健康白皮书显示&#xff0c;我国儿童青少年近视总体发生率为53.6%&#xff0c;由此可见如今青少年学生近视的发病率非常高的&#xff0c;且越来越向低龄化发展&#xff0c;不少还在小学阶段的孩子也存在近视的现象。 而造成这个现象的主要原因就是长时间的用眼导致的…...

Linux4.8、环境变量续

个人主页&#xff1a;Lei宝啊 愿所有美好如期而遇 前言 如果对环境变量没有基本的理解&#xff0c;那么建议先看完这篇文章&#xff1a;环境变量https://blog.csdn.net/m0_74824254/article/details/134661113?spm1001.2014.3001.5501 环境变量与本地变量区别 使用export设…...

PTA 7-231 买文具

某小学要购置文具。批发市场中 A 牌的铅笔卖 5 元一支&#xff0c;C 牌的铅笔卖 2 元一支&#xff0c;D 牌的简易铅笔卖1元2只&#xff08;捆绑销售&#xff0c;只能买偶数只&#xff09;。 如果想用n元买n支笔&#xff0c;问有多少种买法&#xff1f;&#xff08;题目保证 n …...

GPTs每日推荐--生化危机【典藏版】

今天给大家推荐一个游戏性质的GPTs&#xff0c;叫做生化危机典藏版&#xff0c;国内点击可玩。 开篇&#xff1a;玩家从末日中醒来。 选择&#xff1a;玩家会遇到各种资源、任务、剧情&#xff0c;需要自行选择相关的分支剧情&#xff0c;一旦选错&#xff0c;无法重选。 结局…...

jenkins-cicd基础操作

1.先决条件 1.首先我个人势在k8s集群中创建的jenkins,部署方法搭建 k8s部署jenkins-CSDN博客 2.安装指定插件. 1.Gitlab plugin 用于调用gitlab-api的插件 2.Kubernetes plugin jenkins与k8s进行交互的插件,可以用来自动化的构建和部署 3.Build Authorizatio…...

ctfhub技能树_web_信息泄露

目录 二、信息泄露 2.1、目录遍历 2.2、Phpinfo 2.3、备份文件下载 2.3.1、网站源码 2.3.2、bak文件 2.3.3、vim缓存 2.3.4、.DS_Store 2.4、Git泄露 2.4.1、log 2.4.2、stash 2.4.3、index 2.5、SVN泄露 2.6、HG泄露 二、信息泄露 2.1、目录遍历 注&#xff1…...

使用Docker本地部署chatgpt

GitHub上有一个开源的工程ChatGPT-Next-Web&#xff0c;这个工程已经封装好了UI以及和OpenAI的API之间的交互&#xff0c;你要做的事情就是把他部署到本地&#xff0c;并配置好你的OpenAI的sk&#xff0c;然后就可以使用了。那么接下来的文章里&#xff0c;我会手把手教你如何C…...

SpringBoot 集成Netty、WebSocket,5分钟搭建聊天通信系统

文章目录 前言Netty简介使用Netty开发WebSocket应用程序开始项目一、添加依赖二、自定义处理器三、初始化通道加载器四、配置启动器五、添加启动监听器六、启动项目七、演示效果1. 客户端1看到其他客户端上线2. 客户端3收到客户端1发送的消息3. 客户端1收到客户端2下线前言 在…...

LeedCode刷题---双指针问题

顾得泉&#xff1a;个人主页 个人专栏&#xff1a;《Linux操作系统》 《C/C》 《LeedCode刷题》 键盘敲烂&#xff0c;年薪百万&#xff01; 双指针简介 常见的双指针有两种形式&#xff0c;一种是对撞指针&#xff0c;一种是左右指针。 对撞指针:一般用于顺序结构中&…...

使用Notepad++编辑器,安装AnalysePlugin搜索插件

概述 是一款非常有特色的编辑器&#xff0c;Notepad是开源软件&#xff0c;Notepad中文版可以免费使用。 操作步骤&#xff1a; 1、在工具栏 ->“插件”选项。 2、勾选AnalysePlugin选项&#xff0c;点击右上角“安装”即可。 3、 确认安装插件 4、下载插件 5、插件已安装…...

胶囊网络实现手写数字分类

文章目录 前言一、完整代码二、修改成自己的数据集总结 前言 胶囊网络的概念可以先行搜索。 一、完整代码 import torch import torch.nn.functional as F from torch import nn from torchvision import transforms, datasets from torch.optim import Adam from torch.util…...

OkHttp 中实现断点续传 demo

在 OkHttp 中实现断点续传主要通过以下步骤完成&#xff0c;核心是利用 HTTP 协议的 Range 请求头指定下载范围&#xff1a; 实现原理 Range 请求头&#xff1a;向服务器请求文件的特定字节范围&#xff08;如 Range: bytes1024-&#xff09; 本地文件记录&#xff1a;保存已…...

C#中的CLR属性、依赖属性与附加属性

CLR属性的主要特征 封装性&#xff1a; 隐藏字段的实现细节 提供对字段的受控访问 访问控制&#xff1a; 可单独设置get/set访问器的可见性 可创建只读或只写属性 计算属性&#xff1a; 可以在getter中执行计算逻辑 不需要直接对应一个字段 验证逻辑&#xff1a; 可以…...

Bean 作用域有哪些?如何答出技术深度?

导语&#xff1a; Spring 面试绕不开 Bean 的作用域问题&#xff0c;这是面试官考察候选人对 Spring 框架理解深度的常见方式。本文将围绕“Spring 中的 Bean 作用域”展开&#xff0c;结合典型面试题及实战场景&#xff0c;帮你厘清重点&#xff0c;打破模板式回答&#xff0c…...

永磁同步电机无速度算法--基于卡尔曼滤波器的滑模观测器

一、原理介绍 传统滑模观测器采用如下结构&#xff1a; 传统SMO中LPF会带来相位延迟和幅值衰减&#xff0c;并且需要额外的相位补偿。 采用扩展卡尔曼滤波器代替常用低通滤波器(LPF)&#xff0c;可以去除高次谐波&#xff0c;并且不用相位补偿就可以获得一个误差较小的转子位…...

【Kafka】Kafka从入门到实战:构建高吞吐量分布式消息系统

Kafka从入门到实战:构建高吞吐量分布式消息系统 一、Kafka概述 Apache Kafka是一个分布式流处理平台,最初由LinkedIn开发,后成为Apache顶级项目。它被设计用于高吞吐量、低延迟的消息处理,能够处理来自多个生产者的海量数据,并将这些数据实时传递给消费者。 Kafka核心特…...

加密通信 + 行为分析:运营商行业安全防御体系重构

在数字经济蓬勃发展的时代&#xff0c;运营商作为信息通信网络的核心枢纽&#xff0c;承载着海量用户数据与关键业务传输&#xff0c;其安全防御体系的可靠性直接关乎国家安全、社会稳定与企业发展。随着网络攻击手段的不断升级&#xff0c;传统安全防护体系逐渐暴露出局限性&a…...

如何通过git命令查看项目连接的仓库地址?

要通过 Git 命令查看项目连接的仓库地址&#xff0c;您可以使用以下几种方法&#xff1a; 1. 查看所有远程仓库地址 使用 git remote -v 命令&#xff0c;它会显示项目中配置的所有远程仓库及其对应的 URL&#xff1a; git remote -v输出示例&#xff1a; origin https://…...

goreplay

1.github地址 https://github.com/buger/goreplay 2.简单介绍 GoReplay 是一个开源的网络监控工具&#xff0c;可以记录用户的实时流量并将其用于镜像、负载测试、监控和详细分析。 3.出现背景 随着应用程序的增长&#xff0c;测试它所需的工作量也会呈指数级增长。GoRepl…...

结构化文件管理实战:实现目录自动创建与归类

手动操作容易因疲劳或疏忽导致命名错误、路径混乱等问题&#xff0c;进而引发后续程序异常。使用工具进行标准化操作&#xff0c;能有效降低出错概率。 需要快速整理大量文件的技术用户而言&#xff0c;这款工具提供了一种轻便高效的解决方案。程序体积仅有 156KB&#xff0c;…...

【大模型】RankRAG:基于大模型的上下文排序与检索增强生成的统一框架

文章目录 A 论文出处B 背景B.1 背景介绍B.2 问题提出B.3 创新点 C 模型结构C.1 指令微调阶段C.2 排名与生成的总和指令微调阶段C.3 RankRAG推理&#xff1a;检索-重排-生成 D 实验设计E 个人总结 A 论文出处 论文题目&#xff1a;RankRAG&#xff1a;Unifying Context Ranking…...