iT邦幫忙

2025 iThome 鐵人賽

DAY 10
0
生成式 AI

30 天與 AI 同事打造系統的求生實錄系列 第 10

【Day 10】死循環驚魂後,AI 同事帶我完成使用者管理與重構

  • 分享至 

  • xImage
  •  

今天是鐵人賽第十天。
昨天完成權限授權功能並測試了帳號建立、登入與查詢使用者功能後,我依照昨天的檢討,請 AI 同事今天在規劃內容時,把顆粒度切得更小,方便我在中途找到適合的時機清除舊文本。

不過今天 AI 同事似乎有點怠惰,工作了十幾分鐘就卡住不動。我用 ctrl+o 查錯誤 log,才發現他陷入了死循環。於是我用 /clear 清空對話,並讓他重新理解目前的專案狀況,他才恢復正常運作。

今日實作項目:使用者管理端點

檔案位置:backend/routers/users.py

  • 步驟 1.1.1:獲取當前使用者資訊 (/users/me)
  • 步驟 1.1.2:查詢所有使用者 (/users/)
  • 步驟 1.1.3:依 ID 查詢使用者 (/users/{user_id})
  • 步驟 1.1.4:更新使用者資訊 (/users/{user_id})
  • 步驟 1.1.5:刪除使用者 (/users/{user_id})
  • 步驟 1.1.6:確保所有端點都受到認證與授權保護

開發過程與測試

這次建構過程還算順利。我請 AI 同事建立一個腳本來生成管理者帳號以便測試,不過因為我把腳本放在專案根目錄(root)而不是 backend 資料夾,出現了一些錯誤,我修正後順利新增了管理者帳號。

在測試功能時,發現兩個問題:

  1. POST /users:非管理者帳號也能呼叫
  2. POST /users:管理者新增使用者時,沒有權限欄位可填寫

第一個問題比較棘手,因為 AI 同事一開始一直堅稱自己有檢驗管理者身份,要我去找其他地方的問題。直到我直接把後端 log 貼給他看,他才承認檢驗邏輯有漏掉,並乖乖回去修改。
第二個問題則解決得很快,他直接完成修改。

在這個斷點,我請 AI 同事將更新內容寫入檔案並推送到 GitHub。

潛在問題與重構建議

此時我想到一個潛在問題:
目前 AI 同事依功能建立了多個 User 模型,未來若想新增欄位(例如使用者電話),就得在多個模型中重複修改,這對他來說很容易遺漏。

我向他詢問重構建議,他提出兩個方案:

  1. 建立 UserBase 模型
    作為基底,其他模型繼承它並在需要時額外新增欄位。這樣新增欄位時只需改一個地方。
  2. 新增 UserService 模組
    將重複的業務邏輯集中管理,其他地方只需引用,不僅減少重複,也方便測試。

我請AI同事兩個方案都執行。
重構過程很順利,幾個基本錯誤也很快修正完成,權限相關功能的手動測試全部通過。

今日總結

今天雖然遇到了一些之前沒碰過的狀況,但都順利解決,還提前排除了功能擴充的潛在隱患。
上一週的經驗檢討,對這幾天與 AI 同事的協作確實很有幫助,希望之後能繼續保持這種順利的節奏。

以下為今天的研究流程


首先開啟前的老樣子,請AI同事了解應用現況。
我給AI的指令:

@ai_context.md @README.md @軟體核心架構規劃.md @功能需求總覽.md   了解目前現況

AI同事表示了解了之後,我請AI同事計劃繼續建構,但計劃的顆粒度小一點。

請計劃這次的建構,但顆粒度小一點,我希望能一步一步來

他這次就拆得很細,不過AI同事昨天的進度有點忘記,我提醒他我已經完成註冊、登入與查詢的API建構,AI同事表示他了解後,繼續實作依照ID查詢使用者功能。

