自ChatGPT发布以来,上至企业、下到软件工程师都在致力于寻找如何通过使用大语言模型(LLM),来提高工作效率的方法。虽然大多数LLM都能够为复杂的问题生成代码示例,但是具体如何将其集成到软件开发环境的过程,却各有不同。
在最近的一项研究中,来自查尔姆斯理工大学(Chalmers University of Technology)、哥德堡大学(University of Gothenburg)和瑞典RISE研究所的研究团队,对10家不同公司的24名专业软件工程师进行了为期一周的跟踪调查。这些工程师在日常工作中都会使用到ChatGPT。他们的研究结果提供了一些有关软件工程师如何在软件工程中使用ChatGPT的任务类型、以及影响其使用体验等方面的重要因素与推断。总的说来,这些发现对于那些希望将LLM纳入日常工作流程的企业来说,具有非常重要的意义。
ChatGPT的软件工程任务
这项研究包括了对ChatGPT 3.5各个聊天会话的调查。由结果可知,软件工程师主要会在如下三类任务中使用LLM:
- 代码生成和修改:该类别也被研究人员称为“工件操控(Artifact Manipulation)”,其中包括了:生成、重构和修复代码等任务。在与ChatGPT的交互中,工件操控约占三分之一。此类交互通常较短,毕竟用户要么很快地收到了预期结果,要么会直接放弃尝试。然而,当用户持续尝试让ChatGPT提供源代码,或纠正其生成的方案中的错误时,双方就会出现较长的对话。
- 专家咨询:工程师经常会向ChatGPT寻求资源、指导、建议或详细信息,以协助其完成工作任务。此类互动的目的不是为了获得具体的解决方案,而是旨在获得正确方向的提示。因此,在这些互动中,ChatGPT充当了一个虚拟同事的角色,或是比搜索互联网更为有效的替代方式。而在参与研究的软件工程师的互动中,此类咨询的占比为62%。
- 指导和学习:软件工程师有时会使用ChatGPT获取与其工作任务相关的、更广泛的理论或实践知识。虽然此类对话只占整体互动的一小部分,但是会经常涉及到多个后续跟进的询问,以理清之前的答案。
优缺点
ChatGPT的最大优势在于能够帮助软件工程师学习到新的概念,毕竟与LLM交流所获得的专业知识,要比在互联网上搜索资源容易得多。
这项研究的参与者还使用了ChatGPT,来协助他们进行“头脑风暴式”会话。也就是说,在软件的开发、规划和设计阶段,LLM可以协助生成多种可供选择、且非常有价值的方案与想法。
在另一方面,一些参与者表示他们并不信任AI生成式工具,尤其是在处理公司特定的复杂任务时。这种不信任往往会导致他们对于ChatGPT所提供的任何建议,都要进行彻底的反复检查,进而使得结果可能适得其反。
另一个重要的问题是缺乏背景。由于LLM并不了解公司的具体信息,因此使用者需要为之提供相关的背景知识。否则,LLM在根据提示编译和提供上下文时,会增加“摩擦”,进而影响用户的使用体验。当然,在某些情况下,出于隐私考虑和公司政策,工程师确实无法共享详细的信息,这就可能会导致交互的不完整,甚至引发挫败感。
使用ChatGPT的第三个重要缺点在于减少了团队的交流和专注度。这往往在其他研究中较少被提及。参与者有时会直接使用聊天机器人,来回答各种问题。而这些问题其实本应由他们的同事来回答,才更为妥当且全面。同时,ChatGPT可能会降低使用者的专注度,毕竟软件工程师可能会花费更多的时间去调整提示,以生成完美的代码,而不愿自行修复略有缺陷的输出。
这对企业意味着什么?
作为一名软件工程师,您是否应该在日常的软件工程中利用LLM,来提高自己的工作效率,则完全取决于是否能够充分放大其优势并最小化其缺点。上述研究是在ChatGPT 3.5上进行的,而目前ChatGPT 3.5的性能已与GPT-4o和Claude 3 Opus等前沿模型的水平相差甚远。当前的模型拥有更广泛的知识,并在防止幻觉和虚假信息方面也更胜一筹。
不过,在企业应用方面,一些涉及到上下文的特定问题,即使用到最前沿的模型也无法很好地解决。例如,无论模型接受了多少训练,它总会对公司内部的专有信息不甚了解。因此,在工程师与模型进行交互时,如果聊天界面能够自动向模型提供上下文信息,则将会对用户体验的提升起到关键性作用。目前,业界已有几种方法可以做到这一点,其中包括:检索增强生成(RAG),即上下文信息在发送到模型之前,会被自动添加到用户的提示中。另外,LLM还可以被集成到用户的IDE(集成开发环境)中,在回答问题的同时,自动使用代码和项目文件作为上下文。
另一个有待解决的问题是:隐私和数据共享限制。许多公司对于可与第三方共享的信息种类有着严格的规定。这可能会限制工程师与ChatGPT等LLM的互动。目前,一种变通的办法是使用诸如Llama 3之类的开放模型。与私有模型相比,此类开源社区已经取得了令人瞩目的进展。同时,您也可以在自己的服务器上运行它们,并将其集成到自己的基础架构中,以便确保数据永远不会离开您的组织。
此外,上述研究也提出了一点:工程师在提示模型时所投入的精力。鉴于使用者提出请求和下达指令的方式,对于LLM性能的影响较大,因此减少提示工程的摩擦,会有助于改善用户体验,节省工程师与LLM交互的时间。目前,Anthropic的“提示生成器(Prompt Generator”和DeepMind开发的自动优化提示技术--OPRO,都在此方面表现卓越。
最后,该研究还提到了通过将LLM整合到团队工作中,可以在一定程度上缓解由于使用ChatGPT所导致的讨论分散和聚焦不集中等问题。例如,作为一款新的企业级聊天应用,Glue能够将LLM作为代理添加到各种讨论线程中,从而让孤立的LLM体验,升级为将AI代理植入群组对话中的效果。
毫无疑问,LLM将成为软件工程的重要组成工具,而并非简单的替代品。为了最大限度地利用好这个“脚手架”,我们需要让它扬长避短,充分发挥其在互动与生产式方面的优势。