受限于自身企业的规模与人员结构,AI 辅助软件工程(AI4SE)的设计与实施过程会有所差异。诸如于:
结合我们在其它组织的经验,以及 ChatGPT 给我们的建议,可以得到以下的 AI4SE 体系设计流程:
除此,设计适合自身公司的 AI4SE 体系是一项复杂且难度极大的工作。这一过程需要综合考虑公司的具体情况、业务需求以及现有的资源。
尽管生成式 AI 技术在软件工程领域的应用已经取得了显著进展,但在实际应用中,AI 技术的效果并不总是如人们所期望的那样。诸如于:
除此,AI4SE 的设计目标还应该考虑到企业的具体情况和需求。例如,对于一家初创公司来说,提高开发效率和降低成本可能是首要目标;而对于一家传统企业来说,提升软件质量和可维护性可能更为重要。
对于小型研发规模的组织来说,ROI 是一个重要的考量因素 —— 与规模化提升效率相比,提升开发人员的体验是一个更合适的目标。也因此,直接采用现有的 SaaS 服务是一个更为经济的选择,结合一些 “免费” 的 AI 工具,并 提供一些内部的培训和文档,就可以实现部分 AI4SE 的关键目标。
同时,在这一阶段,我们可以通过分析现有的 AI4SE 相关工具,来了解市场上的最新技术和趋势。诸如于,我们先前分析的一些工具链示例:
环节 | 头部 | 工具 | 特点 | 典型工具 |
---|---|---|---|---|
需求/项目管理 | Atlassian | Jira AI Assistant, Atlassian Intelligence | 构建交互式 AI 需求编辑器,提升需求编写效率。扩大生成式 AI 使用触点,提供 AI 跨工具链能力。 | Jira AI Assistant, Atlassian Intelligence |
开发与代码协作 | GitHub | GitHub Copilot, Copilot X, Copilot Workspace | 围绕代码开发、协作、构建为核心,以开发者体验作为度量体系; | GitHub Copilot, Copilot X, Copilot Workspace, Dynatrace Davis |
CI/CD | GitHub, GitLab | GitHub Action, GitLab | 结合代码平台,构建更符合开发者体验的开发体系 | |
测试 | JetBrains | Checksum, Testim Copilot | 生成式 AI 测试工具,提供测试用例生成、自动化测试、测试报告等功能。 | Testim |
文档与协作 | Atlassian | Atlassian Rovo | 通过生成式 AI 解锁企业知识的工具,内建和自定义知识管理智能体。 | Atlassian Rovo |
基础设施 | AWS/Sysdig | Amazon Q, Sysdig Sag | 在云平台上,关注在 AI 重新定义"安全左迁"。结合生成式 AI 与传统 AI 工具,进行云基础设施排错、问答、网络诊断等。结合云平台,提供对应 AI 辅助能力。 | Amazon Q, Sysdig Sag |
可观测性 | New Relic/Dynatrace | NewRelic Grok, Dynatrace Davis | 结合传统判别式 AI 工具,无缝辅助问题定位和修复,与问题回顾。围绕新兴 AI 技术栈构建 AI 应用可观测性。 | NewRelic Grok |
开发者工具 | JetBrains | AI Assistant, Grazie | 围绕开发人员日常活动,构建全面的 AI 辅助;在 IDE 构建精确的上下文,以获得高质量生成内容。 | AI Assistant, Grazie |
除此,由于小团队并没有规范的流程,在关键环节上可能是缺乏的,到底是结合 AI 来引入流程,还是放弃某个流程,是一个需要考虑的问题。除此,由于过往缺少 相关的规范,AI 并不定带来很大的受益,还可能会带来额外的成本。
对于中大型研发规模的组织来说,由于企业已经有成功的商业运营模式,与提升开发效率相比,提升软件质量和降低流程成本是更为重要的目标。毕竟,在过去的几十年间, 大量的企业在迭代自己的软件工程,从瀑布、敏捷到 DevOps,形成了一系列经典的工具和流程方法。
尽管,我们会统一来看待大型组织中的 AI4SE 体系设计,但是实际上,每个组织所考虑的首要问题是不同的。我们应该根据企业的具体情况和需求,来确定我们的目标?
除此,我们还需要考虑到团队的结构和组织文化带来的影响。诸如于,团队的拓扑结构会影响到团队的目标:
对于诸如平台型团队、SaaS 企业、云服务提供商等服务型团队来说,他们的目标可能是:
当然可能还存在其它类型的团队,受限于笔者的经验,这里不再一一列举。
通常来说,目标是分为多级的,类似于 OKR 的自上而下的目标设定。在 “初步明确 AI4SE 设计目标” 中指的是由高层决策者确定的目标,而在这里, 通常是真正的痛点和需求,需要由组织的中层管理者,诸如研发效能/工程效能团队等来确定。当然了,再往下,就是由团队的一线开发人员来确定,诸如更详细的 实施细节和指标等。
当企业构建成熟的 DevOps 流程时,AI4SE 的实施会更加顺利。下图是,Thoughtworks 在 2023 年初对 AI 辅助软件工程的流程分析,即在软件开发的不同阶段,AI 可以提供哪些辅助功能:
我们就可以探索如何在不同阶段使用 AI 工具,而在这时需要不同的角色参与到这个过程中,以确保我们设计出来的体系符合不同角色的需求。 例如:
而随着我们探索的进一步深入,可以建立多阶段协同的 AI4SE 体系,如:AI 根因分析时能自动修复代码问题。
市面上已经有大量的关于软件工程效率和 AI 相关的数据分析报告,诸如于 JetBrains 和 GitKraken 的 2024 State of Git Collaboration 年度报告,会指出:
而其中会发现团队在上下文切换、不明确的优先事项和无效会议等方面存在问题,导致浪费时间和精力,真正在编码的时间不到总工作时间的 40%。
除此,再加上不明确的优先事项,使开发人员不确定哪些任务需要立即关注,这些陷阱可能会创造一个充满挑战的工作环境。 为了解决这些问题,团队应实施清晰的沟通渠道,以减少上下文切换的需求,并简化会议议程,以确保每次会议都有明确的目的和清晰的结果。
"上下文切换、不明确的优先事项和那些永无止境的会议。它们感觉像是烦恼,而 GitKraken 的这份报告有数据证实它们确实是烦恼。作为开发人员和开发团队, 是时候寻找匹配我们需求的工具和工作流程,消除让我们不开心的噪音。进入状态,构建出色的软件!" —— GitKraken CEO:Matt Johnston
通过识别这些痛点并针对性地引入 AI4SE 工具和流程优化,团队可以显著提升工作效率和满意度,为构建更高质量的软件奠定基础。
在原型开发阶段,可以尝试不同的 AI 技术,如机器学习、深度学习、自然语言处理等,以确定最适合公司需求的技术。 而在实际应用中,需要考虑 AI 模型与基础设施的集成、数据安全性、模型解释性等因素。
由于,大量的 AI 科研人员使用的是 Python 语言,已经有大量的 AI 开发框架和基础设施, 因此人们喜欢优先考虑 Python 作为 AI 开发语言。这种趋势也从科研和一些基础设施影响到了应用层。如在 2023 年,Python 生态下的 LangChain 和 LlamaIndex 是人们构建生成式 AI 的两个主要框架。
回到企业应用开发时,可能更倾向于使用 Java、C++ 或其他语言。 诸如于我们在设计 Unit Mesh 相关开源方案时,由于内部大量的基础设施是建立在 JVM 上,因此我们选择了 Kotlin 作为主要的开发语言,开发了对应的 LLM 开发框架 ChocoBuilder,以支持 AI 模型的快速构建。如今不同的语言也有不同的 LLM 开发框架,如:Spring AI 等。
在典型的向量数据库层面,没有技术栈限制的组织,可以灵活地选择新的向量数据库,如:Milvus、Qdrant 等,以支持 AI 模型的快速检索。而有技术栈限制的组织, 往往会结合过往的技术栈,如支持向量搜索的 ElasticSearch 版本,PostgreSQL + pgvector 等。
在另一方面,我们注意到,国内的AI辅助编程工具,早期大多采用与 GitHub Copilot 类似的技术栈、算法和交互方式。许多领先的AI辅助编码工具,在代码分层、 文件命名以及变量命名等方面,都展现出高度的相似性,其精细程度,宛如天工。
考虑到在这些 AI 辅助研发领域,诸多东西都是相似的,我们可以参考主流的技术栈实现与实现思路:
只是呢,算法、工具和技术栈等都存在学习成本,还需要结合团队的实际情况,选择合适的 AI 技术。诸如:Continue.Dev 采用 JavaScript + WASM + LanceDB 作为本地向量技术栈, 而通义灵码采用的是 RocksDB 作为本地向量技术栈。
在构建 AI4SE 体系时,跨学科团队的协作至关重要。AI 工程师与数据工程师通常在算法设计、模型训练和数据处理方面具有专长,但他们可能不熟悉软件工程的最佳实践、 架构设计和代码维护。而软件工程师则在构建可靠、高效的软件系统方面有丰富的经验,但在 AI 模型的开发和调优方面可能缺乏深入的了解。
创建一个跨学科团队,结合两者的优势,是成功实施 AI4SE 体系的关键。:
当然了,如果能定期与其它团队进行交流,也是非常有帮助的。诸如于我们在 Thoughtworks 的开源项目中,我们会定期与其它团队进行交流,以了解其它团队的 AI4SE 体系设计,以及其它团队的 AI4SE 体系设计的优势和不足。
相似的,构建这种跨团队的激励机制和协作,也是另外一个非常大的挑战。
笔者作为一个典型的工程师,会更倾向于认为软件工程是 AI4SE 的基础。理解软件工程的基本原则和最佳实践,是这个团队必须要具备的能力。诸如,你需要理解
诸如此类的还有开发人员的日常工作流程、代码审查、代码合并、代码测试等是如何进行的,这些都是 AI4SE 体系设计的基础。尽管,你可以通过对开发人员进行 访谈、观察开发人员的日常工作流程等方式,来了解这些基础知识,但是,如果你自己不具备这些基础知识,那么你很难设计出一个符合实际需求的 AI 工具。
一个早期可工作的原型是整个体系的关键,它可以帮助团队快速验证可行性,并决定下一步的发展方向与资源的多少。通常来说,在当前阶段,我们可以看到诸多 企业会基于市面上开源的成熟或者半成熟的 AI4SE 工具,进行原型开发。
我们在 2023 年的早期构建了开源的 AI 辅助研发工具 AutoDev,作为国内首个开源的 AI 辅助研发方案。通过 GitHub 的 issue,我们看到了大量的企业和团队基于其进行原型开发:
类似的,我们也可以在企业内部以相似的方式,基于市面上的开源工具,进行原型开发。
我们在设计 LLM 开发框架 ChocoBuilder 时,构建了一系列帮助开发人员快速构建原型的能力, 以验证 AI 模型在实际项目中的应用效果。如下是 ChocoBuilder 构建 RAG 的示例:
@file:DependsOn("cc.unitmesh:rag-script:0.4.6")
import cc.unitmesh.rag.*
rag {
indexing {
val chunks = document("README.md").split()
store.indexing(chunks)
}
querying {
store.findRelevant("workflow dsl design ")
.lowInMiddle()
.also {
println(it)
}
}
}
在这个示例中,我们使用 RAG 脚本将文档内容分块并进行索引,然后通过查询相关内容,展示了如何在开发环境中快速测试和集成 AI 功能。
在企业中,由于多数工具团队在过往有失败的工具推广经验,所以在推广工具时,往往会采用渐进式的策略,以有效降低风险,并使团队能够逐步适应新技术。也因此, 如何设计合理的度量体系来监控和评估 AI4SE 的效果是至关重要的。
通常来说,我们会关注于以下几个方面:
需要注意的是,由于统计口径上的差异,会导致不同的度量体系下的同一个指标有不同的结果。诸如于,AI 代码入库率可能会涉及到 3、 5、10 分钟内的代码变更, 又或者是用户无操作等不同口径;代码接受率会受到语言因素影响较大,如有的模型 Python 代码接受率可能会高于 Java 代码接受率,而静态类型语言的代码接受率 远高于动态类型语言。
这些指标都需要在初步运行后,根据团队的实际情况进行调整,以确保度量体系的有效性和可靠性。
AI 技术在过去的一年里发展迅猛,新的 AI 工具和模型不断涌现,为软件工程带来了更多的可能性。这也是笔者构建《AI 辅助软件工程:实践与案例解析》(https://github.com/phodal/aise )这个开源项目的原因之一。
对于企业来说也是相似的,我们还需要:
此外,还应该提供以下支持:
现在,你还多了一个新的方式,加入这个开源项目的 issue、discussions,或者是直接在 GitHub 上提交 PR,来参与到这个项目中。
围观我的Github Idea墙, 也许,你会遇到心仪的项目