阅读(154) 书签 (0)

使用 Chat(Cmd L)功能解决通用问题

2024-11-22 15:14 更新

Chat(Cmd+L) 功能适合什么样的使用场景?你知道怎么在 Chat 中合理的使用上下文吗?


作者 鸟飞鱼跃 and 原文链接


Cursor提供的三大基础功能 Tab, 提示栏(Cmd+K), Chat(Cmd+L),已经介绍了两个,今天介绍最后一个 Chat(Cmd+L) 功能。

首先来看一下,Chat(Cmd+L) 功能适合什么样的使用场景?

之前的文章 提示栏(Cmd+K)功能 介绍过,Chat(Cmd+L) 功能主要负责​通用的问题​的解决。


1


Chat(Cmd+L) 提供了多轮对话的方式,当你遇到比较抽象或不明确的问题时,一次回答可能解决不了所有疑问。

通过多次对话,AI可以逐步弄清楚问题的细节,给出更准确和全面的答案。这种对话方式不仅能帮你更好地理解问题,还能引导你找到最好的解决方案。

所以 Chat(Cmd+L) 功能非常适合以下的场景:

  1. 解答编程概念问题,学习新技术或框架
  2. 获取代码建议和最佳实践
  3. 调试和错误排查


基础功能

就像 ChatGPT 聊天窗口一样,Cursor 的 Chat 功能提供了最灵活的编程辅助能力。任何问题,你都可以在这里提问。

2


但是有两个关键的不同点是,Cursor提供了:

  1. 基于@的​上下文快速引用能力
  2. 代码修改的 ​Apply​ 能力

这些功能是 Cursor 的独特之处。不仅 ChatGPT 没有这些功能,就连其他的代码编辑器也没有提供类似的能力。


Apply

首先来看一下 Apply 功能,这个功能很方便,可以轻松地把 AI 在聊天中给出的代码建议直接用到你的项目中。

3


应用代码块后,可以查看修改的 diff 内容,可以直接点击聊天窗口中代码块右上角的"接受"或"拒绝"按钮来快速处理。

4


虽然 Apply 能力让聊天功能(Cmd+L)具有了代码修改的能力,但是如果有明确的代码修改需求,其实更推荐使用专门为代码修改设计的功能:

  1. 提示栏(Cmd+K): 擅长​局部​代码的修改能力
  2. Composer: 擅长​全局​跨文件的修改能力


基于 @ 的上下文引用

在Cursor的AI输入框中,比如在提示栏(Cmd K)、Chat 或 Composer 中,您都可以通过输入@符号来引用上下文。

5


值得说明的是在 Chat 和 Composer 中,@ 的上下文引用能力基本是一致的。

而在提示栏(Cmd K)中,因为其功能主要是做局部代码的修改,其 @ 的上下文引用能力受到了一定的限制。

在AI辅助编程中,上下文的使用至关重要,这可以从AI解决问题的角度来理解:

AI自身的局限性:

  • 虽然AI知道很多东西,但它也不是无所不知的。有时候,它可能对某些特定的技术领域不太了解。

问题的特殊性:

  • 每个项目都有其独特的结构、逻辑和需求。没有上下文,AI 很难理解如何针对你当前项目的场景去解决这个问题。


合理使用上下文

怎么才能合理的使用上下文信息呢?

合理使用上下文信息就像给AI一个"小抄"。这个"小抄"要做到两点:

  1. 挑重点:只选择真正相关的信息,不要把无关的东西也塞进去。
  2. 适可而止:给的信息要够用,但也不要太多。太少了AI可能理解不了你的问题,太多了反而会让AI不知所措,产生幻觉的可能性会变大。

简单来说,就是要给AI恰到好处的信息,既不少也不多,这样AI才能最好地帮助你解决问题。

根据上下文从当前项目获取还是外部获取,可以将上下文信息的获取分成两类:

  1. 内部信息
  2. 外部信息


内部信息

内部信息的引用使得 Cursor 能够更好地理解和处理项目内部的复杂性,从而获取最精准的回答。

Cursor 提供了多种内部信息引用方式,相对来看,其信息的承载范围从小到大依次是:

Code < Files ≈ Git < Folders < Codebase

这种逐步扩大的上下文范围设计,使得开发者可以根据问题的复杂度和影响范围,灵活选择最合适的上下文信息,从而获得更精准、更有价值的AI辅助。


Code/Files/Folders

