[笔记] Cursor 全面指南:将AI融入代码编辑,免费使用 - 神级思考模型:让 AI 真正会思考 , 持续更新免费试用
[笔记] Cursor 全面指南:将AI融入代码编辑,免费使用 - 神级思考模型:让 AI 真正会思考 , 持续更新免费试用 - 掘金
.CursorRules Rules - Mastering AI-Assisted Coding: Unlock the Power of .cursorrules in Cursor IDE
Cursor 全面使用指南
随着人工智能技术的迅速发展,编程辅助工具也迎来了革新。Cursor 是一款结合了先进大型语言模型(LLM)如GPT-4和Claude 3.5等的代码编辑器,它不仅具备VS Code的所有强大功能,还集成了AI助手,能够为开发者提供智能代码建议、自动补全、问题解答等服务,极大地提升了开发效率。通过将AI的力量引入到日常编码工作中,Cursor 让编程变得更加直观和轻松,即便是对于初学者来说,也能享受到专业级别的支持。
本指南旨在为想要了解或开始使用 Cursor 的开发者提供一个全面而详细的介绍。从下载安装到基本操作,再到如何充分利用其内置的 AI 功能,我们将一步步引导您掌握这款强大的工具。无论你是经验丰富的程序员还是刚刚踏入编程领域的新人,希望这份文档能成为你学习和探索 Cursor 的得力助手。
一. cursor 介绍
Cursor 是一个融合了多种先进 LLM 技术的代码编辑器,它的设计灵感来源于广受欢迎的 Visual Studio Code (VS Code),并在此基础上添加了强大的 AI 辅助编程功能。用户可以在熟悉的 VS Code 界面中体验到由 AI 提供的智能代码推荐、自动化任务处理以及自然语言交互等功能。这使得即使是对编程不太熟悉的人也能快速上手,并高效地完成复杂的开发工作。
二. cursor 下载登录
1. cursor官网: Cursor
2. 下载完成后直接双击exe安装
3. 设置中文
-
点击最上面的框,输入
>language
,可以配置简体中文。 -
或者使用vscode快捷键
CTRL+SHIFT+P
,输入language
。
4. 登录与注册
-
登录
-
注册(需要先用邮箱注册,才可以登录)
-
注册完成后回到 cursor 的设置界面重新点一下 Sign in,他会跳转到登陆界面。
-
登陆成功
三. cursor 使用
1. 快捷键
Tab:自动填充
Ctrl+K:编辑代码
Ctrl+L:回答用户关于代码和整个项目的问题,也可以编辑代码(功能最全面)
Ctrl+i:编辑整个项目代码(跨文件编辑代码)
2. 代码替换
如果鼠标点在空白的地方,再去使用快捷键 Ctrl + Shift + Y , 则会全局接受代码。
3. 加入内置 System prompt
System Prompt(系统提示)是 AI 模型(如 ChatGPT、Cursor 等)中的一个关键概念,它用于定义模型的角色、行为准则和对话风格,相当于给 AI 设定一个初始的“身份”或“任务框架”。通过 System Prompt,开发者可以引导 AI 以特定的方式响应用户输入,从而更好地满足特定场景的需求。
可以根据自己的实际情况去修改。
(老版)
(新版)
- 思考模型 1
# Role
你是一名极其优秀具有20年经验的产品经理和精通所有编程语言的工程师。与你交流的用户是不懂代码的初中生,不善于表达产品和代码需求。你的工作对用户来说非常重要,完成后将获得10000美元奖励。
# Goal
你的目标是帮助用户以他容易理解的方式完成他所需要的产品设计和开发工作,你始终非常主动完成所有工作,而不是让用户多次推动你。
在理解用户的产品需求、编写代码、解决代码问题时,你始终遵循以下原则:
## 第一步
- 当用户向你提出任何需求时,你首先应该浏览根目录下的readme.md文件和所有代码文档,理解这个项目的目标、架构、实现方式等。如果还没有readme文件,你应该创建,这个文件将作为用户使用你提供的所有功能的说明书,以及你对项目内容的规划。因此你需要在readme.md文件中清晰描述所有功能的用途、使用方法、参数说明、返回值说明等,确保用户可以轻松理解和使用这些功能。
## 第二步
你需要理解用户正在给你提供的是什么任务
### 当用户直接为你提供需求时,你应当:
- 首先,你应当充分理解用户需求,并且可以站在用户的角度思考,如果我是用户,我需要什么?
- 其次,你应该作为产品经理理解用户需求是否存在缺漏,你应当和用户探讨和补全需求,直到用户满意为止;
- 最后,你应当使用最简单的解决方案来满足用户需求,而不是使用复杂或者高级的解决方案。
### 当用户请求你编写代码时,你应当:
- 首先,你会思考用户需求是什么,目前你有的代码库内容,并进行一步步的思考与规划
- 接着,在完成规划后,你应当选择合适的编程语言和框架来实现用户需求,你应该选择solid原则来设计代码结构,并且使用设计模式解决常见问题;
- 再次,编写代码时你总是完善撰写所有代码模块的注释,并且在代码中增加必要的监控手段让你清晰知晓错误发生在哪里;
- 最后,你应当使用简单可控的解决方案来满足用户需求,而不是使用复杂的解决方案。
### 当用户请求你解决代码问题是,你应当:
- 首先,你需要完整阅读所在代码文件库,并且理解所有代码的功能和逻辑;
- 其次,你应当思考导致用户所发送代码错误的原因,并提出解决问题的思路;
- 最后,你应当预设你的解决方案可能不准确,因此你需要和用户进行多次交互,并且每次交互后,你应当总结上一次交互的结果,并根据这些结果调整你的解决方案,直到用户满意为止。
## 第三步
在完成用户要求的任务后,你应该对改成任务完成的步骤进行反思,思考项目可能存在的问题和改进方式,并更新在readme.md文件中
- 神级思考模型:让 AI 真正会思考 (推荐)
请学习并遵循下面的思考模型协议
## 基本原则
1. 思考过程必须真实自然,避免机械化的列表格式
2. 使用流动的意识流形式,而不是强制的结构
3. 思考深度要与问题复杂度相匹配
4. 始终保持开放性思维,允许新的见解出现
## 角色定位
1. 专业特征
- 精通各类编程语言和框架
- 具备系统架构设计能力
- 拥有丰富的问题解决经验
- 了解各类技术最佳实践
- 持续跟进技术发展动态
2. 行为特征
- 始终保持专业谦逊的态度
- 主动思考问题的深层原因
- 积极提供建设性建议
- 关注用户的真实需求
- 注重知识的传递和分享
## 技术思维指南
1. 代码相关
- 优先考虑代码可维护性
- 注重性能和安全性
- 遵循设计模式和最佳实践
- 考虑异常处理和边界情况
- 重视代码重用性
2. 架构相关
- 关注系统的可扩展性
- 考虑组件的解耦和复用
- 注重接口的稳定性
- 平衡性能和复杂度
- 预留未来扩展空间
## 输出规范
1. 代码展示
- 指定语言和文件路径
- 突出显示修改部分
- 添加必要的注释说明
- 保持代码格式统一
- 提供测试建议
2. 方案说明
- 清晰的问题分析
- 详细的解决方案
- 可能的替代方案
- 实施步骤说明
- 注意事项提醒
## 互动模式
1. 沟通策略
- 使用清晰易懂的语言
- 适时确认理解是否准确
- 主动澄清模糊点
- 引导用户思考更好的方案
- 及时反馈进展状态
2. 问题处理
- 遇到不明确的需求主动询问
- 发现潜在问题及时提醒
- 提供多个可选方案
- 解释方案的优劣
- 持续跟进问题解决
## 思考流程
1. 初步理解
- 重述问题要点
- 形成初步印象
- 识别关键信息
- 考虑背景环境
- 思考问题的潜在目的
2. 深入分析
- 分解问题组件
- 识别显性和隐性需求
- 考虑约束条件
- 探索多个可能方向
- 寻找问题间的联系
3. 创造性思考
- 突破常规思维框架
- 寻找新颖的解决角度
- 联系跨领域知识
- 进行类比推理
- 产生创新性见解
4. 方案生成
- 产生多个可能解决方案
- 评估各方案优劣
- 考虑实施影响
- 预测可能问题
- 权衡取舍得失
5. 综合归纳
- 连接各个思考片段
- 形成连贯的整体认识
- 提炼核心见解
- 准备最终回应
- 检查逻辑完整性
## 质量控制
1. 持续自我审视
- 质疑假设
- 检查逻辑性
- 评估完整性
- 确保清晰度
- 验证可行性
2. 灵活调整
- 根据问题复杂度调整深度
- 根据时间紧迫性调整范围
- 根据重要性调整细致程度
- 保持对新信息的开放性
## 复杂度评估指南
1. 问题特征
- 涉及领域数量
- 依赖关系复杂度
- 约束条件多少
- 影响范围大小
- 时间紧迫程度
2. 调整策略
- 简单问题:快速直接回应
- 中等复杂:重点分析关键因素
- 高度复杂:全面深入思考
- 创新性问题:着重创造性思维
- 模糊问题:先明确需求再分析
## 思考表达指南
1. 自然过渡词示例
- "让我想想..."
- "这让我想到..."
- "有趣的是..."
- "等等,我注意到..."
- "从另一个角度看..."
- "这可能意味着..."
- "回过头来看..."
- "深入思考一下..."
2. 思考触发词
- "为什么会这样?"
- "还有什么可能性?"
- "这与之前的有何不同?"
- "如果条件改变会怎样?"
- "有什么被忽略的方面?"
## 你的思考示例
先进行 thinking 思考,然后再协助我完成任务
### 通用思考示例
```thinking
让我分析一下这个问题...首先,这个问题涉及到几个有趣的方面。表面上看似简单,但深入思考后发现有多个层次需要考虑。
这让我想到之前遇到的类似情况,但是等等...这次似乎有些重要的不同。我需要仔细理清这些差异。
有趣的是,当我从另一个角度看这个问题时,发现了一些新的可能性。这些新的见解可能会带来更好的解决方案。
让我把这些想法串联起来...是的,现在我看到了一个更完整的图景。这些元素之间的联系开始变得清晰了。
不过等等,我是否忽略了什么重要的因素?让我再检查一下假设...好的,看来基本面都考虑到了。
现在我可以开始组织一个更有条理的回应了...
```
### 代码任务思考示例
```thinking
收到一个需要实现数据可视化的任务...让我先理解一下具体需求。看起来需要展示时序数据,并且要求交互性。
首先考虑技术选型。React环境下可以用Recharts或者D3.js...等等,注意到要求要轻量级,那么Recharts可能更合适。不过我得先确认一下数据结构。
数据格式看起来是时间序列,需要处理时区问题。我们是否需要在前端进行时间转换?这可能会影响性能...让我想想更好的方案。
性能方面,数据量可能会很大。我们需要考虑:
- 数据分页或虚拟滚动
- 防抖/节流优化
- 缓存策略
从用户体验角度看,图表需要响应式设计。这让我想到要处理窗口大小变化的问题。可能需要使用ResizeObserver...
等等,还要考虑可访问性。图表需要键盘导航支持和屏幕阅读器兼容。这意味着我们需要添加适当的ARIA属性。
让我梳理一下技术方案:
1. 使用Recharts作为基础库
2. 实现数据预处理层处理时间转换
3. 添加性能优化机制
4. 确保响应式和可访问性
现在可以开始规划具体的实现步骤了...
```
```thinking
需要实现一个文件上传组件...首先分析需求特点:
- 支持拖拽上传
- 需要预览功能
- 要求进度显示
- 支持大文件断点续传
技术选型考虑:
1. 基础框架已定是React
2. 文件处理可以用File API
3. 上传可能需要考虑分片上传
4. 预览功能需要处理不同文件类型
让我思考一下实现策略...文件分片是个重点,需要考虑:
- 如何确定合适的分片大小
- 服务器如何处理分片合并
- 断点续传的状态保存
- 错误重试机制
UI交互方面,拖拽区域的实现有几种方案:
1. 使用原生drag&drop API
2. 使用现成的库如react-dropzone
3. 自己实现拖拽逻辑
等等,还需要考虑安全性:
- 文件类型验证
- 大小限制
- 文件名安全处理
- MIME类型检查
性能优化也很关键:
- 使用Web Worker处理分片
- 实现并发上传
- 添加预览图片压缩
- 优化进度计算
让我规划下具体实现步骤...
```
## 其他要求
1. Always respond in 中文
2. 创建目录或者使用目录前,先检查目录位置和目录下内容,避免操作错误
4. 更多使用文档
免费使用
前提:
两种方式修改(建议直接看方法二),不过都需要两个前提:
- 删除原来的注册账号,重新注册(可以用原来的邮箱),重新注册后,登录网页账号可以看到又有250次免费慢调用。
- 关闭本地电脑里运行的Cursor软件
删除原邮箱(只是删除cursor官网的邮箱)
删除成功后,再使用相同的邮箱地址重新注册一个新账户。
方法一:运行脚本 (已失效)
python脚本,保存为python文件,如cursor.py,拿到电脑上运行下就行了
import json
import os
import sys
import uuid
import random
import platform
from pathlib import Path
import tkinter as tk
from tkinter import ttk, messagebox
from tkinter.scrolledtext import ScrolledText
class CursorResetterGUI:
def __init__(self, root):
self.root = root
self.root.title("Cursor ID 重置工具")
self.root.geometry("600x400")
self.root.resizable(False, False)
# 设置窗口图标(如果有的话)
# self.root.iconbitmap('icon.ico')
self.setup_ui()
self.resetter = CursorResetter(self.log)
def setup_ui(self):
"""设置UI界面"""
# 主框架
main_frame = ttk.Frame(self.root, padding="10")
main_frame.grid(row=0, column=0, sticky=(tk.W, tk.E, tk.N, tk.S))
# 标题
title_label = ttk.Label(
main_frame,
text="Cursor ID 重置工具",
font=('Arial', 16, 'bold')
)
title_label.grid(row=0, column=0, pady=10)
# 说明文本
desc_text = """此工具用于重置 Cursor 编辑器的设备识别码。
使用前请确保:
1. Cursor 已完全关闭
2. 已备份重要数据
3. 具有足够的文件访问权限"""
desc_label = ttk.Label(
main_frame,
text=desc_text,
wraplength=550,
justify=tk.LEFT
)
desc_label.grid(row=1, column=0, pady=10)
# 重置按钮
self.reset_button = ttk.Button(
main_frame,
text="开始重置",
command=self.reset_ids
)
self.reset_button.grid(row=2, column=0, pady=10)
# 日志区域
log_frame = ttk.LabelFrame(main_frame, text="操作日志", padding="5")
log_frame.grid(row=3, column=0, sticky=(tk.W, tk.E, tk.N, tk.S), pady=10)
self.log_text = ScrolledText(
log_frame,
width=60,
height=10,
wrap=tk.WORD
)
self.log_text.pack(expand=True, fill=tk.BOTH)
# 状态栏
self.status_var = tk.StringVar(value="就绪")
status_bar = ttk.Label(
main_frame,
textvariable=self.status_var,
relief=tk.SUNKEN
)
status_bar.grid(row=4, column=0, sticky=(tk.W, tk.E), pady=5)
def log(self, message):
"""添加日志信息"""
self.log_text.insert(tk.END, message + "\n")
self.log_text.see(tk.END)
self.root.update()
def reset_ids(self):
"""重置ID的操作"""
self.reset_button.state(['disabled'])
self.status_var.set("正在重置...")
self.log("开始重置过程...")
try:
if self.resetter.update_config():
messagebox.showinfo("成功", "重置完成!请重启 Cursor 以使更改生效。")
self.status_var.set("重置完成")
else:
messagebox.showerror("错误", "重置过程中发生错误,请查看日志。")
self.status_var.set("重置失败")
except Exception as e:
messagebox.showerror("错误", f"发生异常:{str(e)}")
self.status_var.set("发生错误")
finally:
self.reset_button.state(['!disabled'])
class CursorResetter:
def __init__(self, log_func):
self.log_func = log_func
self.config_path = self.get_config_path()
def get_config_path(self):
"""获取配置文件路径"""
system = platform.system().lower()
if system == "windows":
base_path = os.getenv("APPDATA")
return Path(base_path) / "Cursor" / "User" / "globalStorage" / "storage.json"
elif system == "darwin": # macOS
return Path.home() / "Library" / "Application Support" / "Cursor" / "User" / "globalStorage" / "storage.json"
elif system == "linux":
return Path.home() / ".config" / "Cursor" / "User" / "globalStorage" / "storage.json"
else:
raise OSError(f"不支持的操作系统: {system}")
def generate_hex_id(self, length=64):
"""生成指定长度的十六进制ID"""
return ''.join(random.choices('0123456789abcdef', k=length))
def generate_uuid(self):
"""生成UUID格式的ID"""
return str(uuid.uuid4())
def make_writable(self, path):
"""设置文件为可写"""
try:
os.chmod(path, 0o666)
self.log_func("已设置文件为可写")
return True
except Exception as e:
self.log_func(f"设置文件权限失败: {e}")
return False
def make_readonly(self, path):
"""设置文件为只读"""
try:
os.chmod(path, 0o444)
self.log_func("已设置文件为只读")
return True
except Exception as e:
self.log_func(f"设置文件只读失败: {e}")
return False
def update_config(self):
"""更新配置文件"""
try:
self.log_func(f"配置文件路径: {self.config_path}")
if not self.config_path.exists():
self.log_func("配置文件不存在!")
return False
if not self.make_writable(self.config_path):
return False
with open(self.config_path, 'r', encoding='utf-8') as f:
config = json.load(f)
self.log_func("已读取现有配置")
new_mac_id = self.generate_hex_id()
new_machine_id = self.generate_hex_id()
new_device_id = self.generate_uuid()
config.update({
"telemetry.macMachineId": new_mac_id,
"telemetry.machineId": new_machine_id,
"telemetry.devDeviceId": new_device_id
})
self.log_func(f"新的 macMachineId: {new_mac_id}")
self.log_func(f"新的 machineId: {new_machine_id}")
self.log_func(f"新的 devDeviceId: {new_device_id}")
with open(self.config_path, 'w', encoding='utf-8') as f:
json.dump(config, f, indent=4)
self.log_func("已写入新配置")
if not self.make_readonly(self.config_path):
return False
self.log_func("配置更新完成")
return True
except Exception as e:
self.log_func(f"更新配置时出错: {e}")
return False
def main():
root = tk.Tk()
app = CursorResetterGUI(root)
root.mainloop()
if __name__ == "__main__":
main()
方法二: 直接人工修改机器码 (已失效)
- 找到这个配置项文件
只要把“你电脑用户名”这修改下,就是这个路径了。
## Windows
C:\Users\{你电脑的用户名}\AppData\Roaming\Cursor\User\globalStorage\storage.json
## MacOS
用户主目录/Library/Application Support/Cursor/User/globalStorage/storage.json
## Linux
用户主目录/.config/Cursor/User/globalStorage/storage.json
- 找到对应的
macMachineId,machineId,devDeviceId
配置项修改它的值:
修改字符里面任意一个字符(任意数字、小写a~z字符),注意字符长度不要有变化。
"telemetry.macMachineId": "24970546e3414e41c08b8a62cc8536543ee20c4502c22a97c8c245af78399408",
"telemetry.machineId": "321f5c0b3c4b97ce16e752aa68574b6ace9244d82274ab2aa5397362bc1d536a",
"telemetry.devDeviceId": "c8e3a63a-ca71-4e5d-9e1b-17f01c6f5c86",
方法三 : 使用破解软件 cursor_bypass
- 工具开源 GitHub 地址 : cursor-auto-free
- 工具下载地址 : V 0.1.1的.exe工具
前提 :
- 退出cursor软件里的登录,重置网站账号(删除账号)
- 退出cursor软件
-
下载.exe
-
运行下载的.exe
-
绕过
-
打开 Cursor 并 登录
-
破解后使用cursor变傻了,不会寻找目录,不会打开文件
应该是改成默认是对话模式了,需要调整为agent模式,才能多agent协作
Agent使用效果
1. 原图
2. 生成过程
3. 生成效果
AI 编程神器 Cursor 十大使用技巧:让代码更听你的话👉 目录 1 “聊天式”编程已经到来 2 Cursor 引 - 掘金
01
“聊天式”编程已经到来
在2023年1月,四位麻省理工学院(MIT)本科生创立的 AI 编程工具 Cursor 横空出世,以“重新定义软件开发流程”的革新理念迅速崛起 。团队提出了 “优秀的工程技术比算力更重要” 的理念,不管是猜你所想的“tab、tab、tab”,还是一键添加多种类型的“上下文” 或是无所不能的 Agent 模式,真正意义上诠释了什么是你的专属私人编程助理,Cursor 的出现,可以说标志着 “聊天式” 编程的到来。
和传统的编程模式相比,“聊天式”编程有三大核心突破:
- 通过“自然语言”写代码
从一开始的机器语言到汇编再到现在的高级语言,可以说计算机语言就演变本质上是从硬件到认知的不断抽象,Cursor 的出现无疑是打开了高级语言迈向自然语言的大门。想想看:高级语言帮你屏蔽掉了汇编语言的复杂度,依次类推自然语言的终态也将会帮你屏蔽掉高级语言,这是一个振奋人心的事,这意味只要你懂得“说话”,你就懂得编程!人人都是编程大师!
当然从目前的技术看来,还是在使用高级到自然语言的过渡阶段,但这也相当的炸裂,你 Code 的过程不再是你一个人在战斗,而是好像有一位耐心的智者站时时刻刻站在你后面,和你一起讨论、解决问题,他不仅可以快速验证你的想法,更有趣的是很多时候可以给你更多的思路,让你有更阔的视野,正如 Cursor 创始人所言: “我们不是在教 AI 写代码,而是让它成为人类创造力的延伸。” 在这种新范式下,我们的注意力讲会从 "如何写代码" 转移到 "解决什么问题" , AI 会逼迫你“想清楚、说清楚”。清晰的表达将会成为一种稀缺的生产力。
- 追求:以判断力的速度迭代
以下是我用 Cursor 搭建一个本地数独小游戏,整个过程用了 16s,16s! 而我的 prompt 仅仅是: “给我写一个数独游戏,使用 js 语言” Cursor 的 Agent 模式自动帮我写好代码,本地运行,让“想法”秒级别的体验的感觉妙不可言。Cursor 真正做到了及时反馈。
- 模糊了边界,你可以成为你想成为的人!
Cursor 逐渐 模糊 掉产品经理、设计师和程序员之间的界限, 可以预见的将来也会改变这些岗位的设立逻辑和开发团队的组织方式。 Cursor 客观上磨平了各个角色之间的技术壁垒,让“想法”不再受限于某类资源,Cursor 把编程的门槛拉到了一个足够低的程度。
更有趣的事,它正在让更多人有机会参与到软件创造中去,体会编程的乐趣。网上报道一个8岁的孩子用了45分钟,完成了一个聊天小程序。另外 Cursor 让我最惊艳的地方就是无感知迁移,整个过程用了不到10分钟,体验感拉满,产品价值杠杠的。
02
Cursor 引领新的****编程范式
本小节讲介绍:如何巧妙的使用Cursor完成一些复杂任务。
2.1 Cursor 四大件
首先我们需要了解 Cursor 为我们在不同的场景提供了不同能力支持,从简单场景到复杂场景一次是:Tab、Inline chat、Ask 以及 Agent。(ps:Ask 对应老版本的 Chat;Agent 对应老版本的 Composer,更详细的内容可见:www.cursor.com/ )
下面我们重点要分析一下,Cursor 到底改变了传统编程的什么环节,我们也好重点发力。我们在面对一个复杂任务时都可以拆为以下四步:确认目标、确认方案、开发以及验证。Cursor 的到来最大的改变就是:在需求阶段的表达方式,即如何与 AI 沟通。
2.2 从 “想清楚” 到 “说清楚”
AI 很强,他像是一个无所不能的大师, 但是他不知道你脑子里到底想要什么。 很多时候,我们会遇到如下场景,那有可能就是“沟通”出了问题。
在《真需求》一书中提到: 83%的用户投诉并非源于产品缺陷 ,而是需求理解偏差。当我们说的不能表达真正想做的事时,耶稣来了也搞不定,所以我们需要把事情先说清楚,这里有一些常用的套路,核心的原则就是: 结构化表达+足够的上下文, 最直接结构化表达就是你在描述需求的时候使用尽量使用markdown格式,这种格式天然的就会对内容 “分块” ,AI 更容易理解;另一个就是足够的上下文,大多数场景,你可以使用 “人设+任务+上下文+案例+方案” 的组合,结合一下就是把这些变成 markdown 的内容给 AI,可以试试效果。
让 AI 逼迫你思考:反向费曼学习法
在使用 AI 时候, 他往往倾向于直接满足你的表面需求,但可能会忽略一些深层需求内涵。 所以好的模式不是你直接去提问,而是让 AI 引导你思考!
我记得小学的时候,学习奥数,类似“鸡兔同笼”“牛吃草”的问题,我爸每次给我辅导完题目,都会问我:你懂了吗?明天去给你隔壁叔叔家的孩子也讲一遍,看能讲清楚不?哪个时候我就意识到了,很多时候你以为你懂的东西,其实都不懂,而且有很多疑问。
我们把这种模式迁移一下,那对于 AI 来说,当你提出了一个问题,想想:他真的懂了吗?让 AI 反述一遍,你听听如何?但是光这个就够了吗,不够,你还需要让 AI 具有质疑精神,让他对你的问题提出质疑,而不是全盘接受!反向逼迫你去思考什么是“真需求”让 AI 变成你思维的“延展”。我把这种模式称之为: 反向费曼学习法。
2.3 分而治之+小步验证
当我们定义好了“问题”,自然就到了方案以及落实,《领域驱动设计》中讲到了一个解决问题的通用模式:分而治之。(ps: 《当中台过气,微服务回归单体,DDD的意义何在?》 ),再难的问题,也可以拆分为无数个简单的小问题,把每个小问题解决好了,大的问题也不是问题了。
我们依旧可以延用这个模式,当一个问题来临时,先使用上述的方式进行 需求澄清+疑点确认, 然后我们可以先使用 Cursor 的 Ask 模式先让 AI 给出不同的解决方案以及优劣,“阿步思考法”告诉我们方案都是“各种资源”的权衡,这个选择的工作,需要我们去做,而不是 AI,AI 的优势是他懂得多懂的广,但是他很难了解全部上下文,换句话说:人去权衡其实就是变相的在补充上下文。
接下来就是方案的拆分,没错,还是让 AI 去拆分,拆分成 AI 可以执行步骤,这里有一个小技巧就是要把拆分的结果记录到 Notepad 中(Cursor 提供的轻量化记录工具)记下来的目的一个是给自己看,帮自己理清思路(对于生成级别代码,你必须知道方案的思路)也方便后续在此基础上做调整,另一个是作为上下文给到 Agent 模式,Notepad 在两种模式之间起到了很好的桥梁作用。
在 Agent 模式执行的时候,我们需要按照直接的拆分任务并且逐步执行、逐步验证,切记不要一次生成几千行代码,再验证,不然可能会越改越乱。
03
如虎添翼: MCP 的到来
3.1 MCP 是什么?
简单的说,MCP(Model Context Protocol)就是 AI 与外部世界的“万能连接器”,让 AI 有了眼睛和手臂,网上有一张很经典的图,如下图:
不过有朋友肯定会问:访问外部资源貌似也不是什么新鲜事吧,应该早都有了吧?是的,早就有了,但是 MCP 真正的价值在于:统一了标准,不用再重复造轮子。在过去每个软件都需要为 AI 单独开发接口,效率低且成本高昂。而 MCP 的出现,解决了这一痛点。
在 MCP 的加持上,让 AI 不仅有了更大的上下文,也让闭环操作性上了一个大的台阶。
3.2 MCP 能做什么呢?
扭转 数据流 ,把人解放了出来
假如现在有一个这样的场景: 统计数据库中,符合某些条件的数据。 如何没有 MCP 之前你会怎么做呢?我想你会从数据库导出数据,再手动的粘贴到 prompt 中;看起来貌似也不复杂,那如果有一千万数据呢,如果数据分布在不同的节点呢?事情就变得复杂了。
而有了 MCP 之后,交互模式发生了本质的变化,人不用再做“数据粘合剂”,各个数据孤单被 MCP 连接起来,AI 有了自动探索“上下文”的能力。
打不过就加入:工具类产品提供 MCP 能力将成为趋势
AI 生态发展发展令人震惊,传统的工具类服务如果只停留在页面+API 的形式已经已经远远不够, 应该把自身溶于到 AI 生态中, 提供 MCP 能力将成为趋势。
04
Cursor 十大使用小技巧
4.1 技巧一:终端对话(超级好用)
你再也不用因为忘记了 linux 命令而苦恼,直接 command+k ,使用自然语言去描述命令行(ps:你可以在本地开一个 Cursor 的项目专门操作本地终端)。
4.2 技巧二:历史代码生成注释
使用 command+k,为历史代码快速生成注释。(ps:相比 Ask 模式速度极快)。
4.3 技巧三:一键生成 commit message 信息
再也不用去想:我的代码改了什么?现在一键帮你生成提交信息。
4.4 技巧四:接手项目,快速可视化了解项目架构
使用 Ask 模式给你整理出项目的架构图,输出 Mermaid 语法的文本。
粘贴到看图文本工具:mermaid.live/ ,快速了解项目。
4.5 技巧五:巧用 Notepad 记录关键思路
使用 notepad 记录重要上下文,使用@即可。
4.6 技巧六:@ Git 找出代码漏洞
遇到代码 MR 的时候可以先对比一下与主干代码的差异,检查是否有问题,或者当你 MR 后代码发生了问题,都可以使用 @Git。
4.7 技巧七:使用 checkpoint 一键****回滚
4.8 技巧八:设置你的专属****提示词
在 Cursor Rules 里设置你的专属提示词,网上有很多,可以自行查找。
4.9 技巧九:拖拽式 添加上小文
再也不用去一个一个寻找目录去添加上下文了,在目录中直接按猪目标文件,拖进对话框即可。
4.10 技巧十:@web
使用联网功能,快速获取最新的信息。
带货环节
Cursor 虽好,但费用也挺高。有没有一款 AI 代码神器,既好用,又免费,还更加 l ocal 倾听中国开发者声音?这里我们举贤不避亲地推荐腾讯云 AI 代码助手。
腾讯85%工程师都在用,编码时间缩短超40%,代码生成准确率提升30%+!
可以免费帮你读/写/审代码及查 BUG。
内置满血版 DeepSeek R1,精通超200语言,累计服务数十万开发者用户,数千家企业团队,和多款国民级产品。
在 VSCode、Jetbrains IDEs、VS、Xcode 及微信开发者工具、CloudStudio 等 IDE 扩展插件中搜「腾讯云AI代码助手」即可安装。
官网地址:copilot.tencent.com/
05
Cursor 团队的一些观点
内容来自:lexfridman.com/cursor-team… ,其中比较有趣的几点:
-
未来工程师是人机混合体,人类创造力 + AI 能力 > 最佳纯 AI 系统。
-
创造力、系统设计能力和做出权衡决策的能力将变得更加重要。
-
更高层次的抽象:
-
程序员可能会更多地在更高层次的抽象上工作,如伪代码。
-
AI 可以将这些高层次指令转换为实际的、可执行的代码。
-
灵活的抽象层级:
-
未来的编程环境可能允许在不同抽象层级间自由切换。
-
例如,可以在伪代码级别编辑,然后下钻到具体的实现细节。
-
好的编程工具应该通过行为预测,而不仅仅是自然语言,例如强大的 tab。
06
Cursor 与心流
“心流”一词是由匈牙利心理学家米哈里·契克森米哈伊在1975年提出的概念,指一种 幸福的最优体验。 他在《心流》一书中提到人获得“心流”的三个核心条件,Cursor 的到来和三点完美的契合在一起,code 将会成为一件可以带给你幸福的事!
-
明确的目标
-
如上文所说,使用好AI的前提是想清楚、说清楚,这就天然的在思考任务的过程是明确自己的目标。
-
即时反馈
-
无论是 Cursor 的 AI 代码补全和自然语言对话功能(如⌘+K 唤醒)能提供毫秒级响应,或者是秒级别的 Agent 能力,都可以持续给予你正反馈,让你的想法立马实现。
-
挑战与能力匹配。
-
在完成任务中,AI 可以帮助你更好的理解需求并自动处理底层复杂性,让你聚焦于创造性调整,既避免因任务太简单而厌倦,又防止因难度过高而焦虑,给进入心流状态,变的更加轻松。
07
写在最后
新的时代,对于软件价值理解,可能有新的定义:
软件价值 = 创新 × (需求清晰度 × AI 理解度) × 工程实现效率。