最佳实践:基于LLM在DevOps领域的实践实现效能提升丨IDCF

共 9819字,需浏览 20分钟

 ·

2024-04-15 07:58

点这里👇星标关注,获取最新资讯!


沈威乾 研发效能(DevOps)工程师(中级)认证学员

👉摘要

随着大型语言模型(LLM)技术的迅速发展,软件工程师面临着新的开发范式。本文探讨了LLM在DevOps领域的应用的探索实践。文章首先介绍了LLM在DevOps发展背景、将LLM集成至DevOps流程、组织推广和提效方式等相关实践,然后探讨了LLM的原理及其限制,最后展望了LLM在DevOps领域的未来,强调软件工程师应积极拥抱变化专注于核心价值,利用LLM作为可靠的协作伙伴,提高项目交付的效率和质量,同时保持自身的竞争力。

👉关键词:LLM, DevOps,Copilot

01



背景

DevOps 

在2023年,大型语言模型(LLM)在DevOps领域的应用经历了显著的增长,尤其是在软件开发、项目管理和质量保障等方面。

LLM技术在过去一年中取得了显著的进步,随着OpenAI的GPT-4.0和ChatGPT的发布,模型的能力在多个方面实现了显著的能力提升,包括不限于更高级的语言理解、更好的上下文理解、更精确的的推理能力。GitHub的Copilot也得到了快速的发展,Copilot是由GitHub与OpenAI合作开发的AI代码补全工具,利用LLM技术为开发者提供实时的代码建议和补全功能,极大地提高了编程效率和代码质量。这一工具的推出,标志着LLM技术在软件开发领域的实际应用迈出了重要一步。

在此基础上,更多的企业开始探索将LLM集成到DevOps流程中,进行了LLM与软件开发的结合探索,特别是在代码自动补全和AI辅助工具方面。这些探索提高了研发人员的开发交付效率。此外,云服务提供商向用户介绍了LLM技术的应用,及如何利用LLM技术来改进软件开发管理的新趋势和方法。对LLM技术进行封装和集成,推出了各种基于LLM的服务,这些服务在软件项目管理和质量保障方面发挥了重要作用。

然而,尽管LLM技术在提高效率方面展现出了巨大的潜力,但在企业规模应用、信息安全、与现有工具的整合等方面仍面临挑战。因此,大多数企业目前仍处于探索和尝试落地的阶段。总的来说,LLM技术在DevOps领域的应用正在逐步深入。尽管面临一些挑战,但其提供的新的工具和方法预示着这一领域的未来发展潜力,为软件开发和项目管理带来了新的机遇。

本文将围绕以下方式组织,第二章讲述公司基于LLM在Devops领域进行的实践探索,第三章关注LLM的原理和限制从而最大限度发挥其长处,第四章展望了LLM在DevOps领域的进一步发展方向和从业者应该如何面对新的技术。

02



探索实践

DevOps 

公司通过LLM集成DevOps的流程中从而提升研发效能的探索实践,本章从三部分展开,首先是公司将LLM技术融入到DevOps流程所做的探索和实践,其次是如何从组织层面维度在全员中推广相关的产品,最后是团队成员通过哪些具体的工具在DevOps流程中进行提效,着重以研发视角展开。

2.1 LLM集成DevOps流程

作为大型互联网公司,既要拥抱前沿的技术,又要考虑到数据的隐私和安全,同时模型要符合自身业务,公司选择内部私有化部署,并通过内部数据进行定制化模型训练。由于模型部署在公司的内部服务器上,所有数据都留在公司的网络内,因此可以更好地控制数据的访问和使用。训练数据是内部的,因此可以更好地保护敏感信息,避免数据泄露风险,同时作为有严格合规要求的公司,内部部署可以确保合规性。使用公司内部的数据来训练模型,可以使模型更加符合公司的业务需求,提高输出的准确性和相关性。

这种内部定制方式部署需要大量的计算资源,包括高性能GPU和大量的存储空间,以及专门的部门支持。定制化模型训练可能需要较高的初始投资,包括数据准备、模型训练和验证等。另外需要有足够的技术能力来维护和更新模型,包括软件工程师、数据科学家和IT运维人员。公司都需要投入相应的资源来确保模型的安全、准确和高效运行。

