该公司首席软件官张嘉妮表示,虽然凯捷的大多数客户不愿在生产中使用人工智能生成的代码,但该技术已经带来了开发人员和工程师可能尚未意识到的效率和生产力的大幅提高。
凯捷工程公司由全球 62,000 多名工程师和科学家组成,他们的工作是为无数客户创造产品,从制造汽车、火车和飞机的工业公司到独立软件供应商。
因此,当 2022 年人工智能辅助代码生成工具开始涌入市场时,这家全球创新和工程咨询公司注意到了这一点。毕竟,凯捷五分之一的业务涉及为面临数字化转型计划需求的全球客户生产软件产品。
根据 Capgamini 自己的调查数据,十分之七的组织将在未来 12 个月内使用生成式人工智能 (genAI) 进行软件工程。如今,30% 的组织正在尝试将其用于软件工程,另有 42% 的组织计划在一年内使用它。只有 28% 的组织完全放弃该技术。
事实上,根据 Capgemini 的说法,genAI 已经帮助编写了近八分之一的代码,预计在未来 12 个月内这一比例将达到五分之一的代码。
三年前,张嘉妮接任该公司首席软件官。在那段时间,她见证了 genAI 在提高软件开发团队的效率和生产力方面的应用呈爆炸式增长。但尽管 genAI 在生产可用软件方面表现出色,但张警告说,genAI 的成果还没有准备好用于生产,甚至还没有准备好创建公民开发人员队伍。开发人员和工程师在试用其使用时仍将面临许多问题,包括安全问题、知识产权问题和恶意软件威胁。
也就是说,张已经采用人工智能生成的软件工具来完成许多低风险的任务,并为她的团队创造了显着的效率。Computerworld与张谈论了凯捷工程公司 (Capgemini Engineering) 对人工智能的使用;以下是该采访的摘录。
您在凯捷的职责是什么? “我负责产品中的软件。该软件是如此普遍,以至于您实际上需要不同类别的软件及其不同的开发方式。而且,你可以想象,现在在将软件转移出去方面存在着巨大的推动力。”
您的人工智能生成软件之旅是如何开始的? “最初,我们考虑生成人工智能时主要关注某种创意元素。所以,很多人都在谈论构建软件、写故事、构建网站、生成图片和创造新事物。如果可以生成图片,为什么不能生成代码呢?如果您可以编写故事,为什么不编写用于构建软件的用户故事或需求。这就是正在发生的转变的心态,我认为现实是这是市场驱动动力的结合。每个人都想建立数字业务。您现在实际上正在与许多科技公司竞争,聘请开发人员来构建这些新的数字平台。
“因此,许多公司都在想,‘例如,我不能针对湾区的这些大型科技公司进行招聘。那么,我该怎么办?他们求助于人工智能……来应对[他们]没有人才库或资源来实际构建这些数字产品的事实。这就是为什么我认为现在这只是一场完美风暴。资源匮乏,人们真的很想建立数字业务,突然间,使用生成式人工智能来生成代码的想法实际上可以弥补人才的缺乏。因此,[他们]可以推进这些项目。我认为这就是为什么人们如此重视 [genAI 软件增强] 并希望朝这个方向努力。”
您如何使用人工智能来提高软件开发和工程效率? “我会将软件开发生命周期几乎分成几个阶段。有一个预编码阶段。这是您编写需求的阶段。您正在生成用户故事,并创建史诗。您的团队对他们将在该领域构建的内容进行了大量规划。我们可以看到生成式人工智能有一个额外的好处,那就是为你生成一个故事。您可以使用它生成需求。所以,它可以帮助你写东西,这就是生成式人工智能擅长做的事情,对吗?你可以给它一些提示,告诉它你想去哪里,它就会为你生成这些故事。
“第二个要素是[软件]构建阶段,即编码。这是人们非常紧张的阶段,这是有充分理由的,因为生成式人工智能的代码生成方面仍然几乎有点像魔法。我们不太确定它是如何生成的。然后还有很多关于安全性的担忧,比如它是从哪里产生的?因为,正如我们所知,人工智能仍在向其他事物学习。你必须问我生成的代码是否会被其他人使用?因此,人们对使用它很感兴趣,但在实际进行生成方面却有很多犹豫。
“然后是后编码阶段,包括部署、测试等所有内容。在这个阶段,我认为不仅是生成式人工智能,而且整个人工智能都有很多机会,这些都集中在智能测试上。那么,例如,如何生成正确的测试用例?你怎么知道你正在测试正确的东西?我们经常从许多客户那里看到,多年来他们实际上只是在该阶段添加了越来越多的测试,因此它变得越来越大。但是,没有人真正进入并清理那个阶段。所以,你正在运行无数的测试。那么你仍然有一堆缺陷,因为没有人真正清理他们试图检测的缺陷的测试。因此,很多事情都可以通过生成人工智能来更好地策划。具体来说,它可以执行很多测试优先级排序。您可以查看正在使用和未使用的测试的模式。而且,人们不太担心其中会出现问题。我认为人工智能工具在该领域产生了非常大的影响。
“你可以看到人工智能在不同领域扮演着不同的角色。而且我觉得前面的部分风险更小,也更容易做。也许它的作用不如整个代码生成元素那么多,但对于是否满意生成的代码,人们再次犹豫不决。”
在使用人工智能代码生成工具之前,确保现有代码库干净或无错误有多重要? “我认为这取决于你从什么出发。对于任何类型的人工智能技术,你都从某种结构、某种数据开始。你有一些标记的数据,你有一些未标记的数据,人工智能引擎只是试图确定模式和概率。那么,当您说要生成代码时,您的新代码基于什么?
“如果你要创建一个大型语言模型或任何类型的模型,你的起点是什么?如果您的起点只是您的代码库,那么是的,您遇到的所有残留问题很可能都会被继承,因为它是在不良数据上进行训练的。思考这一点就是你应该如何编码。很多人认为,“我不会傲慢地认为我的代码是最好的。”
“更通用的方法是利用具有更多代码集的更大模型。但代码越多,安全问题就越深。就像所有这些代码来自哪里?我是否为其他人更大的代码集做出了贡献?而真正可怕的是,如果你不太了解代码集,里面是不是有木马。所以,它有很多动态。
“我们面对的许多客户都喜欢这些技术。它太好了,因为它提供了一个解决人才短缺问题的机会,以便在没有人才的情况下真正建立数字化业务。但随后他们确实面临挑战。我相信人工智能的结果吗?我是否有一个足够大的代码库,让我可以轻松使用,而不仅仅是想象某个模型将来自以太坊来做到这一点。”
您是如何解决上一个问题的——使用庞大的 LLM 代码库还是坚持使用更小、更专有的内部代码和数据? “我认为这取决于客户的敏感性。我认为很多人都在玩代码生成元素。我认为他们中没有很多人将[AI]代码生成投入生产,因为正如我所说,该领域存在很多未知因素。
“我们发现更多的客户已经了解了编码前阶段的更多内容,并且他们也非常关注编码后阶段,因为这两个阶段的风险相对较低,但收益很大,尤其是在类似测试的领域,因为这是一种众所周知的做法。其中有大量数据,您可以快速清理它们并获得一些价值。所以,我认为这是一个非常容易实现的目标。然后在前端方面,你知道很多人不喜欢编写用户故事,或者需求写得不好,因此从中付出的努力是有意义的。”
您在 genAI 代码生成过程中遇到了哪些问题? “虽然它是最高值[等式的一部分]……但它也与生成一致的代码有关。但这就是问题所在。因为生成式人工智能不是规定性的。所以,当你告诉它,‘我想要两只耳朵和一条会摇的尾巴,它实际上并不会每次都给你一只拉布拉多猎犬。有时它会给你一只哈士奇。只是看看什么适合那个[法学硕士]。所以……当你改变一个参数时,它可能会生成全新的代码。然后,全新的代码意味着您将必须重做所有集成、部署以及由此产生的所有事情。
“还有一种情况是,即使你能够包含你的代码集,通过精心策划的良好工程实践[和]软件实践构建法学硕士,并用你自己的数据集对其进行补充 - 并生成你信任的代码 - 你仍然无法控制每次更改时生成的代码是否都是相同的代码。我认为该行业仍在努力找出这些要素,不断精炼,以了解如何保持一致性。”
您最喜欢的人工智能代码增强平台是什么? “我认为它是多种多样的。我认为这个市场的挑战在于它非常活跃;他们不断添加新的功能集,并且新的功能集有点相互重叠。因此,很难确定哪一个是最好的。我认为目前有一些技术处于领先地位,但与此同时,环境的动态变化使得您可以在接下来的八周内看到一些全新的产品推出。所以,它是多种多样的。我不会说现在有一个最喜欢的。我认为此时每个人都在学习。”
您如何处理 genAI 引入的代码错误?您使用什么工具来发现并纠正这些错误(如果有)? “我认为这就是你的测试问题。就像我说的,我们必须从根本上考虑一致性问题,因为每次我们生成代码时,它都可能以不同的方式生成。完善您的测试集并将其用作智能测试方式是确保您发现这些问题的一个非常关键的领域。我个人认为它们的存在是因为软件开发生命周期非常广泛。
“这完全取决于人们希望将后编码阶段的重点放在哪里。测试阶段是真正做好这一切的关键要素。 ...在这个领域,您可以快速利用人工智能技术,并将生产代码的风险降至最低。事实上,它所做的只是改进它。 [genAI] 正在帮助您更智能地运行这些测试集。这些测试集也将对您生成的代码非常有益,因为现在您知道您的受众也在测试什么。
“因此,如果生成的代码很糟糕,您就会发现这些缺陷。值得花费大量精力来研究该特定领域,因为正如我所说,这是一个低风险因素。有很多人工智能工具可以实现这一点。
“而且,并非一切都必须是生成式人工智能,对吗?你知道,人工智能和机器学习已经存在相当长一段时间了,并且已经做了很多工作来完善它们。因此,这些旧工具得到了很多好处和改进。市场有这样的感觉,他们需要采用人工智能,但人工智能的采用并不是最顺利的。那么[开发人员]是这么说的。 “让我们跨越式发展,开始使用生成式人工智能。”现实情况是,您实际上可以利用 12 个月前才上市的技术来解决很多问题。我认为这肯定有好处。”
您尝试过哪些生成式人工智能工具以及取得了哪些成功? “我们几乎尝试了所有这些。这就是简短的答案。它们都非常有益。我认为现实是,正如我之前所说,今天不同云服务提供商之间的 genAI 工具的情况相当可比。我不认为领先的与非领先的。我觉得他们都可以做一些非常好的事情。
“我认为挑战在于及时了解可用的内容,因为他们不断发布新功能。这是令人鼓舞的,但同时您必须找到一种方法来以有意义的方式实施和使用该技术。目前,他们推出这些功能的速度与行业采用的速度是无与伦比的。我认为还有比实际采用更多的功能。
“我们有凯捷研究院,通过该机构对高管进行了大量民意调查,我们发现大约 30% 的组织正在尝试 genAI。可能还有 42% 的人会在接下来的 12 个月内使用它。但这也意味着从采用的角度来看,那些在软件工程中实际使用它的人,我认为只有不到三分之一的人真正从根本上影响了他们使用生成器的生产流程。所以我认为市场仍处于试验阶段。这就是为什么所有工具在能做什么和不能做什么方面都具有相当的可比性。
“再说一遍,这并不是一个平台上的功能集是否比另一个平台上的功能集更好的问题。我认为更多的是应用它来解决产生影响的业务问题。”
您是否使用人工智能或生成式人工智能进行任何软件开发?暂时忘记开发前和开发后。您实际上使用它来生成您使用的代码吗? “我们的确是。即使对我们来说,它也处于实验阶段。但我们自己在改进生成式人工智能引擎方面投入了大量的工作,以便我们能够生成一致的代码。实际上,我们已经在所有这三个阶段(代码前建模、代码开发、代码后测试)与客户进行了大量的实验和概念验证。就像我说的,事前和事后是更容易的,因为风险较小。
“现在,客户是否愿意让 [AI] 生成的代码投入生产是一个不同的情况。因此,我们正在进行的概念验证不一定是生产。我认为……将其投入生产仍然是业界必须努力接受的事情。”
你们的人工智能工具生成的代码有多准确?或者,换句话说,该代码的可用频率是多少? 我从其他专家那里听说准确率从 50% 到 80% 甚至更高。你发现了什么? “说实话,我认为该代码非常有用。我认为这实际上是一个相当高的百分比,因为生成的代码并没有错误。我认为对生成代码的关注不在于它是否编写正确。我认为写得正确。正如我所说,问题在于代码是如何生成的,其中是否存在一些人们不知道的先天或嵌入的缺陷。然后您知道另一个问题是生成的代码从哪里来,以及您现在创建的生成的代码是否可以提供更大的池,并且安全吗?
“所以想象一下,如果我是一家工业公司,我想创建这个解决方案,并且我生成一些代码[其基础]来自我的竞争对手。我如何知道这是我的 IP 还是他们的 IP?或者,如果我创建了它,它是否会以某种方式通过以太迁移到其他人生成完全相同的代码?因此,从这个意义上说,除非你有一个非常私有化的 genAI 系统,否则事情会变得非常棘手。”
即使代码本身由于某种原因无法使用,人工智能生成的代码仍然有用吗? “这是真的。有很多代码一开始可能无法使用。就像任何学习系统一样,您需要给它更多提示,以便根据您的需要进行定制。因此,如果您考虑基础工程,您首先需要定义一些整数。如果 genAI 可以做到这一点,那么您现在就可以节省一些时间,不必输入所有定义的参数和整数参数以及所有其他内容,因为这些都可以预先生成。
“如果它不起作用,你可以给它一个额外的提示,说‘好吧,实际上我正在寻找一组不同的周期或不同类型的运行时间’,然后你也可以调整该代码。因此,你不必从头开始,就像写论文一样,你可以让别人写一个大纲,你总是可以使用一些介绍、结尾,其中一些不是内容的实际内容。您还可以使用生成式人工智能继续完善内容的核心内容。所以毫无疑问,这是一个很大的帮助。它可以节省您从头开始编写的时间。”
AI 或 genAI 是否允许您创建一支公民开发人员队伍? “我认为现在还早。人工智能可以让你自己的团队更快地做一些他们不一定想做的事情,或者从开发人员的角度来看,它可以减少生成测试用例或编写用户故事等的辛苦工作。它非常擅长从框架的角度生成代码大纲。但要让它独立地生成代码,我认为我们还处于相对早期的阶段。”
人工智能代码生成在提高效率和生产力方面的效果如何? “绝对是生产力。我认为这是开发者体验的一个非常重要的元素。这个概念是,如果你雇佣了一些非常优秀的软件开发人员,他们希望构建功能和新代码之类的东西,并且他们不喜欢承担更多的预编码职责。因此,如果你能为他们解决更多的辛苦工作,摆脱更多平凡的重复性事情,那么他们就可以专注于其中更多的价值创造元素。
“因此,对于生产力而言,我认为这是一个很大的提升,但这并不是开发更多代码。我认为很多时候都是为了开发更好的代码。因此,与其说我每天花了几个小时只是编写一个基本结构,不如说它现在是为我预先生成的。现在我可以考虑如何优化运行时间。如何优化消耗或存储等?
“因此,它可以让你解放思想,思考额外的优化,让你的代码变得更好,而不仅仅是弄清楚代码的基础是什么。”
我从工程师和开发人员那里听到的其他用途之一是,genAI 通常甚至不用于生成新代码,但它最常用于更新旧代码。您是否也看到了该用例? “我认为所有 genAI 工具都将生成新代码,但区别在于您刚才强调的一个非常重要的用例:旧代码迁移元素。
“我们还发现,很多客户的系统都严重过时——他们的系统已经有 20 年甚至 30 年的历史了。其中可能存在无人能理解的专有代码,并且他们已经失去了该技能。您可以使用人工智能辅助代码生成和您自己的团队来创建一个理解旧代码的知识库,这样您现在就可以实际摄取旧代码并理解元模型是什么 - 您正在尝试什么去做?什么是正确的输入和输出?从那里,您实际上可以用实际上可维护的新语言生成新代码。这对客户来说是一个巨大的好处。
“所以,这是人工智能技术的一个伟大应用,它仍然生成代码,实际上并没有改变旧代码。您不希望它更改旧代码,因为它仍然难以管理。所以你想要的是让它理解你正在尝试做的事情的概念,这样你就可以真正生成更易于维护的新代码。”
对于考虑使用人工智能进行代码生成的人,您还有其他建议吗? “我认为这是一个伟大的时刻,因为这项技术非常令人兴奋。人们有很多不同的选择可供选择,我认为有很多容易实现的目标。我觉得生成式人工智能也是一个巨大的好处,因为它向人们介绍或重新介绍了人工智能实际上是可以实现的概念。
“很多人认为人工智能就像金字塔顶端的技术。他们认为,我能够实现这一目标,但前提是我清理了所有数据并正确提取了所有数据。然后,如果我完成了所有这些步骤,我就可以使用人工智能了。但通用人工智能的普遍性和吸引力在于,它甚至在此之前就可以实现。现在就可以开始了。在达到这一点之前,您不必清理所有内容。您实际上可以一路迭代并获得改进。
“如果你看看软件开发生命周期,就会发现现在有很多领域可以低风险地使用人工智能。我什至不会只说生产力。只是它对您想要产生的结果更有价值,因此这是一个很好的开始机会。这并不是结束一切的全部。你知道,它不会成为你的公民开发人员,但它会增强你的团队。它提高了生产力。它减少了劳累。所以,现在正是开始的好时机。”