AI4EE是指 "AI for Engineering Efficiency",即應用人工智能(AI)技術來提升工程效能。AI4EE 旨在利用 AI 技術來改善工程領域中的各個方面, 包括設計、需求、開發、測試和維護等環節,以提高工程過程的效率、准確性和可靠性。
年前,我們分析、調研了大量國內外 DevOps 工具鏈企業的 AI 采用點,思考 2024 的總體趨勢, 即《2024 年 AI 輔助研發趨勢預測》。從趨勢上來看,領先的企業 已經在探索和構建端到端的 AI 輔助研發能力,相似的,我們也在 UnitMesh 開源方案中融入了一部分的思考。
在去年,我們便開始推薦,采用類似于《Team AI:簡化繁瑣日常任務,打造團隊智能協作》來提升團隊的 開發效率,而在今年,越來越多的企業開始關注于如何構建全流程輔助的 AI4EE 能力。
引子 1:AI 打造研發數字化,重塑 DevOps 流程盡管,大量的生成式 AI 工具廠商依舊在和企業鼓吹,生成式 AI 可以提升研發人員 40+% 的效率,但是,我們發現,企業對于生成式 AI 的需求已經發生了變化。大量地研發負責人,不再是追求 “彎道超車”,而是尋找更好地落地場景 —— 諸如于改善流程的規範性, 提升過程指標。此外,由于大量通用的生成式 AI 工具,缺乏企業的領域知識、 業務上下文與開發流程,往往很難達到預期的效果。
從 BizDevOps 的流程來看,生成式 AI 産生的價值點,主要集中在:
需求與方案設計。基于知識庫與代碼庫的(兩者不可或缺)智能業務輔助分析,如果缺少其中一項,很難達到預期效果。
輔助架構分析與設計。基于架構規範、架構資産與代碼庫的架構輔助能力,即不僅僅是生成,還需要考慮到系統的現狀與企業的情況。
代碼生成。基于內部規範化的代碼庫與代碼規範的代碼生成,即結合組織內部的框架、規範與代碼庫,生成符合企業標准的代碼。
測試輔助。基于規範化的測試用例與測試庫的測試輔助能力,結合已有的良好的測試用例作爲模板,生成符合企業標准的測試用例。
開發實踐輔助。諸如于代碼評審、代碼重構等輔助能力,都需要即結合已有的代碼庫、代碼規範,輔助開發人員進行代碼評審、重構等工作。
輔助問題排查。基于問題庫、日志庫與代碼庫的問題等作爲上下文,輔助開發人員進行快速分析與問題排查。
……
盡管在不同領域有所差異,但是基本要素是相似的:
流程 - 知識流轉的規範化流程。
知識 - 研發資産管理與知識顯性化。
示例 - 團隊實踐與規範作爲示例。
工具 - 業務上下文與代碼上下文的動態結合。
也因此,我們一直在強調的是研發數字化的重要性,即通過數字化的手段,將研發流程、研發知識、研發資産等數字化、平台化,以便于 AI 輔助研發。
引子 2:基于 AI4EE 流程的 Prompt 示例在我們開源的 IDE 插件 AutoDev 中,便是通過自定義能力將 DevOps 過程中的知識、規範、示例、工具等進行了數字化,以便于進行更好的 AI 輔助研發。由于短期內,多數企業並不會改善軟件開發流程,因此更多的是結合現有的流程來引入生成式 AI。而爲了提升 AI 輔助研發的效果,我們需要構建精准的 AI 上下文能力。
諸如于在 AutoDev 中,生成提交、文檔等內容的 prompt 會分爲三部分:
濃縮的最佳實踐。諸如引入 Conventional Commits 作爲提交規範的基礎,根據場景壓縮提示詞。
曆史示例。即根據曆史提交、文檔等內容,與最佳實踐的示例作爲參考。
技術與業務上下文。即根據當前的業務上下文,即結合提交信息規範,構建更加精准的提示。
所以,在不同的階段需要的 Prompt 也是不同的,它需要融合對應的知識、示例,並構建高效的 prompt 生成策略,與工具進行整合,才能實現真正的效能提升。上述的 prompt 也就要求了,AI4EE 的企業需要具備上述的四項要素。
引子 3:軟件開發中的知識切片化在編寫時,我們會關注于自頂向下的設計,從頂層的架構知識、編碼知識、最佳實踐等,逐漸切片化到代碼層面。諸如于,在設計 AutoDev 的 AutoCRUD 功能時, 會根據需求與方案設計的知識庫與代碼庫,自動編寫 Controller、Service、Repository 等代碼。而由于生成式 AI 的能力限制,在這個過程中,我們會發現:
業務上下文的動態切片化。即有些需求信息,並不需要後端開發人員關注,而有些則需要關注。
每個階段需要的知識是不同的。諸如于 Controller 與 Service 的知識是不同的,有對應的編碼規範、最佳實踐等。
代碼關鍵知識的提取。爲了自動生成 Controller 代碼,需要知道現有 Controller,以及對應的 Service、Repository 等代碼。
……
所以,爲了達到這樣的效果,架構規範、編碼規範、最佳實踐等知識需要動態結合到 AI 工具中,即結合 RAG(檢索增強生成)技術或者手動配置的方式, 以便于生成更加符合企業標准的代碼。
除了從現有的代碼庫提取作爲示例之外,現有的架構規範等也需要重新思考如何動態切片化,以便于 AI 工具進行更加精准的生成。
企業級 AI4EE 能力構建AI4EE是指 "AI for Engineering Efficiency",即應用人工智能(AI)技術來提升工程效能。AI4EE 旨在利用 AI 技術來改善工程領域中的各個方面, 包括設計、需求、開發、測試和維護等環節,以提高工程過程的效率、准確性和可靠性。
基于上述的思考,從工具與平台構建的角度來看,AI4EE 的企業需要具備的四項要素,即:
流程:知識流轉的規範化流程
知識:研發資産管理與知識顯性化
示例:團隊實踐與規範作爲示例
工具:知識、實踐與、規範到代碼的動態結合
也就是前面我們提到的,構建精准結果所需要的上下文能力。
1. 流程:知識流轉的規範化流程結合與諸多企業的交流,我們不得不強調:數字化是應用生成 AI 的一個重要前提,即企業需要具備一定的 DevOps 成熟度,簡單來說就是規範化的流程。在此基礎上,生成式 AI 才能發揮更大的潛力。而對于這個過程中,還有一個點不得不強調的是:知識的流轉。
在企業走向 DevOps、雲原生的階段時,不同的工具、實踐與知識是處于不同的部門、開發團隊中的。而在結合生成式 AI 時,則需要重寫現有的工具,我們便需要 思考如何在不同的部門、開發團隊間,將所需要的上下文知識在不同的工具中傳遞。
即:過去我們傳遞的是數據,現在我們需要傳遞數據 + 知識。諸如于:
當測試人員在使用 AI 編寫測試用例時,需要知道當前的需求、方案設計、架構設計等信息,以便于 AI 輔助進行測試。
當開發人員在使用 AI 修複 bug 時,需要自動獲得關鍵的日志、問題信息、複現步驟等,以便于 AI 輔助問題排查。
……
我們不但需要考慮到數據的流轉,還需要考慮到知識的流轉,也就是在先前《LLM 應用架構設計原則》 中提到的知識的語言接口。
2. 知識:研發資産管理與知識顯性化受降本增效的影響,由我們 Thoughtworks 開源的架構治理平台 ArchGuard 也越來越受到企業的關注,以將組織現有的系統資産可視化。
即,大量的企業還沒有將研發資産管理,並將架構進行顯性化,而這也是生成式 AI 的一個重要前提。而在構建 ArchGuard 的治理功能時,我們的一個核心思考是:架構規範顯性化、工具化。即將架構知識顯性化到工具中,以便于進行規範化的檢查, 以減少人工的規範化檢查。
相似的,如果我們想提升 AI 的落地效果,我們第一步要強化企業的知識體系,顯性化高價值的知識,結合到工具中,以便于 AI 輔助研發。諸如于,在 AutoDev 中, 我們會構建了可配置化的 Dockerfile、CI/CD 腳本生成能力,以便于將企業的最佳實踐、規範化流程顯性化到工具中。同時,將一些通用的規範也顯性化到工具中, 諸如于上述的提交規範、文檔規範等。
3. 示例:團隊實踐與規範作爲示例在實際項目中,每個團隊受限于發布節奏、人員能力、技術棧等因素,都會有自己的一套最快實踐。它往往與企業的規範化流程有所差異,但是它是最適合團隊的, 這種模式也被各個組織所認可。
作爲工具的開發者,我們需要尊重團隊已有的實踐,而不是使用生成式 AI 強制性的規範化。因此,在構建工具時,需要從現有的實踐中提取示例,以便于生成式 AI 理解團隊的 “最快實踐”。
典型場景示例:
代碼注釋生成。從現有的代碼庫中提取注釋作爲示例,作爲提示詞的一部分。它也意味著,我們先前的代碼庫中的注釋是有價值的。
提交信息生成。結合現有的提交信息規範,提取現有的提交信息作爲示例。
……
在現有場景下,不改變團隊現有實踐的情況下,才能實現更有用的 AI 生成。
4. 工具:知識、實踐與、規範到代碼的動態結合去年國外的 JetBrains 與其它廠商的 AI 調查報告中,免費可用 ChatGPT 是國外開發者最常用的 AI 工具之一,GitHub Copilot 排在其後。而 ChatGPT 的機制,使得我們需要准備大量的上下文,以便于 ChatGPT 生成更加精准的結果。所以,人們即覺得 ChatGPT 很強大,也覺得它很弱。
而爲了改善這一點,我們需要將知識、實踐與規範動態結合到代碼中,以便于 ChatGPT 生成更加精准的結果。諸如于:
生成測試時,需要結合開發框架的依賴信息、被測試的代碼信息、測試用例的規範等,以便于生成更加精准的單元測試。
編寫需求時,需要構建語義化的代碼搜索能力,以獲取現有的需求信息。
……
與此同時,我們還需要關注于不破壞現有的實踐、工具,將 AI 工具與現有的工具進行整合,提升使用頻繁,改善 AI 的落地效果。
最後,值得一提的是 開發者體驗 也是 AI4EE 的一個非常重要的方面,讓開發者更加高效地使用 AI 工具,以提升工程效能。
總結盡管,我們可以看到生成式 AI 在起草文檔、編寫代碼、生成測試用例等方面的潛力,但是,我們依舊要有很長的路要走。特別是,大量的企業和我一樣處于沒有 卡可用的階段,如何平衡敏感信息與 AI 工具的使用,是一個非常重要的問題。
最後,AI4EE 是一個非常大的領域,它涉及到了工程的各個方面,我們仍然需要不斷地探索、實踐,以提升工程效能。