大模型 + cursor应用案例
cursor 介绍
cursor是一个集成了GPT4、Claude 3.5等先进LLM(Large Language Mode)的类vscode的编译器,可以理解为在vscode中集成了AI辅助编程助手,从下图中的页面可以看出cursor的布局和vscode基本一致,并且cursor的使用操作也和vscode一致,包括extension下载、python编译器配置、远程服务器连接和settings等,如果你是资深vscode用户,那么恭喜你可以直接无缝衔接cursor。当然,如果你是pycharm选手,你也可以很快上手cursor。
使用步骤
cursor直接在官网下载安装即可,并且注册账号,在第一次打开cursor时输入账号信息即可。
cursor官网:https://www.cursor.com/cn
下载页面:
点击最上面的框,输入>language,可以配置简体中文。
内置模型
cursor内置了很多LLMs,包括最先进的GPT4s、Claude3.5s和openai最新发布的推理模型o1-preview和o1-mini,在右上角的设置中即可打开相应的模型进行辅助编程。平时用的最多的还是Claude3.5和GPT4,因为代码能力真的很强悍,后面会展示。
常用快捷键
Tab:自动填充
Ctrl+K:编辑代码
Ctrl+L:回答用户关于代码和整个项目的问题,也可以编辑代码(功能最全面)
首先介绍Tab快捷键的使用,如果cursor补全代码,使用Tab键接受即可。
创建一个js输入匹配的正则表达式,会自动帮你生成和补全
Ctrl+K:编辑代码
点击Generate就可以自动生成代码
然后点击Accept就可以直接粘贴到文件当中。
可以看到cursor不仅生成了代码而且还写上了中文注释,相当强大。
Ctrl+L:回答用户关于代码和整个项目的问题,也可以编辑代码(功能最全面)
cursor给出的答案
我来分析一下这段代码,并提供一些优化建议:
安全性问题:
字符串操作使用 strcpy 没有长度检查,可能导致缓冲区溢出
没有对传入的指针参数进行 NULL 检查
内存管理问题:
虽然有析构函数,但无法保证一定会被调用
没有错误处理机制,比如内存分配失败的处理
封装性问题:
虽然注释说明了私有成员,但在 C 语言中实际上所有成员都是可以直接访问的
没有真正实现数据封装
这里是优化建议的代码示例:
// ... existing code ...// 构造函数增加错误处理
Person* Person_create(const char* name, const char* gender, int age, const char* phone, const char* address) {if (!name || !gender || !phone || !address) {return NULL;}Person* p = (Person*)malloc(sizeof(Person));if (!p) {return NULL;}strncpy(p->name, name, sizeof(p->name) - 1);p->name[sizeof(p->name) - 1] = '\0';strncpy(p->gender, gender, sizeof(p->gender) - 1);p->gender[sizeof(p->gender) - 1] = '\0';p->age = age;strncpy(p->phone, phone, sizeof(p->phone) - 1);p->phone[sizeof(p->phone) - 1] = '\0';strncpy(p->address, address, sizeof(p->address) - 1);p->address[sizeof(p->address) - 1] = '\0';return p;
}// Setter方法增加安全检查
void Person_setName(Person* p, const char* name) {if (!p || !name) return;strncpy(p->name, name, sizeof(p->name) - 1);p->name[sizeof(p->name) - 1] = '\0';
}// 其他 Setter 方法类似修改...// 打印信息方法增加空指针检查
void Person_print(const Person* p) {if (!p) {printf("错误:无效的 Person 指针\n");return;}// ... existing code ...
}其他建议:
模块化改进:
可以将结构体定义和函数声明放在头文件中
将实现放在单独的 .c 文件中
功能扩展:
可以添加验证函数(如验证年龄范围、电话号码格式等)
可以添加序列化/反序列化功能
可以添加比较函数用于排序
错误处理机制:
可以定义错误码枚举
添加错误信息返回机制
命名空间模拟:
可以使用前缀更明确的命名约定,比如 PersonManager_create()
不可变性考虑:
可以提供创建不可变对象的选项
为只读操作提供 const 正确性
这些优化可以让代码更加健壮和安全,虽然无法完全实现 C++ 的面向对象特性,但可以在 C 语言的限制下尽可能模拟面向对象的概念。
composer功能
在composer界面直接给cursor提需求,比如,让cursor帮忙生成一份综合安防管理平台的前端项目
cursor直接自动生成
以下是效果图
这个时候我就突发奇想,如果我把功能模块细化出来,是否能直接生成一份我想要的前端的demo
请在dist目录下帮我使用vue.js生成一份以综合安防管理为主题的前端代码,需要包含如下3个大的功能模块
1. 基础信息
2. 设备运维
3. 算法业务
然后在基础信息里面需要包含一个设备信息的模块,这个设备信息的模块需要以表格的形式展示如下信息:1 设备名称2 设备序列号3 设备验证码4 设备型号5 设备版本号6 设备出厂日期
然后设备运维模块下面有3个子模块分别为
2.1 网络设置
2.2 算法升级
2.3 日志管理
网络设置需要包含eth0和eth1这两个网卡设置的界面,算法升级需要包含本地升级的升级界面(上传一个升级包),日志管理需要支持日志的查看和日志的下载
然后算法业务下面需要包含以下几个模块
3.1 视频资源管理
3.2 任务管理
3.3 告警检索
3.4 算法参数配置
3.5 平台配置
其中视频资源管理需要包含视频流信息的增删改查,任务管理需要包含任务的开启和关闭,告警检索需要能够支持按照序列号查询,按照告警事件查询以及按照告警时间段查询的查询界面,算法参数配置需要包含对(口罩识别,帽子识别)算法的参数配置包括(告警时间间隔,算法阈值),平台配置需要包含2个第三方平台的设置包括(平台ip,平台端口,平台的url信息)
大家来看以下cursor的处理流程
1.1 生成文件结构
1.2 创建主应用流程
1.3 创建设备信息组件
1.4 网络设置组件
1.5 接下来cursor会主动询问我要不要继续生成剩余的组件
输入选项 1
实现一个组件后会继续询问你是否要实现剩余的组件
我在这里全部回复1
当cursor实现完全部的组件之后会询问你还有没有别的需要修改,我让cursor帮我美化了一下界面
cursor就会自动帮你美化
1.6 从最开始到这里,我并没有看到界面长什么样子,因为我找不到打开这个项目以及界面的方法。于是我询问cursor如何才能启动这个项目。
cursor自动又帮我创建了一些文件,我也不懂这些文件的作用是什么,接着cursor告诉我启动的方法。于是我去node.js官网安装了node.js,并且按照cursor的指示一路操作。
1.7 结果
整个界面的效果和咱们现有产品架构神似!!!
1.8 我们来试一下cursor提供的替换logo的功能
首先我应该要创建一个assets目录。然后把logo图片拷贝进去。
可以看到公司的logo真的就直接替换上去了。
让cursor帮忙生成一份golang的http服务器项目
请在当前目录下创建一个叫goHttp的目录,并在该目录下面生成一份golang语言开发的http服务器,使用gin框架实现,这个服务器应该具备以下几个http接口功能
1. 注册用户民密码
2. 根据用户名密码登录
3. 获取设备信息
4. 设置设备信息其中设备信息需要包含这几个字段(设备名称,设备序列号,设备生产日期,设备ip地址,设备类型)。
5. 设置eth0,eth1网卡信息
6. 获取eth0,eth1网卡信息网卡信息需要包含(mac地址,IP地址,子网掩码,dns网关)等信息
7. 获取日志文件
8. 下载日志文件
9. 接收告警信息并用sqlite3存储到本地文件,数据库名字叫做cursor.db,告警信息包含告警事件类型,告警图片名字,告警图片,发起告警的设备序列号等。
自动生成框架目录和代码
cursor并不会帮我安装这些依赖,需要我自己敲命令安装
继续实现其他控件
让cursor生成一份详细的注释
可以看到cursor生成的注释相当详细,堪称教科书
让cursor告诉我如何运行这个项目,cursor不但告诉我如何运行,连测试用例都帮你写好了
让我们运行一下看看
尝试运行的过程中出现报错,我们来看看cursor如何帮你纠错解决
你只需要把错误信息复制给他 ,然后他就自动帮你分析代码找到错误原因,并且自动生成解决方案然后给你解决bug。
再次运行发现成功
可以看到 8080端口确实处于LISTEN状态,此时此刻我都没有写任何一行代码
我们来按照cursor的提示测试一下他的接口
我们来看cursor生成的数据库里面确实多了一条用户记录,用户名是test,密码是一串密文,我们查看代码发现cursor已经帮你考虑到了这一点,使用哈希算法对明文做了加密。
我们来查看cursor生成的代码里面确实是有这一段,并且帮你写上了注释。不得不说做到这一步相当的强大。
总结
作为一个嵌入式linux c/c++软件工程师,第一次使用cursor让我感到十分震惊,他直接一步一步帮我实现了我想要的前端代码框架,并且告诉我如何运行。对于一个没有学过前端的人,如果直接借助cursor来帮我实现web的业务,并且用来对接自己写的后端服务,开发效率将大大提高,对于有一个有前端基础的人来说就是如虎添翼。使用cursor开发Golang的服务也相当简单,只需要提需求,cursor就自动帮你生成了一套框架代码,甚至直接能帮你实现需求。对于有golang基础的人来说可以极大的提高开发效率。