Trae是如何悄无声息地窥探你的代码的?
摘要:在 AI 编程领域国内外有一堆能叫的上号的应用: Cursor Windsurf Trae 阿里的「通义灵码」 百度的「文心快码」 字节跳动的「MarsCode」 科大讯飞的「iFlyCode」 GitHub 的「Copilot」 等等等.
在 AI 编程领域国内外有一堆能叫的上号的应用:
Cursor
Windsurf
Trae
阿里的「通义灵码」
百度的「文心快码」
字节跳动的「MarsCode」
科大讯飞的「iFlyCode」
GitHub 的「Copilot」
等等等...
这么多的 AI 编程应用,它们到底有什么区别?
这些编程应用的实现原理到底是什么样的?
如果你也对上述问题怀有好奇心,那么接下来这篇文章就会彻底打消你的疑惑!
以后再在朋友面前聊天的时候也可以略带装 X 的说一声:“啊,那个「Trae」的原理不就是 XXX + XXX 开发的嘛,其实并没有那么复杂,哈哈。😄”
原创作者,陈咬金(数字生命贾克斯),文章首发地址:https://mp.weixin.qq.com/s/4t_FP8b-WlFn6hPQf3WeyQ
AI IDE 和 AI Extensions
目前市面上所有的 AI 编程工具都可以分为两类。
一类是:AI IDE(AI 集成开发环境)
这类应用通常和开发环境深度集成,比如上面提到的 Cursor、Windsurf、Trae 这些都属于 AI IDE 应用。
这类工具的最大特点就是:
它们本身就是一个单独的软件开发工具
在原有软件开发工具的基础上,通过代码魔改使得该开发工具,具备了 AI 的功能。
而另外一类则是:AI Extensions(AI 插件)
阿里的「通义灵码」、百度的「文心快码」、字节跳动的「MarsCode」、科大讯飞的「iFlyCode」、GitHub 的「Copilot」
这类应用都属于 AI 插件,所谓 AI 插件,就是这类应用必须被集成进对应的开发环境中才能被使用。
比如常用的 VSCode 和 IntelliJ IDEA,我们只要在这两个开发工具的扩展插件中搜索上述的 AI 应用,就可以直接下载并安装使用了。
两种类型应用的区别
那么了解了所有 AI 编程应用的分类后,这些应用的最大区别又是什么呢?
先说 AI Extensions:
由于 AI Extensions 本身只是 IDE 的一个插件,所以 AI Extensions 所能拿到当前代码仓库的相关信息必须依赖于该 IDE 所提供的插件 API 接口。
如果 IDE 的 API 接口不支持获取详尽的代码历史数据,那么这些 AI 插件能够获取的上下文信息就会受到限制。而这种限制的上下文信息对于模型准确分析和理解用户意图来说,则是相对不利的。
而对于 AI IDE 来说:
由于 AI IDE 本身就是作为集成开发环境,所以 AI IDE 能够直接访问代码仓库中的丰富上下文信息。
通过分析用户意图,并据此调整上下文信息的权重,AI IDE 能够显著增强检索效果,这是 AI Extensions 所无法实现的。
如果看到这里你还是会觉得,这都啥跟啥啊,完全不理解啥意思。
不要急,秋豆麻袋!
接下来我们就拿一个示例来做一个演示。
Trae 和 通义灵码
Trae 目前是国内最强的 AI IDE 工具,至于为什么说它是目前国内最强,下篇文章详细讲解 Trae 的使用技巧时会细说。
通义灵码 也是目前国内 Top 级的 AI 插件。
我们拿通义灵码和 Trae 来做一个小小的比对,你就能一目了然双方的区别了。
通义灵码
此时我从 GitHub 上下载一个之前自己写过的代码仓库 smart-heart
IDEA 打开该仓库后,使用通义灵码的“AI 程序员模式”来问一个简单的问题:“请帮我分析一下当前整个项目空间中所有项目的主要功能是什么?”
一般当我们学习一个新的项目,不知道从何开始看起的时候,就可以让 AI 帮我们快速总结一下该项目的主要功能和特点了。
我们可以看到 通义灵码 给出的答案是:“由于我们未提供任何上下文信息,所以它无法分析当前该项目的主要功能。”
Trae
此时我们问 Trae 一个相同的问题:“请帮我分析一下当前整个项目空间中所有项目的主要功能是什么?”
此时我们可以看到 Trae 读取了我当前整个工作空间的代码数据,并进行分析后,给出了对应的项目总结。
总结
此时你可能会有一个问题,“通义灵码” 已经说了,请你提供对应的上下文信息,然后它会给你进行对应的代码总结,你给它提供对应的代码信息不就好啦?
这里我可以非常明确的告诉你,不是这样的。
就算你这里选择了对应的上下文信息也只能选中几个代码文件给对应的“通义灵码”,他只会根据这几个提供的代码文件来进行分析。
而 Trae 则不同,在 Builder 模式,默认情况下,就是直接读取你当前整个 WorkSpace 空间下的所有代码内容。
