生成式 AI 與系統開發的應用結合

2023-11-13

筆記生成式 AI 對於系統開發的應用結合 😎

logo

說明

為了提升開發效率,結合生成式 AI 已經不可逆的趨勢。

而如果有效的將生成式 AI 與系統開發的應用結合,可以從軟體開發生命週期切入,並逐項檢視各階段生成式 AI 的應用方式。


如何使用生成式 AI?藉由 Prompt Engineering 的方式,請生成式 AI 提供對應的文件、程式碼、影片及聲音提供系統開發使用。

在使用上可以分為直接的提示、連續追問式 (Prompt Chaining) 以及樹狀分解式 (Tree of Thoughts)。

直接的提示就是直球對決,直接請生成式 AI 提供所需要的文件、程式碼、影片及聲音,但目前的生成式 AI 在輸入與輸入的 Token 數,通常不足以完成整的系統的開發。

連續追問式則是依據生成式 AI 的回應繼續追問,可能是因為一開始的回應方向不對、或者是補充更多的提示讓生成式 AI 的回答切合需求。

而為了解決生成式 AI 在輸入與輸入的 Token 數有限的問題,可以藉由樹狀分解式將問題切割,例如在系統設計上可以切割成子系統、微服務,

再分別針對切割後的子系統與微服務使用直接的提示或者式連續追問式的方式取得對應的文件、程式碼、影片及聲音生成。

而樹狀分解式的工作如何也能交由生成式 AI 自動完成該有多好? AutoGPT 是一個發展中的解決方案,但使用的 ChatGPT 4 資源成本過高,因此還不是一個理想的解決方案,而工程師的對於系統的拆分經驗仍是現況下的價值所在。


紀錄一切

在使用生成式 AI 協助開發工作,應儘可能的文件化相關的過程,包含 Prompt 的使用紀錄、使用的模型、資料來源等資訊。

關於使用的目前,以現況而言 Open AI 還是優勢的地位,因此主要關注 Open AI 所提供的模型清單

Anthropic 的 Claude 其對於 Tokens 數的處理優勢是潛力之星,值得留意發展。

而對於開發人員而言,直接使用模型的方式應該會以 ChatGPT 或者 Claude.AI 等 Chat 的方式直接問答,

或者使用 GitHub Copilot 所提供的整合功能,直接在開發工具當中使用,生成程式碼。

SSDLC With GAI

需求階段

對使用者的訪問與需求的理解,同樣也是轉換成 Prompt 的需求,以往的操作可能是從需求到人工整理文件,藉由生成式 AI 則是從需求自動生成文件。

也可以透過生成式 AI 快速製作 USE CASE 來輔助需求的釐清。

系統分析與設計

生成式 AI 可以根據 Prompt 列出系統的架構,包含前後端、資料庫、系統監控的技術選擇。當然還是取決於開發團隊本身自有的技術組合,但藉由生成式 AI,可以較容易跨入其他的技術,例如 .NET 對 JAVA 的轉換、SQL Server 對 Oracle 的轉換,在語法層級都可以透過生成式 AI 來協助。

設計過程中的 UML 也可以藉由生成式 AI 來產生。

資料庫的設計,包含欄位、正規化等限制,都可以藉由生成式 AI 來處理,再經由開發人員的經驗調整,並且可以追問式的討論共好的設計作法。

系統開發

開發階段,變數與函式的命名可以藉由生成式 AI 來提供命名建議,並且在 prompt 中加入團隊的開發規範。以往單元測試撰寫的工作,也能讓生成式 AI 快速產生,讓測試驅動的開發方式門檻下降。

Code Review 的工作也能藉由生成式 AI 來輔助,並且可以連續追問式 Review Code,也能藉此過程進行程式碼的重構。

測試與部署

生成式 AI 可以協助單元測試的撰寫,對於整合測試的工具也能提供測試的規劃以及生成相關測試的文件。

系統安全

源碼檢測、弱點掃描等發現的資安問題,可以藉由生成式 AI 協助提供修正建議,

各式的資安實作建議也可以藉由生成式 AI 提供。

理想的方式是在開發階段的 Prompt、Instruction 主動要求所提供的程式碼必須符合資訊安全的規範,避免 OWASP TOP 10 的問題。

版本控制

Commit 的註解的歸納與撰寫可以藉由生成式 AI 協助。

維運監控

生成式 AI 可以協助判讀 Logs,摘要資訊以及提供意見,減少人力有限對於海量 Logs 分析的能量問題。

藉由 SBOM (Software Bill of Materials),結合有取得最新資訊能力的生成式 AI,可以動態告警系統是否需要更新、汰換存在風險的元件的問題。