直接根据字面的意思就能看出这三个分别代表了什么样的引用信息,根据需要选择合适的上下文范围:

  1. Code(代码片段):允许你引用当前文件中的特定代码片段
  2. Files(文件):让你引用整个文件的内容(包括图像文件)
  3. Folders(文件夹):使你能够引用整个文件夹中的所有文件

值得注意的是,当你使用 Files(文件)或 Folders(文件夹)级别的引用时,如果一个文件内容太多,Chat 不会一下子全部读取,而是会把文件分成小块。

然后,它会根据你的问题,挑选出最相关的部分。这样做可以让 Cursor 更快地回答你的问题,并且给出更准确的回答。


6


如果你就是想把整个文件或文件夹的内容都给到 AI,可以开启长上下文功能。

另外,你会发现在提示栏(Cmd+K)中,是不提供大范围的上下文引用能力的,比如 Folders 和 Codebase,Cursor 还是希望提示栏(Cmd+K)专注于局部代码的处理。


Git

Git 中携带的信息就像是代码的时间线,让你能清楚地看到代码是如何演变到现在这个样子的。

Cursor 提供了以下几种 Git 相关的上下文信息。

7


有了这些上下文信息,可以非常方便的对代码进行审查、优化、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 设置中打开。

8


Review 可以更方便的对 Git 中的 Commit 代码进行审查和优化。


9


在输入框中你可以输入自定义的代码 review 指令。

下面直接选择你要 review 的代码上下文,和 ​@Git ​提供的类似。


Codebase

@Codebase​ 是 Cursor 的一个强大功能,它允许 AI 扫描整个代码库来提供更全面的上下文和建议。

这个功能特别适合处理大型项目或需要跨文件分析的情况。

其实​@Codebase​的原理就是使用的RAG技术,它会把你当前项目的所有文件进行向量化处理,然后储存在本地。

在 Cursor 设置中你可以看到当前项目的代码库索引状态:

10


Chat 中的 @Codebase,提供了两种搜索模式:

11


embedding 模式和 reranker 模式。

embedding 模式就是直接在本地的向量化库中进行搜索,把搜索最相关的前几个 chunk 信息带入请求的 message 中,然后返回 给用户结果。

reranker 模式则是多了重排序和思考的步骤,更复杂一些。

12


经过本人测试 reranker 模式效果在梳理总结项目更为全面的信息时​效果更好​。


外部信息

外部信息的获取在 AI 辅助编程中非常重要。

它就像是给 AI 开了一扇窗,让 AI 能看到更大的世界。有了这些信息,AI 不再局限于项目内部,而是能获取最新、最相关的知识。

Cursor 主要提供了 ​@Doc​、​@Web​ 这两个快速获取外部信息的方式。

Doc

在 Chat 中使用@Doc,可以引入文档来拓宽 AI 的知识面。

比如当前项目使用了某个特定的技术栈,你可以指定某个版本或者最新版本的技术文档,来满足你当前的技术栈要求。

Cursor 提供了一些常用的内置文档,比如React相关的技术文档。

13


在设置中,你也可以手动引入你需要的外部文档。

14


你提供文档的 URL,Cursor 会自动帮你抓取所有的关联的文档。


Web

@Web​ 功能允许 Chat 在回答问题时搜索和引用网络上的信息。

最直接的使用方式就是直接在 Chat(Cmd+L) 中使用 @Web,这样会自动搜索相关的网络信息。

15


另外可以@网址,引入单个页面信息。

16


上下文模版 - Notepad

Notepad 是 Cursor 提供的一个强大的上下文模板功能。它就像是你的个人笔记本,可以在其中保存各种信息,然后在需要时轻松引用。

17


使用 Notepad,你可以:

  • 自定义上下文:在 Notepad 中输入任何你认为重要的信息,比如项目背景、编码规范或常用代码片段。
  • 灵活引用:无论是在 Chat 还是 Composer 中,你都可以方便地引用 Notepad 的内容。

18


Notepad 的优势在于它提供了一种统一且个性化的方式来管理和使用上下文信息。这不仅能提高你与 AI 交互的效率,还能确保 AI 始终了解你的项目背景和需求,从而提供更准确、更相关的帮助。

在 Notepad 中,你可以输入文字信息,以及引用文件来构建上下文模版。

但是我理想的情况是 Notepad 应该支持更多的引用类型,在 Notepad 中可以组合我们上面介绍的各种引用类型。


总结

总的来说,Chat(Cmd+L) 是一个非常强大的工具,能够帮助你应对各种编程场景,从简单的代码问题到复杂的项目讨论都能应付自如。

最重要的是要合理的使用上下文信息,才能发挥它最大的能力。