AI 在软件开发领域的应用正在发生极大的演进,以 GitHub Copilot 为首,从单一的编程辅助,扩展到开发流程的各个环节。本文作者深入分析了 AI 辅助开发工具的演进,并提出,再争论 AI 是否会替代人类开发者的工作已经愈发没有意义,至关重要的是,于所有开发者而言,如何与智能助手共存并大幅提升效率。
今天你使用 Copilot 了吗?
这里的 Copilot 不仅限于开发者们熟悉的 AI 开发助手 GitHub Copilot,而是泛指所有以大模型为技术基础的生成式 AI 应用,如 ChatGPT(对话)、Jasper(辅助写作)、Midjourney(图片生成)等。
不管你的工作内容是什么,其实大概率都有能够用到 Copilot 的地方。那么,在这些地方就应该尝试去使用 Copilot。
2022 年底发布的 ChatGPT 带来的惊艳和掀起的浪潮,已无需赘言。但是,在此之前,很多开发者早在 2021 年就已经用上了大模型加持下的辅助编码工具,那就是在微软的牵线下,GitHub 基于 OpenAI Codex 大模型打造的产品 GitHub Copilot。一经推出,它就给学术界和工业界带来了震撼。
自动生成代码,一直被作为软件工程研究领域的圣杯,也是软件开发者们担心 AI 最有可能会替代自己、老板们认为 AI 最应该降本增效的场景(真实性暂不讨论)。多年来,基于软件分析技术和启发式规则算法一直无法实现期望的效果,踌躇于特定场景或理论研究而难以落地实用。而在 GPT-3 及 Codex 开启代码生成的大模型时代后,AI 辅助开发突然得以突破并迅速普及,这与自然语言领域的发展历程何其相似。
图源:使用 Meta AI 生成
身处 2024 年的开端,以大模型为基础的 AI 仍在快速发展,虽然距离实现通用人工智能(AGI)的愿景还有很大距离,但其发展速度和加速度都比人类快出几个数量级。经历了 2023 年对大模型的不明觉厉到习以为常,如今的我们可以更加理性和全面地看待这项技术。作为软件开发者,有必要重新思考一下,在可预见的未来,开发者与 AI 将会如何相处。
不过,还是让我们先从 Copilot 的含义开始说起。
Copilot 的定位与含义:从 GitHub Copilot 到 Microsoft Copilot
最初的 Copilot 专属于开发者,特指提供 AI 辅助编程的 GitHub Copilot。但经过两年多的发展,Copilot 这一品牌早已不限制在 AI 辅助研发领域,而 GitHub Copilot 也早已超越代码智能生成这一基本功能。2023 年 9 月,微软宣布全新升级的 Copilot 将直接集成到 Windows 11、微软 Office 365 全系产品和 Edge 中;2023 年 11 月的 Ignite 大会上,微软宣布 Bing Chat 及其企业高级版 Bing Chat for Enterprise 正式更名为 Copilot;微软云服务的一系列企业订阅计划中,也将 Copilot 作为最重要的卖点和增值服务。微软将其在旗下产品中提供的 AI 服务统一称为 Microsoft Copilot,希望成为用户的日常 AI 伴侣,贯穿用户的整个工作流。
大模型技术产品化是 2023 年的主基调,微软的一系列产品化动向表明,它在商业上对当前的 AI 应用逐渐有了一个更加清晰的定位:让 AI 作为副驾驶,辅助人类在各种场景中完成人类自身所需完成的工作。具体到开发者的日常工作,越来越多的人开始接受、适应、习惯写代码时得到 AI 的协助和提示,就像得到 IDE 的辅助功能一样。2023 年 6 月,JetBrains 宣布推出 AI Assistant,标志着 AI 辅助开发已经开始内置到 IDE 中。AI 在开发阶段提供辅助开始沉淀为一项基础的服务,未来可能与现代 IDE 一样成为开发者重度依赖的必备功能。
AI 辅助编码是大模型最早落地的应用之一,也是最具有实用性和商业价值的场景之一。在目前类 ChatGPT 的聊天应用依然以免费为主的情况下,GitHub Copilot 早早推出付费订阅计划以及企业级服务,现已形成大量稳定的付费用户群和成熟自恰的商业模式。以 Github Copilot 为代表的 AI 辅助开发产品,在 2023 年下半年迎来集中爆发(很大程度上得益于开源模型 LLaMa 的优异表现)。那么,这个领域的现状和发展是怎样的呢?
类 GitHub Copilot 产品的发展:领导者创新,跟随者追赶
首先,我们来看行业领导者 —— GitHub Copilot 在这一年的里程碑式更新:
2023 年 3 月,Copilot 升级为 Copilot X,接入 GPT-4 并新增了一系列功能:
GitHub Copilot Chat,可实现与 AI 对话完成编码;Copilot for Pull Requests,由 AI 协助开发者描述变更;Copilot for Docs,服务文档的智能编写和问答;Copilot for CLI,使用 AI 辅助命令行的使用;Copilot Voice,说话就完成程序编写。
2023 年 5 月,GitHub 推出 Copilot Labs,作为升级版伴侣扩展,提供早期实验和即将推出的新功能,如代码解释、语言间翻译、代码刷子、测试用例生成等。其中最强大的当属代码刷子,不仅预置了可读性提升、类型推断、修复 Bug、补充文档与注释等功能,还支持自定义提示词并保存为工具,相当于赋予了开发者再次扩展 Copilot 的能力以及个性化的可定制性。
2023 年 11 月,GitHub 发布 Copilot Workspace,与 GitHub 网站的群体协作功能联系更加紧密,旨在帮助开发者完成更复杂的任务,如感知跨文件上下文生成代码、基于整个仓库进行问答、针对 issue 生成多处代码变更等。从此,Copilot 的舞台不仅限于个人电脑中的 IDE,也不局限于开发者个人的独立工作区。
再看 Copilot 之外的项目,我将其分为以下三类:
商业竞品
大公司或创业公司推出的 Copilot 竞品,国外有 Amazon 的 CodeWhisperer、Sourcegraph 的 Cody、Anysphere 的 Cursor、Google 的 Codey、JetBrains 的 AI Assistant 等,国内有华为的 CodeArts Snap、智谱的 CodeGeeX、百度的 Comate、科大讯飞 iFlyCode 等。
开源平替
实现类 Copilot 功能的开源项目,如 auto-dev、Devpilot、FauxPilot 等。一般侧重于实现工程部分,核心部分所需的 AI 能力依赖大模型 API 的接入,如 OpenAI API、Azure API、自主部署模型 API 等。
前沿探索
探索 AI 自主独立工作的 Agent 项目,如 MetaGPT、GPT Pilot、DevOpsGPT、ChatDev 等。基本思路是模拟人类软件开发团队组织结构和开发模式,赋予 AI 不同角色和技能,让其自主沟通和协作完成端到端的项目级开发或复杂任务的实现。
对比之下不难看出,GitHub Copilot 早已超越一个提供代码补全建议的辅助编码工具,但大部分的竞品或平替还是在对标 AI 辅助编码这一基本功能。一方面是因为这一功能是多数用户或客户想象中 AI 最应该且能最大程度上提升效率的环节,另一方面是因为跟随者们在这一基本功能上也很难说已经与 Copilot 处于同一水平。
既然效果上没有差异只有差距,那么就必须从其他方面做出差异化,比如商业公司通过联动自身其他知识库或服务提供独特性,而创业公司和开源项目则主打可控性和自由度。
但是,作为业界领导者的 Copilot,对自身的定位早已超越在开发阶段的单点提效,而是开始布局更广泛的场景:一方面推出围绕代码的解释、翻译、问答等功能,另一方面开始发展代码之外的能力,从开发阶段向软件开发流程的两端延伸。从格局和层次来看, Copilot 作为行业领导者,目前仍保持着遥遥领先的优势。
与竞品或平替的思路不同的 Agent 则更加激进和大胆一些,抛开 Copilot 所定义的范围和边界,从智能体的角度探索 AI 在软件开发中的可能性。AI Agent 试图打造一个端到端的软件开发者,给定要求即可给出符合要求的软件,而这依赖于一个很强的前提假设,那就是用于实现 Agent 的 AI 至少具备一个杰出的软件开发者所具备的认知、思考、遵循、反思、协作等能力,实际上已经是对通用强人工智能的要求。
当前最先进的 AI 也尚未达到如此高的要求,这决定了将 AI Agent 用于软件开发目前处于并且还会长期处于探索阶段。实际上,虽然 Copilot 也是在朝着智能体的方向发展,从最初的编程助手发展为一个能力越来越综合的“工具”,但对于自主性并不强求甚至有意克制,仍然将 AI 定位为开发者的助手而非自作主张的智能体,这是与目前大部分 Agent 项目最大的不同。
从目前的发展情况来看,我们可以概括出目前 AI 辅助开发从业者的三个对未来方向的共识:
从底层局部的代码实现,到关注上层的架构和规划;从编码阶段单点提效,到开发全流程增益;从完成确定性任务,到创造性自主工作。
那么,带着这些共识,回到我们最初提出的问题:面向未来,开发者与 AI 如何相处?
开发者与 AI 如何相处:AI for developer 而非 AI as developer
预测未来很难,因此我们需要加入一些限制和前提:这里的 AI 特指当前基于大模型相关技术实现的 AI,并且基于当前已知的研究和工程实践的延长线进行分析。预测要做到精准更难,因此我们不妨使用 AI 与大模型的概率性思维,直接枚举一下可能的模式:
船长-大副型(Pilot-Copilot):Copilot 的初始设定,由人分解以及执行任务,在此过程中 AI 作为副手辅助人类更快地任务,无法独立于人类完成工作。主管-下属型(Master-Worker):人类设定高层次的任务,再交由 AI 完成具体实现,AI 可以自动完成更低一级的分解和迭代循环,人类需要承担把控输入输出的职责。同事-同事型(Peer-Peer):AI 被赋予与人类同等的地位,平等地进行分工且并行进行开发,AI 负责探索实现方案,而人负责架构设计、分工、集成等工作,从而实现优势互补。学徒-导师型(Student-Mentor):人类的能力和成长性开始落后于 AI,人向 AI 寻求架构和实现的建议,通过请教和学习弥补自己的知识盲区,通过动手和练习增长自己的能力短板。代理-雇主型(Agent-Boss):人类已经完全与 AI 脱节,无法理解 AI 的思维方式和实现细节,人只需要告诉 AI 自己能做什么,AI 负责进行问题分解和任务分配,人作为众多工具之一被 AI 调用。
在前三种模式中,人类开发者仍是软件开发的主导者和责任主体,而在后两种模式中,人类渐渐失去地位,而 AI 成为了实现层面的主导。这几种模式并非递进关系,因此并不冲突;就像平行宇宙一样,这些可能的未来都会发生,甚至会同时共存于一个世界,取决于场景具体程度、问题普遍性、任务复杂度、个人使用方式等诸多因素。
图源:使用 Bing AI 生成
那么,所有可能的模式之间是否有共性呢?是的,始终不变的是,问题的定义者和需求的提出方一直是人类,掌握验收权的最终用户仍是人类,只要软件开发的动机还是满足人类的需求。经历了 2021 到 2023 这两年,大多数开发者从一开始的忐忑到后来的祛魅,逐渐切身体会到当前的 AI 技术在实际工作中的能力和局限,并开始思考如何更好地使用这项工具来更好地完成自己的工作——没错,正确的态度是将 AI 当做工具来看待,无论它的能力多么强大,被替代的仍是我们现有的工具(Google Search、Stack Overflow、IDE,甚至编程语言和设计模式)。
在这个前提下,再争论 AI 是否会替代人类开发者的工作已经愈发没有意义,更实际的问题是开发者如何与 AI 相处才能提升自己的价值。这个问题可能根本没有确定性的答案,但我们可以从以上分析中推导出一个简单的判断原则:AI for developer 而不是 AI as developer,只要能更好地发挥人类开发者自身的价值,那么就是合适的相处之道。