在具备了LLM基础的能力之后,需要考虑如何将模型集成到现有的Devops工作流程中,以及如何培训员工有效地使用这些工具,利用LLM技术提升工作效率和创新能力。公司在探索过程中提供的工具中包括聊天对话网站、浏览器插件、集成开发环境(IDE)插件、API接口、定制处理的数据信息、智能体、会议助手等。

对话网站和浏览器插件都提供了允许研发人员直接使用LLM相关能力以对话问答的方式处理遇到的文档中有疑问的信息,或者一些基础需要检索的信息,从而提升效能

集成开发环境(IDE)插件可以直接在研发人员的IDE中集成的插件,方便在编写代码时快速获取帮助或生成代码片段。在下文中具体讲所涉及的相关功能。

API接口、定制处理的数据信息、智能体等则提供了基于LLM底层模型进行二次开发的能力,对于公司的基础服务如核心的PaaS服务、DevOps的CICD流水线服务,将LLM能力和自身的数据整合至服务中,为一线研发使用和问题排查上提升效率。

公司不断的迭代相关的工具,确保交互尽可能简单和直接,充分利用LLM的能力,以便研发人员可以专注于他们的核心任务。

2.2 组织推广

LLM的发展一直都备受公司内部的关注,包括决策层在内,都认为其会极大的改变和增强员工的工作效率,即使在初期没有实际的完备的产品,也鼓励大家拥抱新的技术,了解相关的知识。

随着底层能力初步建设和完善,公司也进行组织层面的推广,首先在公司有影响力的技术文件中明确了要积极利用LLM提升研发效能,同时对于工程领域的细分的技术线(如前端、后端、数据开发等)进行取消,公司认为随着LLM的发展,未来工程师的能力应该是更加全面的,未来组织形态更应该以交付价值为关注点,团队乃至研发个体具备更全面的能力来提升交付能力。

与此同时举行了公司级别的LLM主题的黑客马拉松,通过大家的集体智慧来探索相关产品和技术领域能够通过LLM赋能的场景。在比赛直播和赛后分享作品的过程中,大家加深了技术的理解,同时展示很多的技术方向,更重要的是从组织层面尽可能宽泛的去影响其他研发人员的好奇,提升相关LLM产品的使用。

公司培训中心将LLM做为年度最重要的主题展开系列讲座,分享嘉宾包括外部的国内知名该领域的社区组织者,高校相关领域的教授,以及业内知名企业负责LLM 赋能DevOps的专家和LLM相关的创业公司的负责人,也包括公司内部负责基础模型和集成开发环境(IDE)插件的负责人等。分享主题上既包括LLM的原理和发展史,提示词工程和技巧、LLM Agents、向量数据库等,也包括如何更好的使用集成开发环境(IDE)插件相关的功能来提升研发效能。

随着公司基础LLM能力的完善,能够确定一些LLM在研发过程中的具体应用场景,如代码辅助、文档生成、错误诊断等,将LLM集成到研发工具链和流程中并进行了快速的迭代,如集成开发环境(IDE)插件、代码仓库评审和发布系统变更提示、编译异常的错误分析。从公司层面推广工具的使用,通过实施监控机制,跟踪LLM的使用情况和效能指标。评估LLM对研发效能的实际影响,并根据评估结果进行调整和优化。

2.3 提效方式

下面主要从研发的视角来看具体的LLM 工具在DevOps的哪些场景起到了提升效能的目的,我们从一次典型的交付流程来看,包括产品设计、架构设计、开发、测试、部署和运维等相关环节,当前能够通过集成开发环境(IDE)插件提升效能的环节主要是开发和测试环节。代码进入CICD流水线后,编译过程中如果报错会给出分析判断以及相关组件潜在风险。研发人员提交PR后,会给出提交代码的评审意见。

集成开发环境(IDE)插件提供的功能,提供了代码自动补全,解释代码,添加注释,代码重构,生成单测用例,窗口对话,自定义Prompt等相关功能,下面具体阐述相关功能对研发效能的提升。

1.自动化代码生成和补全:虽然对于涉及多个类协作完成的较大功能点还比较困难,但是对于拆解后等单个类中功能点,如单个函数功能,LLM可以理解自然语言描述的代码需求,自动完成函数或类定义,以及根据自然语言描述生成或建议代码片段。帮助开发人员在编写代码时减少重复性工作,提高编码效率,此外LLM通过学习一些标准的最佳实践,并可能帮助避免常见错误,提升代码质量。根据从研发收集的反馈来看,在编写一些基础模版代码,其代码质量高于开发人员的平均水平。