這是AI同事規劃的API端點實作:
實作使用者管理端點 (backend/routers/users.py)
* 步驟 1.1.1:在 backend/routers/users.py 中,實作獲取當前使用者資訊 (/users/me) 的 API 端點。
* 步驟 1.1.2:在 backend/routers/users.py 中,實作查詢所有使用者 (/users/) 的 API 端點。
* 步驟 1.1.3:在 backend/routers/users.py 中,實作依 ID 查詢使用者 (/users/{user_id}) 的 API 端點。
* 步驟 1.1.4:在 backend/routers/users.py 中,實作更新使用者資訊 (/users/{user_id}) 的 API 端點。
* 步驟 1.1.5:在 backend/routers/users.py 中,實作刪除使用者 (/users/{user_id}) 的 API 端點。
* 步驟 1.1.6:確保上述所有使用者管理端點都受到認證與授權保護。

不過這時AI同事在建構步驟1.1.3時,卡住了十幾分鐘,我輸入ctrl+o去看他的錯誤訊息,他提供了錯誤訊息檔案的存放位置,我打開檔案後發現,AI同事進入了無限循環。
因此我使用了/clear去清除資料後,再告訴一次請AI同事了解目前現況,並告訴AI同事他之前規劃的建構步驟。
我給AI的指令:

實作使用者管理端點 (`backend/routers/users.py`) 
* 步驟 1.1.1:在 backend/routers/users.py中,實作獲取當前使用者資訊 (/users/me) 的 API 端點。 
* 步驟 1.1.2:在 backend/routers/users.py中,實作查詢所有使用者 (/users/) 的 API 端點。 
* 步驟 1.1.3:在 backend/routers/users.py 中,實作依 ID查詢使用者 (/users/{user_id}) 的 API 端點。 
* 步驟 1.1.4:在 backend/routers/users.py中,實作更新使用者資訊 (/users/{user_id}) 的 API 端點。 
* 步驟 1.1.5:在 backend/routers/users.py中,實作刪除使用者 (/users/{user_id}) 的 API 端點。 
* 步驟1.1.6:確保上述所有使用者管理端點都受到認證與授權保護。 記得在測試時使用venv的環境測試

會加最後一句記得在測試時使用venv的環境測試是AI同事有時候會忘記我們有建Python的虛擬環境,因此去提醒AI同事我們是有測試環境的。

他就構好之後,由於有些功能是設置管理者帳號才能使用,我請AI同事幫我寫了一個測試用管理者帳號,並將這種測試用功能額外寫一個檔案紀錄,以免未來忘記。
我給AI的指令:

請幫我將這種額外執行會做什麼動作的指令寫一個檔案讓我未來知道是做什麼的  

其中由於這種測試用腳本不是放在backend資料夾底下管理也不是在容器執行,所以出現了一些錯誤,不過請AI同事調整之後就順利修改成功了。

有了超級使用者帳號之後,我開始測試這次新增的功能,測試到最大的問題是一般使用者也可以用 POST /users/ 這支API去新增帳號,但這個是給管理者新增用的,這樣會有資安問題
我請AI同事去檢查,AI同事一開始還嘴硬說有檢查是否為管理者,結果我貼後端log給他才改口說的確沒有檢查,才幫我去修改程式。

最後,將這次新增的內容都手動測試一輪,權限方面都測試成功,非管理者帳號也被阻擋成功。

我將資訊請AI同事更新到檔案並上傳github後,我跟AI同事討論了一下程式重構,因為目前根據不同功能有不同的USER模型,但如果假如我要新增欄位,例如使用者電話,我需要在多個地方去修改欄位設定,可能會有地方沒改到。

AI同事建議我使用UserBase模型,其他模型在去繼承UserBase去新增自己的欄位,這樣未來我要新增欄位時,在UserBase新增欄位即可。
AI同事還建議,由於我有一些邏輯重複,他建議我新增一個UserService模組,去集中管理這些業務邏輯,其他地方只要引用,可以減少重複,而且由於相關功能集中,也比較好做測試。

最後請他兩個建議的施行去重構,重構過程比我想像中順利,基本沒什麼錯誤,功能手動測試也都通過沒有問題。


上一篇
【Day 9】認證授權全上線:修完 Bug 還得防 AI 改壞程式
下一篇
【Day 11】流水號退場:與 AI 同事完成 UUID 改造與防碰撞強化
系列文
30 天與 AI 同事打造系統的求生實錄30
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言