Cursor

试用 Cursor 以后。就这?

Warning

本篇文章有较多的个人主观观点。劝阻他人使用自己喜爱的产品并非作者意图。

Cursor 一时可谓洛阳纸贵。这是一个基于 VS Code 二次开发,深度整合了 AI 功能的代码编辑器。本来并不看好它,在友人多次推荐下,还是尝试在最近的数据分析代码上试用一下,结果不幸还是令人血压升高。

尝试

抱着比较高的期望,感觉 Python 和 JavaScript 这种常见语言对于 Claude 3.5 Sonnet 来说应该没什么压力,于是尝试通过聊天交互让它写 R。大概的需求是这样:

  • 对于一个 data.frame
  • 根据自然语言确定正确的 filter
  • 根据自然语言确定回归因变量和自变量,其中自变量用了笼统的“所有相关的自变量”这样的说法
  • 自变量存储在 a, b, c 三列,另有一列 bc 存储了 bc 拼接起来的组合项

期望的代码和上文的代码只差一行,只是把 filter 里面的(唯一)条件从 TRUE 变成了 FALSE。由于描述较为模糊,Cursor AI 选错了条件所在的列,同时自变量选取了 a, b, bc 三列,有点匪夷所思。不过情有可原,毕竟指令不完全清楚明白。

于是换用 Python 再试一下大家称赞的修改代码功能,尝试让 Cursor AI 来修改近似如下所示的代码:

def translate(op, side):
  op_latex = ""
  match op:
    case "or":
      return r"\lor"
    case "imply":
      return r"\to"

提示词是:”Assign LaTeX translate result to op_side“,结果 Cursor AI 给出的修改是:

def translate(op, side):
  op_latex = match op:
    case "or":
      r"\lor"
    case "imply":
      r"\to"

这不是符合语法的 Python 代码😵‍💫。

思考

这样两个例子下来,我是不会愿意再为这样的工具支付 20 美元的月费了。Cursor 的卖点是多光标编辑、LLM 代码编辑,还有聊天交互。

第一个批量修改代码的时候还有些用处——但 LLM 真的能比你的搜索更准确地发现所有要修改的地方吗?第二个违背自回归模型的原理,一定只是把大段生成结果拿去 diff 处理了一下。至于第三个——聊天——我觉得这有些违反人机交互的常理。我们为什么要使用 AI 辅助代码编辑?因为我们不想把大段的代码拷贝进聊天机器人,和它们详细解释我的需求,再把它们的代码修改成符合我的风格的代码。一个好的 AI 辅助代码编辑系统应该是无感的,作为程序员:

  • 我不需要指出哪些代码或文本是有用的。LLM 应该能获取到第三方依赖、当前词法作用域以及代码库中常用词的信息。
  • 我不需要额外描述我的需求。只要有准确的函数名或者注释,LLM 应该能参考上下文准确地理解到我的意图,建议相关的代码。
  • 我不需要修改 AI 的输出。它输出的东西应当是准确且符合我的风格的,没有发生幻觉,使用不存在的 API。这对于类型系统孱弱的 Python 来说是至关重要的。当然,它也应当语法正确,最好还可以正确匹配括号。

更重要的是,我不希望在构思代码的中间停下来,思考如何去和 AI 交互。人类并不擅长用文字准确、简洁地描述自己的想法,更不擅长揣摩 AI 最习惯的表达方式。因此 AI 辅助代码编辑系统才以无感为最佳。而实现无感助理所需的获取信息、指令跟随(特别是参考文)、幻觉以及甚至语法的准确性——虽然我目前并没有在代码模型领域积极工作——大抵都是整个 NLP 领域目前的悬案,不似通过简单的工程路径就能彻底解决。

今天恰好听到了何河教授报告的工作,经过对齐的模型的输出增加了人类的满意程度(approval rate),但并不一定提高了正确性(correctness)。在模型输出的代码上,人类即使可以自由撰写单元测试来判定模型的输出,也仍然标记了大量假阴性。那么 GPT,Claude 还有 Gemini 等一众模型是否只是变得更有模有样了?这很难回答。

另外一个思考:考虑 LLM 的工作原理。作为语言模型,它的目标是根据上文输出下一个最可能的词符,仅此而已。假如我的工作需要很强的创造力,那么我接下来写的分析、算法、实验或者建模理所应当适度地违反训练集的海量语料的分布。这要如何稳妥地做到呢?也许写网页、画图、搭代码框架以及使用 API 之类的重复性劳动更适合由 AI 代劳——我现在也是这样做的。对于那些需要有新意的代码,恐怕不只是换个模型,在代码编辑器上增加一些工程巧思就能做到的。

我对 AI 辅助代码编辑的发展持乐观态度,但我不认为现有的任何产品除去宣传因素以外有任何本质性的区别。此外,我个人偏好社区驱动的开源产品,这样一款开源套壳的闭源工具,搭配上它的定价以及它本身的盈利属性,再加上并不本质的体验改善,它(以及任何类似的工具)并不符合我目前的个人的期望和需求。