2.代码解释、添加注释、代码重构:大型互联网公司的项目往往经历了很多年、很多开发人员的迭代,在初期由于业务的快速发展,往往牺牲开发质量来满足业务需求,项目规范要求较低,导致文档缺失,需要从代码中去反推和理解业务。通过插件的代码解释功能能够帮助开发人员更快的理解代码的业务含义,同时也可以生成相应的注释,提升项目的可维护性,后续其他研发人员能够更快速的理解含义。当新的需求涉及原有质量较低的代码片段时,可以通过插件代码重构功能对原有代码进行重构,但是也存在优化后出错的概率,需要研发人员有能力进行判断。

3.窗口对话,当在开发过程需要查询一些资料和API的使用方法时,原有的方式是跳出开发工作区,去搜索引擎中查询相关的问题,通过窗口对话无需跳出工作开发区,直接通过问答的方式获取信息,更有助于研发人员保持专注和心流的状态。

4.自定义Prompt,通过保存个人常用的Prompt并关联相关的快捷键,在后续类似的场景可以快速的通过快捷键使用提示词从而获得相应的回复。

5.单元测试的编写,在公司内部很多团队都由于开发节奏和项目的历史原因而不进行单测的编写,随着稳定性的要求越来越高,越来越多的部门强制推动增量代码的单元测试的编写,通过插件的单测能力,能够针对增量代码进行单元测试用例的编写,研发人员能够在此基础上进行修改和优化,以较小的工作增量保证代码的质量。

6.智能错误检测和修复:LLM可以分析新增的代码,识别潜在的错误和问题,并提供修复建议,从而帮助开发人员在早期发现并解决缺陷,提升代码质量。

7.智能问题定位和故障排除:在研发进行自测过程中出现问题时,LLM可以帮助开发人员快速排查错误,定位问题根源,提供解决方案建议,减少故障排除时间。在CICD流水线编译过程发生报错或潜在的风险后,能够给出相关的原因和修复方案从而更快的发现和修复问题。

8.除了集成开发环境(IDE)插件外,CICD流水线基于LLM进行二次开发,在研发人员进行发起PR后,可以智能代码审查,提供代码质量、安全性、性能等方面的建议,帮助开发人员帮助发现潜在的问题,并提高代码质量,减少返工。

上述提到的主要是开发阶段的不同场景下通过集成开发环境(IDE)Copilot插件和LLM集成CICD流水线来进行研发效能的提升。除此之外在测试环节也可以通过LLM 完成相关的效能提升,包括测试用例和自动化脚本的编写。利用LLM生成测试用例,确保代码的每个部分都经过适当的测试,从而保证代码的正确性和健壮性,通过减少手动编写测试用例的工作量来提升效能。利用LLM自动生成自动化测试脚本,提高测试的自动化程度,减少手动测试的工作量。

除了上述典型的交付流程场景外,在其他的一些场景下,LLM也能够起到研发效能提升的作用,对相关场景和所使用LLM能力进行简述。

复杂的业务系统往往有着较多的业务知识背景,当新的成员进入团队时,能够快速的学习相关的业务概念并映射到系统里至关重要,只有如此才能和团队的其他成员进行协作。对于复杂的业务系统存在着很多的产品文档,可能分散在不同的空间目录下,查找并完整阅读可能比较低效,通过LLM结合知识库的方式构建对应的智能体,把产品知识文档进行切片然后向量化后续通过向量检索进行召回,再作为上下文输入到大语言模型进行归纳总结。这样团队新人通过概述性的文档进行了解系统后,在遇到问题后和智能体进行问答,进一步深入理解系统,减少对团队成员打扰,同时自身以更高效的方式学习业务。

采用和上述相同的技术方案,可以用于公司相关的PaaS服务的chat bot,以及非研发人员使用OLAP平台进行数据分析的任务。公司级的PaaS服务往往沉淀了很多的文档,包括快速入门、最佳实践、架构设计、实现原理、FAQ等,研发人员在开发需求或者排查相关的问题时,原有的路径是要寻找各种相关的文档,确认没有相应的解答后才能向提供方发起工单,效率很低,在LLM基础上的chat bot能够更快通过问答的方式给出相应的资料和解答。非研发人员(产品、运营)使用OLAP平台进行数据分析时,原有的路径需要把想要的指标以自然语言的方式给相关的研发人员,研发同学在将其转换成对应系统的检索语句,查询后将结果返回给非研发人员,这个过程本身对于研发同学的价值产出很小,但是又是不得不完成的任务,在OLAP平台提供的LLM的chat bot,非研发同学可以直接通过对应自然语言转换成对应的查询语句,自行完成相关的分析任务。

