在周末的公司【AI4SE 效能革命与实践:软件研发的未来已来】直播里,我分享了《AI编码工具 2.0 从 Cursor 到 AutoDev Composer》主题演讲,分享了 AI 编码工具 2.0 的核心、我们的思考、以及我们的 AI 编码工具 2.0 探索实践。
在这篇文章中,我将分享这次演讲的内容,希望能够给大家带来一些启发。
我们分析了市面上最受欢迎的 AI 编程工具,如 Cursor、GitHub Copilot Edit、WindSurf、Cline 等,简单总结一下新一代 AI 编程工具的特点:
AI 编程工具正在从代码补全、代码预测,到更加智能、更耗费 token 的 AI 自动化编码与验证,以及正在发展中的异步 AI 编码。
基于这些特点,我们认为 AI 编程工具 2.0 的核心特点应该是:
当然了,它们还有其它非常不错的范式:
当前主流的 AI 编码 2.0 工具主要集中在 VSCode 平台上,而 VSCode 只是一个编辑器,它的 API 限制了 AI 编码工具的功能扩展,阻碍了更高级功能的实现。 我们便开始思考,直接在 IDE 上构建 AI 编码工具会不会是一个更好的选择?
我们在内部做了一些新一代编码工具收集,发现典型的 Intellij IDEA 用户,会使用 Cursor 来生成代码,然后再回到 IDEA 中进行测试和调试。分析其中的原因,我们发现: 尽管 Cursor 能提升开发效率,但是它并没有 IDEA 带来的提升大,即 IDEA 与编辑器的能力差异,使得 IDEA 提升反而更大。
因此,我们开始思考,如何更好的开发 AI 编码工具 2.0?
我们简要分析了编辑器与 IDE 的优势与劣势:
VSCode
Intellij IDEA 系列
因此,我们认为,AI 编码工具 2.0 应该更多的借助工具生成的能力,
在现有可参考的工具里,IDEA 是一个非常好的示例,诸如在后端 API 开发场景,它非常好的集成【设计-开发-校验】相关的工具生态。诸如:
有了这些插件后,我们可以构建面向 AI 的接口,提供更好的提示词、工具,以及对应的校验机制。
以后端开发为例,我们可以通过三种工程,构建 Agent 驱动的 AI 编码工具核心:
更好的上下文,配合上更好的提示词,意味着更少的幻觉。也因此工具的各种指标,诸如可用性、接受度、准确度等,都会有所提升。
基于我们的分析和思考,我们开始构建我们的 AI 编码工具 2.0:AutoDev Sketch。它的核心应该是:高质量系统提示词 + LLM “推理”能力,获取 IDE 中的关联上下文,渲染为交互式视图(Sketch View)。
鉴于我们的思考,我们在 AutoDev Sketch 深度集成了 IDEA 插件,诸如于 Database 组件,提供统一的数据库能力,作为上下文、工具封装,快速帮助开发者进行数据库处理。 它可以在三个步骤帮助 AI 更好地与数据库交互:
Database
工具,来获取数据库信息(/database:schema
),以帮助生成对应的代码。除了 Database 组件,我们还提供了其他插件,如:HttpClient、SonarLint 等,以帮助开发者更好地进行开发、测试、校验。
与 Cursor 这一类基于 VSCode 的 AI 编辑器相关,我们加入了更多的 IDE 原生的功能,以提升开发者的体验。如下是 AutoDev Sketch 的工具列表:
名称 | 中文描述 | AutoDev DSL 示例 |
---|---|---|
file | 通过项目相对路径读取文件内容 | /file:.github/dependabot.yml#L1C1-L2C12 |
write | 以 Markdown 代码块的方式写入文件内容 | /write:src/main/kotlin/cc/unitmesh/context/CppFileContextBuilder.kt```kotlin\n// the kotlin code\n |
patch | 对文件应用 GNU 统一 diff 格式的补丁 | /patchpatch\nIndex: src/main/route.py\n--- src/main/route.py (revision 1)\n+++ src/main/route.py (revision 2)\n// GNU unified diff format structure\n |
run | 运行 IDE 内置命令(如构建工具、测试等) | /run::bootRun |
shell | 执行 shell 命令并收集 (ProcessBuild) 结果 | /shell:executebash\necho "Hello, World!"\n |
commit | 在当前工作区执行 Git 提交 | /commitmarkdown\nfeat: add 'graphiteWidth' option\n |
browse | 获取指定 URL 的内容 | /browse:https://ide.unitmesh.cc |
refactor | 对文件内容进行重构,仅支持重命名、删除和移动 | /refactor:rename cc.unitmesh.devti.language.run.DevInsProgramRunner to cc.unitmesh.devti.language.run.DevInsProgramRunnerImpl |
structure | 获取文件的结构信息,以支持大文件处理 | /structure:cc.unitmesh.devti.language.psi |
dir | 以树状结构列出文件和目录 | /dir:src |
database | 读取数据库内容 | /database:schema |
localSearch | 在当前项目范围内搜索文本,返回前后 5 行 | /localSearch:project |
open | 在编辑器中打开文件 | /open:.github/dependabot.yml |
ripgrepSearch | 使用 ripgrep 在项目中搜索文本 | /ripgrepSearch:.AutoDev. |
诸如:run
、refactor
、structure
等,都是 IDE 原生的功能,我们将其封装为工具,以帮助 AI 更好地理解开发者的意图,并生成更加符合开发者预期的代码。
在 AI 针对问题生成代码后,我们将代码渲染为交互式视图(Sketch View),以帮助开发者更好地理解代码,提升开发者的体验。这是就需要充分考虑不同场景下的交互可能性, 如下是 AutoDev Sketch 提供的连续性交互示例:
通常这种连续性,降低了开发者的心智负担,提升总体的开发体验。
我们可以对 AI 编码工具 2.0 的核心特点进行总结:分考虑与研发知识库、工具生态的结合,部署最新模型以刷新认知,关注开发者日常活动
通过 AutoDev Sketch 的探索,相信大家也知道如何通过高质量上下文、丰富的工具集成和交互式视图,构建下一代 AI 编码工具,提升开发者的效率和体验。
围观我的Github Idea墙, 也许,你会遇到心仪的项目