在周末的公司【AI4SE 效能革命与实践:软件研发的未来已来】直播里,我分享了《AI编码工具 2.0 从 Cursor 到 AutoDev Composer》主题演讲,分享了 AI 编码工具 2.0 的核心、我们的思考、以及我们的 AI 编码工具 2.0 探索实践。
在这篇文章中,我将分享这次演讲的内容,希望能够给大家带来一些启发。
一、AI 编程工具 2.0 (趋势分析)
我们分析了市面上最受欢迎的 AI 编程工具,如 Cursor、GitHub Copilot Edit、WindSurf、Cline 等,简单总结一下新一代 AI 编程工具的特点:
AI 编程工具正在从代码补全、代码预测,到更加智能、更耗费 token 的 AI 自动化编码与验证,以及正在发展中的异步 AI 编码。
基于这些特点,我们认为 AI 编程工具 2.0 的核心特点应该是:
Agent 驱动。依赖于基础模型的强大推理能力,结合在编程工具中提供更快、更好的获取上下文,可以让 AI 编程工具更好地理解开发者的意图,并编写出更加符合开发者预期的代码。
开发者体验优先。结合开发者日常活动,更好的满足开发者的心流,诸如编辑预测、自动测试等;诸如 Cursor 结合开发者活动提供了大量机制来降低心智成本,以及应对失败和重试等。
自动化校验。即自动化校验 AI 生成代码的质量、业务逻辑正确性、修复幻觉导致的问题,诸如 patch等,从而在机制上减少幻觉带来的影响;诸如 Cursor 集成大量实用的 Lint、Terminal 等工具,提供自动化检验手段。
当然了,它们还有其它非常不错的范式:
容错式交互:采用「生成-校验-回滚」的三阶段机制降低心智负担
场景化聚焦:针对代码评审、漏洞修复等场景设计专用交互流
当前主流的 AI 编码 2.0 工具主要集中在 VSCode 平台上,而 VSCode 只是一个编辑器,它的 API 限制了 AI 编码工具的功能扩展,阻碍了更高级功能的实现。我们便开始思考,直接在 IDE 上构建 AI 编码工具会不会是一个更好的选择?
二、我们的 AI 编码工具 2.0 的思考
我们在内部做了一些新一代编码工具收集,发现典型的 Intellij IDEA 用户,会使用 Cursor 来生成代码,然后再回到 IDEA 中进行测试和调试。分析其中的原因,我们发现:尽管 Cursor 能提升开发效率,但是它并没有 IDEA 带来的提升大,即 IDEA 与编辑器的能力差异,使得 IDEA 提升反而更大。
因此,我们开始思考,如何更好的开发 AI 编码工具 2.0?
思考 1:编辑器优势在于体验,IDE 优势在于生态集成
我们简要分析了编辑器与 IDE 的优势与劣势:
VSCode
显著优势:可以快速开发功能原型、迭代;
缺点:插件丰富但是质量低,需要重新开发和设计。尽管有 LSP(Language Server Protocol)、DAP(Debug Adapter Protocol)等,MCP(Model Context Protocol)等,但是并不能提供非常好的集成。
Intellij IDEA 系列
显著优势:开箱即用,高质量的官方插件可以提供高质量的上下文
缺点:开发成本高、速度缓慢、文档缺失(AI 无法生成靠谱的代码)
因此,我们认为,AI 编码工具 2.0 应该更多的借助工具生成的能力,
思考 2:借助 IDEA 插件生态,构建端到端自动化
在现有可参考的工具里,IDEA 是一个非常好的示例,诸如在后端 API 开发场景,它非常好的集成【设计-开发-校验】相关的工具生态。诸如:
设计:Swagger、PlantUML、Mermaid 等工具
开发:HttpClient、Curl、Database 插件等
校验:JUnit、Playwright、SonarLint 等
有了这些插件后,我们可以构建面向 AI 的接口,提供更好的提示词、工具,以及对应的校验机制。
思考 3:构建高质量的上下文,减少幻觉产生示例
以后端开发为例,我们可以通过三种工程,构建 Agent 驱动的 AI 编码工具核心:
软件工程的上下文工程。获取项目中的关键上下文:诸如于:依赖信息、数据库信息、框架信息等;示例:This workspace use Gradle+Java+JDK_18;This project use MariaDB;You are working on a project that uses Spring Boot 2.7.10,Spring MVC,JDBC to build business logic.
函数调用工程(OpenAI)。即持续围绕不同的场景,让模型更好的理解不函数如何调用,做更好的集成。
提示词工程(Claude)。面向不同的模型,提供思考过程范例,让模型更好的学习。
更好的上下文,配合上更好的提示词,意味着更少的幻觉。也因此工具的各种指标,诸如可用性、接受度、准确度等,都会有所提升。
三、我们的 AI 编码工具 2.0 探索实践:AutoDev Sketch
基于我们的分析和思考,我们开始构建我们的 AI 编码工具 2.0:AutoDev Sketch。它的核心应该是:高质量系统提示词 + LLM “推理”能力,获取 IDE 中的关联上下文,渲染为交互式视图(Sketch View)。
1. 构建高质量的上下文与工具使用
鉴于我们的思考,我们在 AutoDev Sketch 深度集成了 IDEA 插件,诸如于 Database 组件,提供统一的数据库能力,作为上下文、工具封装,快速帮助开发者进行数据库处理。它可以在三个步骤帮助 AI 更好地与数据库交互:
系统提示词。当用户连接了数据库时,会在系统词中添加:User's workspace context is: This project use MariaDB 11.5.2-MariaDB
工具使用。与此同时,AI 在识别到需求后,可以调用
Database
工具,来获取数据库信息(/database:schema
),以帮助生成对应的代码。SQL 交互。最后,模型不仅可以生成 SQL 代码,还可以与数据库进行交互,以验证生成的代码是否正确。同时,我们也将在未来提供对应的 SQL 代码校验机制。
除了 Database 组件,我们还提供了其他插件,如:HttpClient、SonarLint 等,以帮助开发者更好地进行开发、测试、校验。
2. 丰富的工具构建自动采纳的最后一公里
与 Cursor 这一类基于 VSCode 的 AI 编辑器相关,我们加入了更多的 IDE 原生的功能,以提升开发者的体验。如下是 AutoDev Sketch 的工具列表:
诸如: run
、 refactor
、 structure
等,都是 IDE 原生的功能,我们将其封装为工具,以帮助 AI 更好地理解开发者的意图,并生成更加符合开发者预期的代码。
3. 多样化 Sketch 视图构建开发者心流的连续性
在 AI 针对问题生成代码后,我们将代码渲染为交互式视图(Sketch View),以帮助开发者更好地理解代码,提升开发者的体验。这是就需要充分考虑不同场景下的交互可能性, 如下是 AutoDev Sketch 提供的连续性交互示例:
多种化的 Patch/Diff 处理, 并针对生成代码进行 Lint 检查等
前端应用在启动 dev 服务时, 自动打开 WebView 查看编译正确
生成依赖文件时,可提供依赖的安全检查
等
通常这种连续性,降低了开发者的心智负担,提升总体的开发体验。
AI 编码工具 2.0 总结
我们可以对 AI 编码工具 2.0 的核心特点进行总结:分考虑与研发知识库、工具生态的结合,部署最新模型以刷新认知,关注开发者日常活动
充分利用研发生态:结合研发工具链和知识库,提升 AI 编码工具的智能化。
开发者编码心流:通过持续性自动化修改,提升开发效率。
多种规格 AI 模型支撑:通过规划、理解、补全等不同模型,满足多样化的开发需求。
通过 AutoDev Sketch 的探索,相信大家也知道如何通过高质量上下文、丰富的工具集成和交互式视图,构建下一代 AI 编码工具,提升开发者的效率和体验。