如何構建全流程輔助的AI4EE能力:從TeamAI到企業級AI輔助研發的思考?

代碼爲聘禮 2024-03-11 22:45:20

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 是一個非常大的領域,它涉及到了工程的各個方面,我們仍然需要不斷地探索、實踐,以提升工程效能。

0 阅读:0

代碼爲聘禮

簡介:感謝大家的關注