此外,LLM可以作为学习工具,帮助开发人员快速理解新的编程语言、框架和技术栈,通过快速学习其他的技术栈构建出工作中所需要的工具,提升对应环节的效率,从而最终提升研发效能。例如服务端研发人员通过和LLM进行对话的方式快速学习了Chrome插件开发的方式,通过开发浏览器插件来记录RPC复杂接口出入参数从而提升接口的自测效率。

通过这些方式,LLM可以帮助DevOps团队提高工作效率,加速交付价值,同时减少错误,最终提升整个软件开发生命周期的质量。然而,需要注意的是,LLM生成的内容可能需要人工审核和验证,以确保其准确性和安全性,在下章我们进一步讲述。

03



原理及限制

DevOps 

为了更好的使用LLM在DevOps领域的提升效能,我们应该尽量深入的理解LLM的原理和限制。

大型语言模型(LLM)是一种基于深度学习的自然语言处理模型,它通过分析大量文本数据来学习语言的复杂结构和规律。这些模型通常采用神经网络架构,如Transformer模型,并经过预训练以理解和生成自然语言。LLM能够处理和生成文本,回答问题,翻译语言,进行文本摘要和创作。在DevOps领域,LLM可用于自动化文档生成、代码审查、错误检测和自动化测试。它们可以帮助开发人员更快地编写代码和识别问题,从而提高开发效率。

从它的原理可以看出,LLM是通过学习已有的数据,在海量参数的神经网络架构基础上涌现的能力,它的可靠性取决于它们获取的数据。如果向它们提供虚假信息,它们就会在回答用户询问时提供虚假信息。在DevOps领域,以代码补齐的功能为例,LLM也是通过学习公开的和企业内部的代码库来提供相应的输出功能,在此过程中如果学到的代码是低质量的、甚至包含各种bug的代码也有可能导致给用户提供的代码质量很差,导致采用率很低,消耗了计算资源,但没有提升效率。

LLM 有时也会“产生幻觉”:当它们无法提供准确答案时,它们会制造虚假信息。在DevOps领域,如果我们基于对话框进行相关技术问题进行对话或者对一段代码片段进行重构时,会存在着错误回答的概率,而即便有时上下文中已经告知LLM,在后续的对话中,依然可能存在同样的错误而没有得到纠正。这样的限制其实对研发人员提出了一定的要求,具备相关知识能够辨别出是否正确。

在安全方面,除了可以通过恶意输入操纵 LLM,使其提供某些类型的响应,另外在DevOps领域,更常见安全问题之一是,用户可能为了提高自己的工作效率而将安全的机密数据上传到 LLM 中。LLM 使用它们接收到的输入来进一步训练它们的模型,但是它们在设计上没有安全保险库功能,它们可能会在响应其他用户的查询时公开机密数据。比如企业内的文件有不同的安全等级,一些机密性高的文件和系统,在企业安全架构上只允许特定的人群看到,而由于LLM 设计上的缺陷导致相关信息被不具备权限的用户看到。

04



前景

DevOps 

4.1 LLM在DevOps领域展望

虽然LLM在DevOps领域提升效能存在着各种潜在的问题和挑战,但是随着技术的不断进步,我们可以期待未来LLM在DevOps领域的更广泛应用和改进。在DevOps领域,LLM的进一步发展方向可能包括以下几个方面:

1.更深入的代码理解和生成:随着模型能力的提升,LLM将能够更深入地理解代码的结构和逻辑,从而在代码生成、审查、bug修复、代码优化等方面发挥更大的作用。当前的代码补全更多的是聚焦在单个类内进行补全,随着能力提升可以更进一步的在整个项目层面进行代码补全,另外LLM可以自动识别代码中的潜在错误,并提供修复建议。

2.内置规范,提升代码质量:架构、编码规范内建到 AIGC 工具中。基于此,才能提高软件开发的 AIGC 质量,强化代码的可用性。通过内置的规则,使得代码在生成的时候,符合团队制定的架构、编码规范,提升代码的质量。

