原创 Leo 2024-12-25 18:30 上海
AI智能编码产品正在加速重塑软件开发的工作流程,在可以预见的未来将会深刻的影响着软件开发领域。
目录
一、引言
二、AI智能编码的产品发展
1. 插件形式的AI智能编码产品
2. 基于VSCode的AI智能编码产品
3. WEB形式的AI智能编码产品
三、AI智能编码的技术发展
1. IDE端的技术发展
2. 服务端的技术发展
四、研发效能在智能编码方向的实践
1. IDE端的智能编码实践
2. WEB端的智能编码实践
3. 小众脚本语言AviatorScript的智能编码实践
五、智能编码方向的未来预测
1. 关于智能编码产品的交互形态
2. 关于智能编码产品的研发流程
3. 关于研发团队人员结构
4. 关于智能编码产品的大模型发展
六、总结
一
引言
从软件开发领域的IDE工具说起,Jetbrains全家桶在去年还是绝对的王者,但从年初到现在已经免费了四款产品WebStorm、Rider、RustRover、Aqua作为新的运营策略,以吸引更多的开发者使用Jetbrains。
形成鲜明对比的是,在AI加持下的Cursor和Windsurf 2款代码编辑器则给开发者带来了更智能、更高效的编程体验,而这2款产品脱了“马甲”都是VSCode。
严格的讲,VSCode作为一款代码编辑器,在提供研发编码所需要的集成环境时,与Jetbrains是有一些差距的,随着AI功能的内置,VSCode与Jetbrains的差异也越来越小,手动编辑代码、Debug代码的使用频率会变的越来越低,研发大部分的心智都被留在了Chat控制面板中,最终,无论是Jetbrains还是VSCode都走向了新的交互方式。
另外一个视角,Github Copilot作为AI智能编码方向的标杆性产品,在今年4月份付费用户已达到180万,占全球程序员数量的7%。而随着8月份Anysphere推出智能编码产品Cursor的新版本,越来越多的程序员愿意为Cursor付费,据私募市场研究公司Sacra估计,Cursor在2024年11月份ARR(年度经常性收入)达到6500万美元,同2023年相比增长6400%。注:Curosr不是一个新的产品,8月份推出的版本在交互、功能、准确度上都达到了较高的水准。
至此, AI智能编码产品进入到了一个新的发展阶段。
二
AI智能编码的产品发展
2021年10月,Github推出了智能编码产品Github Copilot,以插件的形式与Jetbrains、VSCode集成。经过一年多的优化,Github Copilot被越来越多的研发同学青睐,国内各大模型厂商也开始跟进,例如百度智云推出Comate、阿里云推出通义灵码、清华质谱推出CodeGeeX。
今年8月份Cursor带来了不一样的产品体验,同时更加的“聪明”,就像一个合作伙伴更懂开发;11月份Windsurf在Cursor功能的基础上引入了Agent能力,提升了多文件编辑的功能;随后,Cursor发布了0.43.0版本支持Agent能力。
还有另外一类产品,致力于从产品需求到编码到部署上线整个端到端的过程,代表产品有v0、Bolt.new等。
插件形式的AI智能编码产品
这类产品以Github Copilot为标杆,大部分的功能项与Github Copilot看齐。功能项主要分为2类:
单行/多行代码续写功能
AI智能问答功能,包含生成代码注释、代码解释、代码纠错/优化、编码过程中的知识问答等,这些子功能看着比较多,究其本质,是在问答功能的基础上包装了不同的Prompt,提供了一种快速使用的方式。
单行/多行代码续写功能
在编码过程中,自动或者手动触发行内补全或多行补全(根据编写代码时光标所处的位置而定)。大部分的产品采用自动触发的方式,使用TAB键采纳推荐的代码,ESC键丢弃推荐的代码;而部分产品采用的是使用快捷键手动触发代码推荐的方式。关于这2种触发方式的优劣,并没有定论,大致可以认为,对编码过程打扰比较多、推荐的内容并不准确时,用户可以选择按需手动触发代码推荐的方式。
Github Copilot插件单行/多行代码续写功能演示:编码过程中自动触发代码推荐。
AI智能问答功能
可以根据不同的Prompt封装出类似于“语法糖”的功能项,比如生成代码注释、解释代码、代码优化等,如上文所说本质都是对话的形式。同时也可以对编码过程中的一些问题进行代码仓库检索和问答,大部分的产品提供联网搜索,比如说实时搜索Spring boot的API文档、Markdown语法文档等。
解释代码功能
Github Copilot插件解释代码功能演示:对一个函数的代码逻辑进行解释。右键选择“说明”功能触发执行。
联网搜索功能
Github Copilot插件联网搜索功能演示:实时搜索Spring boot的文档。
其他功能项就不一一展示了,感兴趣的同学可以使用相关的产品进行体验。
从过往的实践看,研发同学对在Chat框内问答的方式会有些兴趣,因为这种形式是在IDE内直接与AI沟通的,而不用切换到其他系统进行操作,减少了研发在编码环节不同系统间的上下文切换时间,从而一定程度上提升了研发的效率。只是在Chat框内问答对编码过程能有多少提效,现在还不太好评估。
基于VSCode的AI智能编码产品
这类产品进一步提升了AI智能编码的交互体验及准确率,充当的是一个协作编程的角色。典型的代表产品为Cursor、Windsurf,它们的功能项主要分为3大类:
多文件编辑
例如Cursor的Composer功能,可以感知仓库内多个关联的文件,在进行功能处理时,按需对关联的多个文件进行修改,这个功能相较于原来的代码续写功能又往前走了一步,研发同学可以完全使用自然语言完成功能的开发,并可以在生成代码后,持续的使用自然语言进行代码的修改。持续的修改,也同样是基于多个文件进行的。
Composer的功能,把智能编码带入到了一个新的阶段,对于研发来说,日常编码就需要对多个文件进行编写、在多个文件间跳转。这种新的编程方式的一个有力证明是Cloudflare副总裁的8岁女儿,可以在45分钟完成一个聊天机器人应用的开发。
Cursor Composer功能演示:实现一个对话框功能,前端使用React开发,后端使用Golang开发。
Windsurf产品发布的Agent功能,进一步加强了多文件编辑的能力,Agent将任务进行一步一步拆解,完成子任务的执行,将多文件修改的准确率往上又提升了一些。同样的,Cursor 0.43.0版本也支持了Agent的功能,如上面动画中演示的实例,在Chat对话框中,可以选Normal或者Agent模式进行交互。
代码续写及下一行预测
除了原有的代码续写功能,Cursor增加了下一行预测的功能,也就是当开发修改了一个地方后,Cursor可以预测出下一个要修改的地方并给出推荐的代码,这是Cursor产品的另外一个竞争力:Just Tab、Tab、Tab。
Cursor下一行预测功能演示:自动预测研发下一个将要修改的位置进行代码推荐。
Inline Chat/Inline Edit功能
Inline Chat将研发的关注点从Chat对话框重新带回了代码编辑页面,在代码编辑页面内完成代码推荐并自动完成新代码与老代码的融合。也支持对推荐的代码在Inline Chat框内进行持续问答。
Cursor Inline Chat功能演示:行内使用自然语言完成代码修改。
WEB形式的AI智能编码产品
相较于上面2类产品把目标聚焦在研发过程的编码阶段,端到端编程模式的智能编码产品一开始就认为应该把目标聚焦于编码阶段的上一环节:需求阶段。
这类产品站在问题的源头去看整个链路的解决方案,同时完成:
需求的理解,使用自然语言描述需求
任务的拆分,对需求进行任务分解
代码的自动编写
代码的自动编译及运行
功能代码的一键发布上线
Bolt.new功能演示:创建一个移动端应用,代码编写完成后即可运行。运行异常时,可以自动对异常修复。
三
AI智能编码的技术发展
业界不少公司和同学去学习Github Copilot的技术原理,分析不同功能项使用了什么样的AI技术提升准确率,以此来减少与Github Copilot在技术上的差距。
Cursor的出现除了在交互上使用了更优的方式外,在准确率上也开创了新高,对于Cursor的技术实现,业界目前还在分析学习中。
IDE端的技术发展
上下文
上下文对于AI产品来说比较重要,大模型知晓预训练时的知识,但并不知晓实时场景下的知识,这也是我们经常听到的一些商用大模型支持的上下文长度不断在增加,其作用是在使用大模型时能提供更多的上下文知识,减少大模型的幻觉,让模型的输出更准确、更符合预期。
这里粗略说明下模型上下文长度与字数之间的关系:
同样的,上下文对于AI智能编码产品的准确率提升也很重要,如文章上面介绍的,以插件形式提供服务的AI智能编码在功能上主要分为代码续写和Chat框内问答2大类功能,这2大类功能所需的上下文并不相同。
续写功能的上下文
初期,续写功能的上下文主要采用的是相似上下文,从最近编辑的文件中检索出更多相似的文本,之后传给大模型进行推理。
现在,在相似上下文的基础之上又增加了相关上下文,使用AST进行语法树分析后与相似上下文检索出来的代码片段一起发给大模型。部分商业产品在相关上下文和相似上下文基础上又增加了更多类型的上下文,如腾讯AI代码助手增加了内容压缩等功能。
相关上下文和相似下文本的对比如下:
在代码续写场景,不同的上下文代码片段对于结果生成的权重并不相同,普遍的做法是在组装完上下文之后,使用一个重排算法对上下文进行排序及过滤,进一步提升构建的上下文质量。
问答功能的上下文
问答时依赖的上下文类型更丰富一些,提供上下文的工具也更多,比如说仓库内问答时依赖于仓库索引的上下文、对当前代码的修改问题依赖于Git diff提供的上下文。
以下为常见的问答上下文类型,随着技术的发展,上下文类型的种类也逐渐增多。
RAG
RAG技术我们之前介绍过多次,对于普通文本RAG主要分为Naive RAG、Advanced RAG、Modular RAG。
初期的智能编码产品并没有引入RAG技术,而是在做仓库内问答功能时,需要将自然语言转换为代码片段引入的,而代码仓库的检索方式略不同于普通文本的RAG,首先代码仓库一般会创建四类不同的索引:
代码分块索引,即对代码进行分块索引
向量相似度索引,即对代码块进行向量索引
全文索引,即对代码块建立倒排索引
代码片段索引,即对代码片段创建索引
创建完成的索引,在用户使用仓库内问答功能时,会先将自然语言转换为代码片段之后发送给大模型作为用户问题的上下文。例如,在使用Github copilot的@workspace功能时,会使用到在用户本地对整个代码仓库创建的索引。
服务端的技术发展
代码大模型
大模型的发展日新月异,版本迭代按月计,如今“百模”大战也并没有分出胜负,大模型的架构也有了Transformer架构、MOE的架构之分。最初的智能编码产品使用同一个模型支撑所有的功能,之后慢慢的演变和发展,现在对于智能编码场景的大模型来说,可以大致分为三类:
代码补全模型。对推理速度要求较高,通常使用7B参数或者13B参数的模型。
对话模型。基于SSE协议流式输出,通常模型推理的首响速度对用户体感影响比较大。通常使用更大参数的模型,如72B参数的模型、GPT系列商用模型。
FastApply模型。用于代码Diff处理,生成用于与原有代码合并的内容。
EvalPlus 代码模型的排行榜,供参考。
模型微调
在模型微调的实践中,Garbage in, garbage out是大家说的比较多的一句话,这也体现了模型微调效果很重要的一个因素在于数据,且伴随着微调方式、微调流程更加的固定,优质数据集显的更加重要了。
随着现在微调技术日渐成熟,模型微调从一个原来只有少部分人才可以做的事情,变成了一个技术门槛不太高、“人人”都可做且流程很固化的工作,模型微调大部分的时间可能都要花在怎么提取优质数据集的事项上。
关于模型微调,这里不做展开。
Speculative Decoding
服务端持续提升代码模型的推理速度及准确率的另外一个技术是Speculative Decoding,它的论文在这里:https://arxiv.org/abs/2211.17192。
Speculative Decoding并不是最近兴起的一门技术,GPT商用模型之前就有曝光过在使用这种方式进行推理加速,它的原理可以简单总结为:使用Draft-then-Verify的解码算法,即在每个解码步,该算法首先高效地推测target LLM未来多个解码步的结果,然后用target LLM同时进行验证,以加速推理。
体验过Cursor产品的同学知道,它的补全速度及质量很高,从官方博客中可以看到他们实际上就在采用这项技术进行产品的速度的优化。
基于篇幅考虑的原因,更多的技术发展、技术原理、技术方案优化,如仓库Agent、Fast Apply实现、Inline Chat实现等,就不在文章中进行介绍了。感兴趣的同学可以一起交流。
四
研发效能在智能编码方向的实践
IDE端的智能编码实践
代表产品为EP-Copilot。得物研发效能从今年6月份开始实践IDE端的辅助编码功能,与其他商用产品类似,也是以IDE插件的形式提供使用,支持Jetbrains和VSCode插件。到目前为止,实现了自动代码续写、Chat对话、AI工具箱等功能,基础功能与商用产品相近。
在AI功能的基础上,EP-Copilot也同时支持在IDE内管理代码分支、MR管理、代码评审等功能,EP-Copilot目前在内部已经覆盖了交易、算法、国际等多个业务域。
EP-Copilot的解释代码功能示例。
在技术上,采用CS的架构模式,接入了公司内部的SSO,并提供了开放API接口。在IDE端支持了组装优质上下文、代码续写LRU缓存等。架构图如下:
WEB端的智能编码实践
代表产品为自动化用例AI生成。9月底我们在自动化测试用例平台上线了诸多AI的功能项,其中跟智能编码相关有AI工具箱、Chat对话、自动化测试用例单步骤生成功能。目前自动化用例平台的AI功能:
使用数:2800+,采纳数:2300+,采纳率:85%+
共覆盖:50个子域,100+个用户,维护用例用户数200+,用户覆盖率:60%+
可以看到,与IDE端相比,自动化用例平台的智能编码实践少了一个代码续写的功能,经过我们调研和评估,这个功能在自动化测试用例场景使用价值并不太高,于是我们做了直接生成单步骤代码的功能,与现在的Cursor的Composer功能有一定的相似度。
自动化平台AI功能演示:Dubbo接口调用,感知内部库;自动化测试单步骤代码自动生成。
在技术上,采用了Workflow驱动的方式,叠加了内部库文档的RAG,对各项功能的输入和输出结构都进行了精细化的处理。从下图技术方案实现中可以看到,服务端技术实现与EP-Copilot的技术实现有不小的差异。
小众脚本语言AviatorScript的
智能编码实践
代表产品为AvitorScript脚本语言的代码生成。
AviatorScript脚本语言的目的是为了提供一种简单而高效的表达式求值解决方案。它在设计理念上注重简洁性和实用性,能够方便地嵌入到各种 Java 应用程序中,用于处理动态的表达式计算场景。例如,在一些规则引擎、动态脚本配置等领域发挥作用。
而目前的通用大模型,例如GPT系列模型、通义系列模型、豆包系列模型,在预训练时并没有学习到AviatorScript的知识,关于AviatorScript的问题,这类模型给出的答案并不好。为了让大模型能够帮助AviatorScript脚本编写的同学,我们通过内置的Prompt将AviatorScript语法、代码示例等注入到模型对话中,进而让大模型能够非常准确的回答出相关的问题。
AviatorScript脚本语言使用示例:使用AviatorScript编写一个快速排序算法。
五
智能编码方向的未来预测
现阶段的AI实践给我们带来了一个思考是,一个好的AI功能需要更长时间的灰度,持续打磨后再推广到更大的范围,或者也可以这么认为,AI功能在灰度测试发布,与其他的功能性平台上线是同等的,其他功能性平台是上线后再持续进行优化,而AI产品的功能应该是在灰度测试阶段持续进行优化到一定程度后再正式上线推广到更大的范围。
在AI方向上的深度和积累,也变得越来越重要,简单使用界面化快速拖拽一个工作流、开源产品搭建基础功能、不理解如何优化功能、不理解技术原理,靠运营策略并不太能弥补核心能力的缺失,推出的AI功能用户黏度不会太高,用户过了新鲜感之后就流失了。
AI智能编码这个方向上的产品从各大巨头公司内部落地效果看是比较好的,产品的效果也在不断“摸高”到新的水平。对于这个快速发展的方向,我想基于个人的理解做出一些预测。
关于智能编码产品的交互形态
IDE将慢慢蜕变为一个代码查看的工具,研发大部分的心智将留在Chat对话框内,如何组织好自然语言让大模型更精确的推理是问题。同时也考验研发的沟通能力,即,怎么让一个有强大技术的AI理解业务需求,并编写出高质量的代码。
在IDE内Debug的次数将会降低,AI Fix功能将慢慢替代人工Debug的方式。
未来,研发本地的IDE和WEB端的IDE,对于研发来说,区别并不会特别大,用户习惯的改变相对较难些,这需要一个稍长的周期,不过随着产品技术的发展,新的方式可能会更容易让用户接纳。
关于智能编码产品的研发流程
端到端的研发流程是AI智能编码产品的确定性的发展方向,目前的AI辅助工具可以认为是过渡状态。从Github Copilot推出的Workspace、V0、Bolt、通义灵码AI程序员等产品可以看出:从需求理解、任务拆解、自动编码、自动Debug修复、自动测试及部署,是长期的发展方向。
智能编码产品的Agent是打通需求管理平台、代码管理平台、发布平台等内部平台的技术实现。研发与AI在整个需求研发流程中以协作的方式完成功能的交付。
关于研发团队人员结构
一个团队内的人员结构,主要由专家开发+初级开发组成, 专家开发来维护整个项目的架构、规范、CodeReview等工作,日常编码工作由专家开发+初级开发的同学使用AI承担。
可以认为,普通研发成长为业务专家的速度远慢于AI成为业务专家的速度,但需要有专家经验的同学来约束AI在编码领域的规范,包括编码规范、架构规范、解决复杂问题等。
关于智能编码产品的大模型发展
通用的代码大模型是趋势,根据场景进行特殊定制化的编码辅助工具,存在的价值会越来越低。代码大模型除了速度和上下文长度的平衡,也需要接受更加需求化的语言,即理解业务需求需要更少的自然语言输入。
六
总结
如今,我们可以感知到,AI智能编码产品正在加速重塑软件开发的工作流程,在可以预见的未来将会深刻的影响着软件开发领域。这个方向的产品和技术都在飞一般的发展着,随着我个人后续有了更多新的认知、新的思考,目前做出的预测会发生变化,亦或者,目前的认知被颠覆。
也希望更多对这个方向感兴趣的同学一起交流讨论,在快速变化的技术浪潮中,一起找到那个“不变”的内核。
往期回顾
1.Java程序中的潜在危机: 深入探讨NullPointerException|得物技术
5.二十万分之一几率:if语句变do-while卡死问题分析|得物技术
文 / Leo
关注得物技术,每周一、三更新技术干货
要是觉得文章对你有帮助的话,欢迎评论转发点赞~
未经得物技术许可严禁转载,否则依法追究法律责任。
“
扫码添加小助手微信
如有任何疑问,或想要了解更多技术资讯,请添加小助手微信: