摘要:本文将回顾AI编程工具的进化史,主要探讨开发者与智能助手如何从"主从关系"演变为"默契搭档",并且分享对未来软件质量工程的思考。
一、编码助手的演变
我们重新定义为3个时代:
代码弱预测时代 --> 代码强预测时代 --> 代码智能交互时代
1. 代码弱预测时代(2010-2018)
基于统计的马尔可夫链模型
早期工具通过马尔可夫链预测代码片段,本质是文本概率匹配(如预测 if 后的)。但仅支持相对固定简单的前后匹配格式、无上下文感知,错误率高。
深度学习的初步渗透(2018)
Kite 以基于 “机器学习” 的代码建议引起轰动。基于RNN深度学习算法来预测代码,同时,微软在 VsCode 和 Visual Studio IDE 中发布了 Intellicode,它能提供上下文感知建议,优先考虑最可能的建议。通过GitHub开源项目训练,实现跨文件类型建议。微软最终推出了“单行预测”。单行代码预测意味着根据上下文预测下一行逻辑代码。
2. 代码强预测时代(2019-2022)
单行补全 → 多行补全
Tabnine(2019)是第一个集成 GPT - 2 进行代码补全的代码编辑器,为未来的 AI 代码编辑器奠定了基础。它实现了首个真正的语言无关多行代码补全。
块级补全的革命
直到 OpenAI Codex 模型发布,才出现了基于用户输入和上下文感知代码生成或理解用户意图的块级代码补全,如生成整个函数或方法。OpenAI Codex 为 Github Copilot 提供支持,具有较高的准确性。
中间填充(FIM)技术
早期的自动补全模型只能从左到右 “追加”,不能考虑后缀的上下文。OpenAI 引入的 “中间填充”(Fill in the Middle,FIM)技术解决了这个问题,实现了双向感知,即理解光标前后的内容。Codeium 是第一个在