後AI時代的多代理 AI Agent 實作:使用 CrewAI 與 LiteLLM 打造自動化專案程式架構分析
在「後AI時代」,AI Agent 正逐步改變我們對人工智慧的想像。本文從 Generative AI 年會談起,介紹 MCP(Model Context Protocol)、CrewAI 與 LiteLLM 的整合實作,說明如何打造能協作、自主決策的多代理(Multi-Agent)AI 系統。從單一 LLM 到智能協作架構,這正是 AI 演化的新篇章。
前言
前陣子在觀賞2025 Generative AI 年會,聽到有位分享者提到「後AI時代」,為什麼說後AI時代呢,因為AI Agent的概念出現,加上MCP逐漸成熟,前兩年的超大LLM霸主時期不免出現一些小變化,在過去,我們人類先是提出了Auto Regressive,接著整理出大量的訓練語料,接著我們用Text-Generation解決了很多問答、總結的NLP難題,下一步則開始考慮多模態問題,接著需要更多更好的機制來解決Token轉換問題,還要有更多機器來支援算力消耗,屬實不容易,大部分LLM走在一條用單一模型解決所有問題的道路上,但這實在不容易,畢竟很多任務是這樣的,你讓他執行單一任務,他可以做到很精確,像是圖像辨識,CNN幾乎就有了碾壓性的效果,但是你要讓他兼顧幾個不同任務,這是個大課題。程式內容
Crew AI with AI Angent By LiuChien (Gemini)
Crew AI是一套Python函式庫,讓你可以輕鬆實現AI Agent,如果想搭配更多樣化的LLM,也可以搭配LiteLM。
這個筆記本的程式雖然不多,但卻簡單實現了將一個 Ionic Project從Git下載之後進行解析,並且依照專案架構和相依套件進行解析,判斷目前專案出有什麼重大問題。
接下來我們採用了幾個步驟,為一個專案做健康檢查:
下載專案 分析專案架構 設定Crew AI、LiteLM (這裡設定用Gemini模型) 設定Agent (包含結構專家、依賴判斷專家、重構建議) 設定任務 (分別進行結構、依賴判斷,並給出建議) 開始解析並產出結果
參考資料
ㄧ、安裝Crew AI與其他工具
- Langchain
- CrewAI
- OpenAI
- LiteLM
二、設定金鑰
- HuggingFace金鑰 (給LiteLM使用)
- DeepSeek金鑰
因為我們會用到LiteLM串接HuggingFace上的LLM模型,如果使用的不是HuggingFace上的模型就不需要設定。
三、示範用的Github專案
- 一個年久失修,Ionic V1版本為基礎的Hybrid APP專案
四、掃描專案架構
- 專案架構和目錄組成
- 相依套件組成
五、定義Agent並指定LLM模型
依照以下目標,我們對每個Agent設定了角色、工作目標、背景知識,必要的話也可以切換不同LLM模型一起協作。
- 結構分析
- 依賴分析
- 重構建議
特別注意我們這裡用的是LiteLM,串接HuggingFace上的Text-Generation模型,所以這裡傳入的是指定型位置的字串。 想知道有哪些LLM可以用,可以參閱https://docs.litellm.ai/docs/providers。
六、定義各Agent需要執行的任務
前兩個任務分別是分析專案結構、套件相依問題,並且可以指定任務,第三個任務是重構建議,則可以直接請Agent用前兩個任務總結下去做建議,Crew AI會自動幫你處理上下文,想像一下你就是在一個聊天視窗,分別作以下三個任務的行為。
七、列印出分析結果和建議內容
以下是分析結果和建議內容。
根據您提供的依賴分析結果,專案目前處於一個極度不穩定、過時且充滿潛在風險的狀態。由於缺少實際的程式碼目錄結構文字輸出,我將專注於從技術棧層面提出重構建議與框架層次的模組優化方向。一旦底層技術棧穩定並現代化,上層的業務邏輯模組拆分與優化將能更順利地進行。
以下是具體的重構建議與模組優化方向:
前言:當前專案核心問題概括
目前專案最嚴重的問題是多重、衝突且嚴重過時的框架及套件依賴。這不僅導致專案無法正常運作,也帶來了巨大的安全漏洞、兼容性問題和維護負擔。任何上層的業務模組優化,都必須先建立在一個穩固且現代化的技術基礎之上。
一、核心技術棧重構與現代化 (基石重建)
這是專案最優先且必須執行的重構任務。目標是將整個應用程式升級到一個統一、最新且受到官方支援的技術棧。
Ionic Framework 統一與升級:
- 問題根源: 同時存在 Ionic 2 (
ionic-native), Ionic 4 (@ionic/angular), Ionic 7 (@ionic/core) 的衝突依賴,導致無法正常編譯與運行。 - 重構建議:
- 策略: 進行一次徹底的 Ionic Framework 大版本升級。強烈建議直接升級到最新穩定版 Ionic (目前為 Ionic 7 或 Ionic 8 beta)。這將涉及重大變更,但長遠來看是避免未來技術債務的最佳途徑。
- 具體步驟:
- 完全移除所有舊的 Ionic 相關套件 (
@ionic/angular: ^4.11.13,@ionic/core: ^7.8.6,ionic-native: ^2.9.0)。 - 安裝最新的
@ionic/angular和@ionic/cli版本。 - 根據 Ionic 官方升級指南 (例如從 v4 升級到 v5, v5 到 v6, v6 到 v7) 逐步調整程式碼。這可能涉及 Angular 版本、Router 配置、生命週期鉤子、元件用法等變更。
- 模組優化方向: 升級至現代 Ionic/Angular 版本後,將能充分利用 Angular 的模組化能力(如
NgModule、Standalone Components/APIs),更好地組織應用程式。
- 完全移除所有舊的 Ionic 相關套件 (
- 問題根源: 同時存在 Ionic 2 (
建置系統現代化 (Gulp 移除或升級):
- 問題根源: Gulp 3 及其配套插件嚴重過時,可能與新版 Node.js 不兼容,且缺乏維護,存在安全風險。
- 重構建議:
- 策略一 (推薦): 徹底移除 Gulp,轉而使用 Angular CLI 內置的建置系統。對於 Ionic/Angular 專案,Angular CLI 提供了完整的開發、建置、測試工具鏈,性能更優且更易於維護。
- 策略二 (次選): 如果專案有極其複雜且難以遷移的 Gulp 任務,則將 Gulp 升級到 Gulp 4,並將所有相關 Gulp 插件 (
gulp-concat,gulp-minify-css,gulp-rename等) 升級到最新穩定版,或替換為現代替代方案 (例如gulp-clean-css替代gulp-minify-css)。 - 模組優化方向: 現代化的建置系統能更好地支持 Tree Shaking、Lazy Loading 等優化技術,減少打包大小,提高應用程式性能。
Cordova 插件與
ionic-native統一升級:- 問題根源: 大量 Cordova 插件版本過時,且
ionic-native: ^2.9.0已廢棄,與現有或未來的 Ionic 版本不兼容,帶來安全隱患和運行時不穩定。 - 重構建議:
- 策略: 將所有 Cordova 插件和
ionic-native依賴升級到最新且兼容 AndroidX 的版本。 - 具體步驟:
- 移除
ionic-native: ^2.9.0。 - 對於每個舊的 Cordova 插件 (
cordova-plugin-device: ^1.1.7,cordova-plugin-splashscreen: ^4.1.0,cordova-plugin-statusbar: 2.4.2等),查找其最新穩定版,並替換為官方維護的@ionic-native/*範疇套件 (例如@ionic-native/device) 和相應的 Cordova 插件版本。 - 仔細檢查每個插件的 Breaking Changes,並調整程式碼以適應新版本 API。
- 模組優化方向: 統一使用
@ionic-native/*套件,可以將裝置相關功能封裝在獨立的服務模組中,例如DeviceService,提高可重用性和測試性。
- 移除
- 策略: 將所有 Cordova 插件和
- 問題根源: 大量 Cordova 插件版本過時,且
AndroidX 兼容性解決方案:
- 問題根源: 雖然有
cordova-plugin-androidx和cordova-plugin-androidx-adapter,但由於其他插件過於老舊,可能仍無法完全兼容。 - 重構建議: 在完成 Ionic Framework 和所有 Cordova 插件升級後,重新評估並調整 AndroidX 的兼容性。最新的 Cordova 和插件通常會內置 AndroidX 支援,使得這些輔助插件不再必要或需要更新到最新版本。
- 問題根源: 雖然有
二、模組結構優化與最佳實踐 (基於 Angular/Ionic 現代化架構)
在完成技術棧的底層重構後,可以開始實施現代化 Angular/Ionic 專案的模組化策略。
清晰的職責分離 (Separation of Concerns):
- 優化方向: 將應用程式的各個層次明確劃分職責,例如:
core模組: 放置應用程式級別的單例服務 (如認證、日誌、核心配置)、Guard、Interceptor 等。這些服務通常在應用程式啟動時載入一次。shared模組: 放置在多個功能模組中被重用的元件 (Components)、指令 (Directives)、管道 (Pipes) 和輔助服務 (Utility Services)。features模組: 根據業務功能劃分,每個功能模組包含其特有的頁面、元件、服務和路由。
- 優化方向: 將應用程式的各個層次明確劃分職責,例如:
Angular 特性模組化 (Feature Modules):
- 優化方向: 根據主要業務功能,將應用程式拆分為多個獨立的 Angular Feature Modules。
- 實踐:
- 例如:
AuthModule(處理登入、註冊、忘記密碼),DashboardModule,UserProfileModule,SettingsModule等。 - 每個 Feature Module 應具備自己的路由配置,並可實現延遲載入 (Lazy Loading),以優化應用程式的初始載入時間。
- 此策略極大地降低了模組間的耦合度,提升了開發效率和可維護性。
- 例如:
共用元件與服務模組 (
SharedModule):- 優化方向: 建立一個
SharedModule來匯出 (export) 那些在整個應用程式中都會被使用到的元件、指令、管道和常用 Angular Modules (如CommonModule,FormsModule,IonicModule)。 - 實踐: 避免在
SharedModule中提供 (provide) 服務,以防止單例服務被多個延遲載入模組重複實例化。服務應在CoreModule或特定的 Feature Module 中提供。
- 優化方向: 建立一個
資料存取抽象模組 (
DataModule或APIModule):- 優化方向: 將所有與後端 API 互動、資料處理、資料庫存取 (如果應用程式有離線資料庫) 的邏輯集中在一個或幾個特定的模組中。
- 實踐:
- 定義統一的 API 服務,例如
UserService,ProductService,這些服務只負責與後端通信和資料轉換,而不包含業務邏輯。 - 可以使用
HttpClientModule、ngrx/store(如果需要狀態管理) 或其他資料管理庫。 - 這有助於將後端細節與前端業務邏輯解耦,提高資料層的可測試性和可替換性。
- 定義統一的 API 服務,例如
設定檔模組化 (
ConfigModule):- 優化方向: 集中管理應用程式的所有配置設定 (如 API 端點、環境變數、常數)。
- 實踐: 建立一個
ConfigService或使用 Angular 的environment.ts檔案,確保配置參數在不同環境 (開發、測試、生產) 下能被正確管理和載入。
三、技術債務清理與風險管理
- 廢棄套件移除: 清理
package.json,移除所有已明確廢棄或不再使用的套件依賴,減輕專案負擔。 - 安全性漏洞修復: 透過升級所有套件到最新版本,修復已知的老舊套件帶來的安全性漏洞。定期使用
npm audit或類似工具檢查依賴安全問題。 - 性能與維護性提升:
- 採用最新的 Angular/Ionic 功能 (如 Standalone Components, Signals 等),簡化程式碼,提高執行效能。
- 精簡打包體積,利用 Tree Shaking 和 Lazy Loading 優化應用程式啟動速度。
- 確保所有程式碼都符合 Linting 規範 (如 TSLint 或 ESLint),保持程式碼風格一致性。
四、實施策略建議
由於涉及大規模的技術棧升級,建議採用以下策略:
- 階段性重構: 不要試圖一次性升級所有東西。可以先專注於 Ionic Framework 和 Angular 的核心升級,確保應用程式能重新運行,然後再逐步處理 Cordova 插件和 Gulp 移除。
- 建立全面的測試: 在開始大規模重構之前,盡可能多的建立現有功能的自動化測試(單元測試、整合測試),以確保在重構過程中不會引入新的錯誤,並能驗證升級後的應用程式行為符合預期。
- 版本控制與分支策略: 使用強大的版本控制系統 (如 Git),並為重構工作建立一個專門的長期分支。頻繁提交並在小階段完成後合併回主分支。
- 團隊培訓: 如果團隊成員不熟悉新的 Ionic/Angular 版本和最佳實踐,需要提供相應的培訓。
這個專案的重構是一個巨大的挑戰,但也是一次徹底清理技術債務、提升專案品質和未來可維護性的絕佳機會。
結論
我這次一共實作了 Gemini 和 DeepSeek 兩個版本。整體來說,實作成本並不高,只需要準備好呼叫模型所需的 API 金鑰。
使用不同的 LLM 作為 Agent 是一件很有趣的事。雖然這次的範例中我都採用了相同的 LLM,但實際應用時,依照不同 LLM 的特性進行分工與配置,往往能獲得更佳的效益。文末我也附上了原始碼,大家可以自己試著玩玩看 —— 不過記得要先申請金鑰喔。
以 MCP 的規劃 來看,它的目標並不只是讓 LLM 扮演 RPC 的角色而已。對 AI Agent 而言,最具突破性的能力是「互為 Agent、甚至能相互分享」。這樣的設計讓 AI Agent 的概念再次向前推進一大步。
在不久的將來,AI 的成長速度可能會比我們想像中更快、更強,而我們正親眼見證這段歷史的展開。

留言
張貼留言