思码逸创始人 & CEO 任晶磊在 2023年3月4日于上海举办的 LeaTech 全球 CTO 领导力峰会上作为演讲嘉宾分享了主题为《ChatGPT 时代的软件研发数据与效能提升》的演讲。
💡文字为分享内容的提炼,您可以在思码逸研发效能公众号查看完整分享视频及获取演讲PPT。
我在清华大学获得博士学位后,加入了微软亚洲研究院,从事软件系统程序分析的研究。同时一直在关注机器学习领域的发展。现在,ChatGPT 技术确实让几乎所有人都大为震撼。
接下来我们将进入这项技术的干货内容,今天的演讲分为四个部分。
第一部分,我们将概述 ChatGPT 对软件工程的影响,不会局限于程序员如何提高工作效率,更会探讨对软件工程整体的影响。
首先,第一个方面是让大家写代码变得更快、更容易了,我认为这个话题无需赘述,因为我相信在座的很多人都有体验。在 ChatGPT 出现之后,另外一个新产品也是值得关注的——代码搜索领域的头部公司 Sourcegraph 正在推出一款产品 Cody(尽管还没有公测),它在后 ChatGPT 时代提供了问答功能。Cody 会结合你的领域知识、基于现有代码给出回答。我认为这个产品是值得大家关注的。
Sourcegraph Cody 编程助手
但综合来看,我们现在能看到的落地能力还不能够做到生成复杂项目级别的代码,只能帮助你写一些微观的代码。至于生成工程性的代码,我们可能还需要等待一段时间,像在《流浪地球》中机器人能够为你重写整个操作系统。我认为这种幻想目前仍然只存在于小说中。至于这种能力何时能够实现,我无法预测,因为任何预测都有可能被打脸。不太悲观地讲,我们的饭碗应该还是能够再保持几年的。这是第一个维度的影响。
但 ChatGPT 对软件工程的影响,不仅是让个人写代码的速度变快这么简单。我们可以问一个问题:如果你的团队中每个人的速度都快了10倍,项目进度会变快10倍吗?在座的都是技术管理者,很明显这个答案是否定的。因为在从创建到最后交付的整个过程中,写代码的时间可能只占10%-20%,软件工程中还有许多复杂的组织和流程因素。
因此,我们还需要看看 ChatGPT 是否能够解决软件工程中的信息不对称问题。因为当人数增加时,信息不对称就会存在,流程摩擦也会增加。想想我们每天要开多少会议,花费了百分之多少的时间。AI 能否在这方面发挥价值呢?这是和前面同样重要的维度。
如果在你的组织中有一个 ChatGPT 研发效能顾问,能够回答你有关项目和公司中各种问题,它就能够帮助我们减少信息不对称,并消除组织中流程摩擦。当然,有些会议需要与真人交流,但如果有些问题可以由 ChatGPT 直接解答,可能能减少20%的会议时间,这也是一种效率。因此,这个价值也是一个非常重要的维度。我们的许多客户都非常期待这样的能力。
第二部分,我们将从研发数据的角度探讨 ChatGPT,因为任何人工智能技术的训练和使用都需要数据作为原材料。因此,我们必须从数据的角度去思考这个问题。
ChatGPT 的基石大型模型,是基于公共数据中巨大的参数训练而成的,规模达到了千亿级别。但是,它并不了解私域信息、组织、团队和其他相关知识。那么,如何将这些知识传递给它,是我们当前所面临的最大瓶颈。
数据基本上可以分为两类:一类是你的代码,代码中保存了你的大部分软件知识;另一类是你的软件工具和开发行为的所有数据,比如你的工具中所有的交流互动流程数据,这部分数据是代码之外的。
具体来说,我们有三种途径:最右边是采用大模型的最典型方法,即提供提示(prompt)。与大模型交流时,你不仅仅需要问一个问题,还需要给它提供一些上下文和少量的样本,以解释你想要干什么以及你的情况。这里最大的挑战是你只能给出非常有限的信息,例如4K或8K。如果信息量太少,那么大模型无法回答你关于服务和知识方面的问题。这个带宽是非常小的。
最左边的方法是使用你自己的数据去训练大模型,你需要修改更新它的参数。然而,这种方法需要大量的时间和资源。中间的方式是自己训练一个小的模型去学习大模型,然后进行微调,以使其更适合你的特定任务。
在实际应用中,选择哪种方法取决于你的具体情况和需求。无论选择哪种方法,我们都需要理解大型模型的优势和局限性,并在实践中发掘其潜力。
总体来说,我们目前探索的方向是最右边的第三种路径。选择这个路径背后的逻辑是 ChatGPT 的核心思想,这种思路的成功在于使用全球公开的信息和1000亿参数来训练一个通用的模型,而不是针对特定领域去收集数据和优化模型。当需要解决具体问题时,只需提供一个小样本,模型就能够学习并回答问题。因此,我们仍然希望沿着这条路线前进。
第三部分,我们将介绍构建高质量研发数据基础的五个步骤。只有保证数据基础的高质量,ChatGPT 才能可靠地解决具体领域的问题。
第一步,需要完成原始数据的积累。我们意识到在研发中,这些数据本身就是重要的资产和信息源。我们建议使用像 Apache DevLake 这样的开源工具,快速跨过这个初始阶段。
第二步,在获取数据后,我们会面临数据质量问题。数据的健康度很重要,因为如果向算法提供60分的数据,是不可能获得90分的结果的。因此,我们建议使用代码分析技术来校准数据,夯实数据,以确保数据的质量。
第三步,需要进行自主分析,利用 BI 或可视化工具,从数据中解读信息,下探洞察原因推动度量-分析-回顾-改进)循环。
第四步,以目标为导向,采用 GQM (目标-问题-指标)方法,基于健康的数据进行系统洞察,可以参考文章《GQM 概述:构建研发效能度量体系的根本方法》进一步复用和丰富模板,沉淀知识。
第五步,基于ChatGPT 实现智能交互,满足灵活多样的信息需要。在 ChatGPT 之前,自然语言转 SQL 这一研究领域早已存在,而以 ChatGPT 为代表的新一代自然语言处理工具,将会给这个领域带来新的活力。
第四部分,我们深入上述的第五个步骤——智能交互,去探索 ChatGPT 在可靠的研发数据基础上,能够实现什么样的功能。
我们基于 Apache DevLake 的真实数据表,测试了 ChatGPT 理解人类常识、找到正确的表、处理复杂抽象问题等方面的能力。
第一个测试显示,ChatGPT 具备比较全面的人类常识,能够直接找到“打开 issue”、“issue 合作”等表述对应的数据,这意味着我们不需要提供额外的数据字典,来辅助它理解某个细分领域。
第二个测试显示,ChatGPT 具备处理复杂数据表的能力。我们提供了互相关联的 9 张表,其中有许多重复数据字段,而 ChatGPT 成功找到了正确的表,输出了正确的 SQL 查询。
第三个测试显示,当提出的问题比较模糊的时候,ChatGPT 尝试理解的方向也是合理的。我们的问题中包括了“近期”“PR 评审难度高”这样并不确切的表述,而 ChatGPT 在 SQL 查询中使用了“最近一周”、“PR 评论长度 > 500”“PR 评论数量 > 5”这些具体且合理的推测。
第四个测试不是基于研发数据做的,但也很有意思,所以和大家分享一下。我们用了自然语言处理数据集 Spider 里的一个超难问题来考验 ChatGPT。它给出的第一个 SQL 查询是错误的,接下来我们不给出任何提示或反馈,只是反复提问。在后几次尝试中,ChatGPT 成功给出了多种正确解法。
这说明 ChatGPT 可以通过多次尝试来自验证,提高数据解读的准确性。