學習專案:LocalAIAgentAPI - 從零開始的 AI 整合練習
這週挑戰自己整合多個 AI 模型,順便為面試準備一些實戰經驗。雖然是練習專案,但收穫比想像中還要多。
學習目標
作為一個正在準備面試的開發者,我給自己設定了一個挑戰:
能不能在一週內整合多種 AI 模型,做出一個像樣的測試平台?
說實話,一開始我也不確定能做到什麼程度。但想說既然要學,不如就設個有挑戰性的目標:
- 練習 .NET 8 的新特性
- 熟悉 AI 模型整合的流程,這應該是未來的趨勢
- 為面試準備一些能拿出手的作品
- 順便踩踩坑,累積一些真實的開發經驗
結果沒想到,這個學習過程遠比我預期的有趣。每天回家寫 code,看到專案從無到有的感覺真的很讚。
LocalAIAgentAPI
這個專案基本上就是我這週學習筆記的具現化。我想透過實作來理解一些平常只能紙上談兵的問題:
怎麼在 .NET 中整合不同類型的 AI 模型?每個模型的 API 都不一樣,要怎麼設計統一的介面?REST API 的架構要怎麼設計才不會讓未來的自己想哭?前端跟後端的資料交換有哪些眉角?錯誤處理和日誌記錄該做到什麼程度?
雖然是練習專案,但我還是盡量按照真實專案的標準來做。
Building
這一週下來,我大概涉獵了這些領域:
後端架構:.NET 8 Web API、依賴注入、Middleware
老實說,之前對 .NET 8 的依賴注入只是停留在「知道有這個東西」的階段,實際動手做才發現它比想像中強大很多。
AI 整合:Ollama LLM、ONNX 圖片分類、Tesseract OCR
每個模型的整合方式都不太一樣,這讓我對「統一介面設計」有了更深的體會。
API 設計:RESTful API、輸入驗證、回應格式統一
如何讓不同模型的回應格式保持一致,這個問題比我想的複雜多了。
前端互動:簡單的 HTML/JS、檔案上傳、即時回應
雖然前端不是我的強項,但現在有很多非常好用的 AI 工具 像是ChatGPT、Claude等,都協助我設計好的UI和功能。
測試工具:Swagger 整合、API 測試
Swagger 真的是開發者的好朋友,設定完就有完整的測試介面。
錯誤處理:全域異常處理、Timeout 機制
踩了不少坑,但也學到如何優雅地處理各種意外狀況。
Problems
一週要整合這麼多東西,當然會遇到一些讓人頭痛的問題:
模型載入失敗:一開始 LLAMA2 模型老是載入不起來,debug 了半天才發現是Ollama路徑的問題。
回應時間過長:某些 LLM 推理需要很長時間,一開始沒設 Timeout,結果前端就一直等等等。體驗直接崩潰。
資料格式轉換:不同模型的輸入輸出格式差異很大,光是設計統一的 API 介面就花了不少時間思考。
圖片處理:從前端上傳圖片到後端處理,編碼的部分搞了我一陣子。有些知識真的要實作過才會印象深刻。
不過每解決一個問題,就覺得又成長了一點。這大概就是寫 code 最爽的地方吧。
Learning
技術層面
對 .NET 8 的依賴注入和 Middleware 機制有了更深入的理解。之前都是看文件學習,實際用過才知道哪些地方容易出錯。
了解了不同 AI 模型的整合方式和各自的限制。每種模型都有自己的脾氣,要花時間去摸索。
練習了 API 設計和錯誤處理的一些最佳實踐。雖然還不敢說做得很好,但至少知道該注意什麼。
熟悉了前後端資料交換的完整流程。之前都是分別學習,這次算是串起來了。
軟實力
問題解決能力:遇到問題時如何有效地搜尋資料、閱讀文件、測試假設。
學習方法:如何在有限時間內快速掌握新技術的核心概念。
架構思維:開始思考如何設計可維護、可擴展的系統架構。
這個專案
我會誠實地說:「這是我為了學習 AI 整合和準備面試而做的練習專案。功能相對簡單,但我把重點放在架構設計和程式碼品質上。」
- 為什麼選擇這些技術組合?各有什麼優缺點?
- 開發過程中遇到的最大挑戰是什麼?如何解決的?
- 如果要將這個專案擴展成正式產品,需要加強哪些部分?
- 從這次經驗中學到最重要的一課是什麼?
我覺得展現學習態度和解決問題的思路,比專案本身的完成度更重要。
Next Week!
這個專案讓我嚐到了甜頭,也發現了很多可以改進的地方:
程式碼重構:有些地方寫得匆忙,想練習如何重構成更乾淨的程式碼。
容器化部署:嘗試用 Docker 打包,體驗現代化的部署流程。
專案原始碼
GitHub Repo: reedlin2002/LocalAIAgentAPI
重要提醒:這是我的學習練習專案,程式碼品質可能還有很大改進空間,絕對不建議直接用在正式環境中。但如果你也在學習相關技術,歡迎參考或給我一些建議。
如果發現任何問題或有改進建議,也歡迎開 Issue 讓我學習。畢竟一個人閉門造車很容易有盲點。
每週挑戰一個小專案,慢慢累積實戰經驗。雖然距離真正的高手還很遠,但至少在正確的路上前進。