今天是鐵人賽第十三天。
昨天 AI 同事建構了不少功能,今天打算先把那些功能都完整測試過,再繼續往下走。
果不其然,一啟動就出現了不少錯誤,而且不曉得是不是 Gemini 更新的關係,今天的 AI 同事感覺比前幾天還要笨──遇到很多基礎錯誤,甚至檔案內容都有種「沒讀完整」的感覺。
我先花時間修復了一些 import 錯誤,還有 AI 同事在修 bug 時誤改的地方,以及 pip install 的快取機制問題。處理完後,總算讓後端容器成功啟動,可以開始手動測試。
測試到第二步時,因為我複製訊息錯了,按下 esc
中斷後重新輸入正確訊息,結果 AI 同事直接跳出 400 錯誤,提示:
Please ensure that the number of function response parts is equal to the number of function call parts of the function call turn.
我只好用 /clear
清除舊文本,重新讓他一步一步帶我手動測試並確認結果。前半段測試很順利,但測到 refresh_token 時卡住了——我的 FastAPI docs 只有帳密登入方式,無法直接測 token。
我問 AI 同事,他一直堅稱有一個輸入框只是我沒看到。耐心耗盡後,我轉而請小幫手 ChatGPT 提供解法,把方案貼給 AI 同事。來回兩次後,AI 同事終於意識到必須在 main.py
做修改才能用 token 登入。
但修改後還是無法顯示 token 輸入框,我只好再把程式碼貼給 ChatGPT,小幫手立刻指出問題:
app.openapi_extra
在 FastAPI 本身並不會自動合併到 Swagger UI 的securitySchemes
。
要讓它顯示 Bearer token 欄位,需要用 自訂 OpenAPI schema 的方式注入securitySchemes
,並覆蓋app.openapi
。
我把提醒轉告給 AI 同事,他馬上就懂該怎麼改,並再度修正程式。
這次果然成功出現了 BearerAuth (http, Bearer),但又冒出新問題——雖然 Authorize 按鈕有 token 登入選項,但登入後並沒有套用到其他 API 節點。AI 同事才說,因為我沒有定義哪些路徑要使用它。
我們先替 users 加上 tags
,再告訴 Swagger UI 這些路徑需要 token 登入,但依然無效。
最後我又請出 ChatGPT,小幫手發現我還在用 OAuth2PasswordBearer
當 token 來源,所以 Swagger UI 還是認為要用帳密登入,並建議全部改成 HTTPBearer
。
改完後,帳密登入功能消失了,但原本 users
節點依然沒有出現 token 登入,只有 auth
有。
我請 AI 同事檢查這兩個節點的差異,嘗試了幾種方法仍未解決,只好先把這個問題留到明天再戰。
以下為今天的研究流程
首先開始前的老樣子,請AI同事了解應用現況。
我給AI的指令:
@ai_context.md @README.md @軟體核心架構規劃.md @功能需求總覽.md 了解目前現況
再來我請AI同事設計昨天功能的手動測試功能
我給AI的指令:
請幫我設計昨天更新的功能的手動測試流程
AI同事幫我設計了七大項測試,不過一次太多我不好操作,我請他一步一步來。
我給AI的指令:
請帶我一步一步測試,使用 http://localhost/docs 來測試,請引導我測試每一項並跟我確認是否通過測試
AI開始一步步的帶我測試並確認。
一開始遇到的錯誤是backend/config.py 檔案中,refresh_token_expire_days 這個設定值沒有被正確讀取到,我請AI同事更新生成用的程式scripts/generate_secrets.py後執行成功。
確認後除了生成地方減少,AI同事之前也遺漏掉docker-compose.yml也需要增加相關參數。
接下來出現下一個錯誤缺少redis套件,看來昨天因為一口氣大量建置,出現了不少類似這種細節錯誤。
這次我請AI同事用context7去查套件相依來找適合的redis版本安裝
我給AI的指令:
請使用context7去查詢目前套件相依最適合的redis版本并新增進 @backend/requirements.txt
最後他綜合我的套件相依以及我redis資料庫的版本,選擇了redis=5.0.0的套件版本號。
處理完這個問題,繼續處理下一個問題,找不到python找不到backend路徑。
又出現failed to solve: no build stage in current context
AI同事修了幾次後,建議我先清除快取重開docker再試一次。
我清除後重啟還是一樣的訊息,請他重新讀一次Dockerfile,結果發現他之前修改時,把image那段蓋掉了,所以才出現沒有東西建置的錯誤。
這個部分解決之後,終於能正常架設後端容器,但python套件快取機制還是有問題,我拿去問除錯小幫手ChatGPT,他說是我在執行pip install之前,先執行了COPY /app,導致他每次都以為requirements.txt有變動導致每次都重新下載,修改後快取機制就正常了。
在測試時,AI同事出現了400錯誤,看來是之前中斷時出現錯誤,我使用clear
指令清除文本後,重新測試流程。
我給AI的指令:
請幫我計畫昨天建構功能的手動測試,目前後端容器都啟動成功,使用http://localhost/docs 去測試,請一步一步帶我測試,並跟我確認是否正確
一開始測試蠻順利的,後來要測試refresh_token功能時,我找不到可以用token的地方,他預設是帳密登入,我請AI同事去調整Swagger UI的授權設定,但AI同事一直告訴我說會有一個輸入框可以輸入,但我看還是沒有,只好在求救修bug助手ChatGpt幫忙了,我將部分相關程式碼跟說明告訴ChatGPT,在將他給的建議貼回我的AI同事,讓他們兩個透過我來做協作。
AI同事修改了main.py有關 app.openapi_extra的參數部分,但我重啟後在docs網站上還是沒看到token輸入框,我將更新內容貼給助手ChatGPT:
59 - app.include_router(auth.router, prefix="/auth", tags=["Auth"]) # Add prefix and tags for better documentation 59 + app.include_router(auth.router, prefix="/auth", tags=["Auth"]) 60
61 + # Add security scheme for Bearer token 62 + app.openapi_extra = { 63 + "components": { 64 + "securitySchemes": { 65 + "BearerAuth": { 66 + "type": "http", 67 + "scheme": "bearer", 68 + "bearerFormat": "JWT", 69 + "description": "Enter your JWT token in the format 'Bearer <token>'" 70 + } 71 + } 72 + }, 73 + "security": [{"BearerAuth": []}] # Apply BearerAuth globally 74 + } # Add prefix and tags for better documentation 75 +
修改完還是沒有出現
小幫手ChatGPT馬上看出來原因,他回復我:
我懂你遇到的情況了,
app.openapi_extra 這個屬性在 FastAPI 本身並不會自動合併到 Swagger UI 的 securitySchemes,
所以你加了 app.openapi_extra,Swagger 還是不會顯示 Bearer token 欄位。
要讓它真的顯示,需要用 自訂 OpenAPI schema 的方式,把 securitySchemes 注入,然後覆蓋 app.openapi。
果然只有AI才懂AI,AI同事立刻聽懂,並根據小幫手AI的指正去修改內容出現了token登入。
但現在出現另一個問題,token登入目前只套用在auth節點。我請AI同事檢查:
我給AI的指令:
現在users節點的帳密登入消失了,但是token登入還是沒有出現。token登入還是只出現在auth節點,請幫我檢查這兩個節點的差異,為什麼只有auth節點有token登入輸入框
他測試了幾個方法,但還是無法解決只好先將這個問題留給明天解決了。