3.更智能的自动化:LLM可以进一步集成到持续集成/持续部署(CI/CD)流程中,通过结合代码变更工具来分析变更带来的影响和重点回归的测试用例,自动触发相应的测试。

4.跨领域的知识融合:LLM可以结合其他领域的知识,如系统架构、安全、业务逻辑等,提供更全面的DevOps支持。例如,LLM可以分析系统日志,识别潜在的安全威胁,并建议相应的防御措施。

5.个性化和自适应的DevOps工具:LLM可以根据开发者的个人习惯和项目特点,提供个性化的开发建议和工具配置。例如,LLM可以根据开发者的编码风格进行代码编写,通过快捷键设置使用LLM 能力,从而提升研发效能。

6.实时协作和交互:LLM可以成为开发团队之间的实时协作工具,帮助解决沟通和协调问题。例如,LLM可以作为会议助手总结DevOps会议中的讨论的事项和接下来的todo list。

7.可解释性和透明度:随着对模型决策过程的要求越来越高,LLM的可解释性和透明度将成为重要的发展方向。开发者和运维人员需要理解LLM的推荐和决策依据,以便更好地信任和利用这些工具。

8.合规性:随着LLM在DevOps中的应用越来越广泛,确保其符合合规要求将成为一议题。例如,LLM需要确保处理的数据符合隐私保护法规,生成的代码不包含版权问题。

这些发展方向都需要跨学科的合作,包括数据科学家、软件开发者、运维工程师和法律专家等,共同推动LLM在DevOps领域的创新和应用。随着技术的不断进步和数据的不断丰富,未来的LLM将会更加成熟和强大,在DevOps领域得到更广泛的应用和推广。

4.2 从业人员专注核心价值

LLM的发展对于软件工程师而言开启了新的开发范式,作为从业者既不应该过分担忧的技术对自己的取代,也不应该无视其快速的发展,应该更好的使用相关的技术提升项目交付的效率和质量,让其成为一个可靠的协作伙伴。

在LLM的快速发展的背景下,软件工程师应该将更多的精力投入到到更复杂、更难以自动化、LLM难以替代的环节,如需求的梳理、架构的设计、复杂问题的解决等,下面进行简单的阐述。

在未来需求的梳理和架构的设计是软件工程师的最核心的竞争力之一,LLM难以完全替代。提升需求分析能力,学习如何更准确地理解产品需求,并将其转化为技术需求。通过加强架构设计能力,设计可扩展、可维护和易于部署的系统架构。LLM短期内还是难以完全创新的设计一个没有学习过的系统,以及系统非功能性的约束的方案设计方式。

LLM可能提供一些优化系统的通用建议,但是对于实际的业务系统而言,LLM无法提供具体系统性能优化的实践步骤,因此软件工程师需要在这方面投入更多精力,对系统进行性能分析、调优和优化,以提高系统的稳定性和效率。

LLM无法完全理解复杂问题的背景和上下文,因此软件工程师需要在这方面发挥主导作用,理解问题本质,提升问题解决能力,准确快速的分析问题、定位问题和提出解决方案。

LLM无法完全理解团队成员之间的沟通和协作需求,个人要提升团队协作和沟通能力,通过和团队成员有效沟通,并推动团队协作的顺利进行。

与此同时,利用LLM来辅助完成一些重复性或模板化的任务,或者通过拆解某些任务将其部分子任务自动化或辅助化,以提高工作效率。通过这样的策略,软件工程师可以在LLM的背景下发挥更大的价值,并保持自己的竞争力。

在LLM快速发展的过程中,从业人员应该拥抱新的技术,让其替代工程师更初级的工作,让自身聚焦于需求理解、分析和拆解,架构设计,理解问题本质等工作维度,专注核心价值。

参考文献

[1] ZHAO W, ZHOU K, LI J, et al. A Survey of Large Language Models[J].

[2] Phodal Huang LLM 赋能的软件架构:适应代码生成架构,改善生成质量瓶颈 2023年7月

与其临渊羡鱼,不如退而结网,用力拥抱梦想!!!

《研发效能(DevOps)工程师 职业技术认证》

掌握端到端的研发效能知识体系,是想要成为高级管理者的必备技能!

九期班·4月20日!🔥席位不多,尽快上车!扩展职业发展与晋升之路!

浏览 143
10点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
10点赞
评论
收藏
分享

手机扫一扫分享

分享
举报