今天我们要聊一个特别有趣的话题 —— Cursor 的聊天功能。你知道吗?Cursor 有三个超级好用的功能:Tab(就像是你的代码小助手),提示栏(Cmd+K)(就像是一个随时准备帮你的编程老师),还有今天要说的 Chat(Cmd+L)(就像是一个无所不知的编程专家)。
想知道这个聊天功能有多厉害吗?让我们一起来看看!
记得我们之前说过,提示栏(Cmd+K)功能 主要是帮你处理一些明确的代码修改。而 Chat(Cmd+L) 呢,就像是一个万能的编程助手,什么问题都可以问它!
你知道为什么 Chat(Cmd+L) 这么特别吗?因为它可以和你聊天!就像和朋友聊天一样,当你遇到不太清楚的问题时,可以一来一回地交流,慢慢把问题说清楚。这就好比你在问路,如果对方第一次没听明白,你可以换个方式再解释一遍。
通过这样的对话方式,AI 就能更好地理解你的困惑,给出更有帮助的答案。就像一个耐心的老师,不断引导你找到最好的解决方法。
那么,什么时候用 Chat(Cmd+L) 最合适呢?我给你列几个常见的场景:
- 当你想学习新东西的时候(比如:“React 是什么?能给我解释一下吗?")
- 当你想知道怎么写更好的代码(比如:“这段代码可以写得更简单吗?")
- 当你的程序出错了,不知道怎么修复(比如:“为什么我的程序总是报错呢?")
基础功能
Chat 功能就像是一个超级版的 ChatGPT,但是专门用来帮你写代码。有什么编程问题,尽管问它!
不过,Cursor 的 Chat 可不是普通的聊天工具,它有两个特别厉害的本领:
- 可以用 @ 符号快速找到你想要的信息(就像在微信里@好友一样简单)
- 可以直接把 AI 给出的代码应用到你的项目中(用 Apply 按钮就行)
这些功能可是 Cursor 独有的哦!就连 ChatGPT 和其他编辑器都没有这么方便的功能。
Apply
先来看看 Apply 功能,这个功能特别好用!就像复制粘贴一样简单,可以把 AI 推荐的代码直接用到你的项目里。
用了 Apply 之后,你还可以看到代码改动的地方(就像看到修改前后的对比一样),如果觉得改得好,就点"接受”;如果觉得不合适,就点"拒绝”,就这么简单!
虽然 Apply 能力让聊天功能(Cmd+L)具有了代码修改
的能力,但是如果有明确
的代码修改需求,其实更推荐使用专门为代码修改设计的功能:
- 提示栏(Cmd+K): 擅长
局部
代码的修改能力 - Composer: 擅长
全局
跨文件的修改能力
基于 @ 的上下文引用
在Cursor的AI输入框中,比如在提示栏(Cmd K)、Chat 或 Composer 中,您都可以通过输入@符号来引用上下文。
值得说明的是在 Chat 和 Composer 中,@ 的上下文引用能力基本是一致的。
而在提示栏(Cmd+K)中,因为其功能主要是做局部代码的修改,其 @ 的上下文引用能力受到了一定的限制。
在AI辅助编程中,上下文的使用至关重要,这可以从AI解决问题的角度来理解:
AI自身的局限性:
- 虽然AI知道很多东西,但它也不是无所不知的。有时候,它可能对某些特定的技术领域不太了解。
问题的特殊性:
- 每个项目都有其独特的结构、逻辑和需求。没有上下文,AI 很难理解如何针对你当前项目的场景去解决这个问题。
合理使用上下文
怎么才能合理的使用上下文信息呢?
合理使用上下文信息就像给AI一个"小抄”。这个"小抄"要做到两点:
- 挑重点:只选择真正相关的信息,不要把无关的东西也塞进去。
- 适可而止:给的信息要够用,但也不要太多。太少了AI可能理解不了你的问题,太多了反而会让AI不知所措,产生幻觉的可能性会变大。
简单来说,就是要给AI恰到好处的信息,既不少也不多,这样AI才能最好地帮助你解决问题。
根据上下文从当前项目获取还是外部获取,可以将上下文信息的获取分成两类:
内部信息
外部信息
内部信息
内部信息的引用使得 Cursor 能够更好地理解和处理项目内部
的复杂性,从而获取最精准的回答。
Cursor 提供了多种内部信息引用方式,相对来看,其信息的承载范围从小到大依次是:
Code < Files ≈ Git < Folders < Codebase
这种逐步扩大的上下文范围设计,使得开发者可以根据问题的复杂度和影响范围,灵活选择最合适的上下文信息,从而获得更精准、更有价值的AI辅助。
Code/Files/Folders
直接根据字面的意思就能看出这三个分别代表了什么样的引用信息,根据需要选择合适的上下文范围:
- Code(代码片段):允许你引用当前文件中的特定代码片段
- Files(文件):让你引用整个文件的内容(包括图像文件)
- Folders(文件夹):使你能够引用整个文件夹中的所有文件
值得注意的是,当你使用 Files(文件)或 Folders(文件夹)级别的引用时,如果一个文件内容太多,Chat 不会一下子全部读取,而是会把文件分成小块。
然后,它会根据你的问题,挑选出最相关的部分。这样做可以让 Cursor 更快地回答你的问题,并且给出更准确的回答。
如果你就是想把整个文件或文件夹的内容都给到 AI,可以开启长上下文功能。
另外,你会发现在提示栏(Cmd+K)中,是不提供大范围的上下文引用能力的,比如 Folders 和 Codebase,Cursor 还是希望提示栏(Cmd+K)专注于局部代码的处理。
Git
Git 中携带的信息就像是代码的时间线,让你能清楚地看到代码是如何演变到现在这个样子的。
Cursor 提供了以下几种 Git 相关的上下文信息。
有了这些上下文信息,可以非常方便的对代码进行审查、优化、bug 修复:
-
PR(Diff of Main Branch):当前分支与主分支的 diff
-
待提交的修改(Commit:Diff with Working State):在你的 git 工作区中还没 add 的代码信息。
- 可以使用这个快速生成 git commit message
-
已提交的Commit:代码库中管理的所有 Commits
除了在聊天框中直接使用 @Git
引用信息外,还可以在 AI 面板(Panel)上使用 Review 功能
。
目前 Review 功能还在 Beta 阶段,需要在 Cursor 设置中打开。
Review 可以更方便的对 Git 中的 Commit 代码进行审查和优化。
在输入框中你可以输入自定义的代码 review 指令。
下面直接选择你要 review 的代码上下文,和 @Git
提供的类似。
Codebase
@Codebase
是 Cursor 提供的一个强大功能,它允许 AI 扫描整个代码库来提供更全面的上下文和建议。
这个功能特别适合处理大型项目或需要跨文件分析的情况。
想象一下,就像是你在一个大图书馆里找书,@Codebase
就是你的图书管理员,它知道每本书在哪里,内容是什么。
你知道吗?@Codebase
其实用了一个很厉害的技术,叫做 RAG。它就像是给你的代码做了一个详细的目录,把所有文件都整理好,放在你的电脑里,随时可以查找。
在 Cursor 的设置里,你可以看到你的"代码图书馆"整理得怎么样了:
在 Chat 里使用 @Codebase
的时候,你有两种方式可以选择:
第一种叫 embedding 模式,就像是快速查字典一样,直接找到最相关的内容给你看。
第二种叫 reranker 模式,这个更厉害一些,它不仅会找到相关的内容,还会仔细想一想,把最有用的信息排在前面给你看。就像是一个认真的助教,不仅帮你找资料,还帮你整理好了。
我自己试过很多次,发现当你想要全面了解一个项目的时候,用 reranker 模式效果会更好哦!
外部信息
除了项目里的信息,有时候我们还需要查看外面的资料,这就像是让 AI 不只看教科书,还要看看外面的世界。这样 AI 就能知道更多东西,给你更好的帮助。
Cursor 给我们提供了两个好帮手:@Doc
和 @Web
,就像是两个图书馆管理员,一个负责技术文档,一个负责互联网资料。
Doc
@Doc
就像是你的专业文档管理员。比如说,你在用 React 写代码,但是忘记了某个功能怎么用,这时候就可以用 @Doc
来查看 React 的说明书。
Cursor 已经帮我们准备好了一些常用的文档,比如 React 的说明书:
如果你需要其他的文档,也可以自己添加。就像是在图书馆里添加新的书籍一样简单:
你只需要告诉 Cursor 文档在哪里(给一个网址),它就会自动帮你把所有相关的资料都收集好。
Web
@Web
就像是你的互联网助手,可以帮你在网上搜索资料。
最简单的用法就是在聊天的时候输入 @Web
,它就会自动去网上找相关的信息,就像是你有一个随时准备帮你查资料的好朋友。
你也可以直接告诉它要看哪个网页,只需要输入网址就行了:
上下文模版 - Notepad
Notepad 是一个特别贴心的功能,就像是你的私人笔记本。你可以把常用的信息都记在里面,需要的时候随时翻出来看。
用 Notepad,你可以:
- 把重要的东西记下来:比如项目是做什么的、代码要怎么写、常用的代码片段等等
- 随时查看笔记:不管是在聊天的时候,还是用 Composer 的时候,都可以很方便地看到你记的笔记
Notepad 最棒的地方在于,它可以帮你把所有重要的信息都整理好。这样不仅可以让你和 AI 聊天更有效率,还能确保 AI 总是知道你项目的背景,给出最合适的建议。
在 Notepad 里,你现在可以写文字,也可以引用文件。不过,要是能支持更多种类的引用就更好了,比如能把我们前面说的各种引用方式都用上。
总结
Chat(Cmd+L) 就像是一个超级厉害的编程助手,不管你遇到什么问题,它都能帮你:
- 简单的代码问题?没问题!
- 复杂的项目讨论?也不怕!
记住一点:要想让这个助手帮你更好,就要学会给它提供足够的信息(也就是上下文),这样它才能完全发挥它的本领!