iT邦幫忙

2025 iThome 鐵人賽

DAY 5
0
生成式 AI

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

【Day 5】AI同事是幫手不是主導,錯誤別跟著它硬上!

  • 分享至 

  • xImage
  •  

今天是鐵人賽第五天,主要在請AI同事建構後端功能。
遇到了一些容易忽略的眉角,例如你手動修的地方要提醒AI同事,不然他會幫你改回來XD
還有在請他計劃的時候,記得要補一句,等你確認了再執行。
不然你還來不及修改計劃跟你預計不符合的地方他就開始做了,是一件困擾的事情。

而在跟帳號密碼與ip等比較敏感的資料相關上,最好請他寫在一個檔案去引用。
這樣除了方面管理,也不容易出現敏感資料外洩的情況。

除此之外,今天也遇到了跟Python相關錯誤,引用時沒在正確地方放置__init__.py,AI同事一出錯就想用硬解的方式去處理,這也讓我覺得雖然AI同事給我很多幫助,但工程師本身不能被AI帶著跑,要思考一下錯誤的地方真的只能硬解嗎,還是只是錯誤用法造成而已。

最後,終於將pytest環境架設完成,沒有出現pytest相關的錯誤。
明天,則開始處理pytest測試出來的問題。

以下為今天的研究流程


首先一樣先請AI同事了解應用的進度
我給AI的指令:

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

了解了之後,我請他告訴我計劃優先開發哪些功能
我給AI的指令:

@agents/engineering/backend-architect.md 請告訴我你計劃優先開發哪些後端功能

AI同事給出的回應為

階段一:基礎架構與核心使用者管理

  1. 專案初始化與環境設定
  2. 使用者與權限管理

階段二:核心專案與任務管理

  1. 專案管理
  2. 任務管理 (依賴於「專案管理」)
  3. 時間追蹤 (與「任務管理」緊密相關)

看來他還記得我們昨天討論的內容
接下來我請他告訴我他階段一的建構計劃
我給AI的指令:

請先專注在階段一,告訴我你計劃如何建構 

✦ 好的,針對「階段一:基礎架構與核心使用者管理」,我將分兩部分進行建構:

第一部分:專案初始化與環境設定

我將執行以下步驟來建立後端專案的基礎環境:

  1. 建立後端資料夾:在專案根目錄下建立 backend 資料夾。
  2. 建立 Python 虛擬環境:在 backend 資料夾內建立一個獨立的 Python 虛擬環境,以隔離專案依賴。
  3. 安裝核心依賴套件:安裝 FastAPI (Web 框架)、Uvicorn (ASGI 伺服器)、SQLModel (ORM)、Psycopg2 (PostgreSQL
    資料庫驅動)、python-dotenv (環境變數管理)、passlib (密碼雜湊) 和 python-jose (JWT 處理)。
  4. 產生 requirements.txt:將所有已安裝的依賴套件及其版本記錄到 backend/requirements.txt 檔案中。
  5. 建立 FastAPI 應用程式骨架:建立 backend/main.py 作為 FastAPI
    應用程式的入口點,並加入一個簡單的測試路由以驗證服務是否正常啟動。
  6. 建立 .env 檔案:用於儲存資料庫連線字串和 JWT 密鑰等敏感資訊。

第二部分:使用者與權限管理

在基礎環境建立完成後,我將著手實作使用者與權限管理功能:

  1. 定義資料庫模型 (SQLModel):
    • 建立 User 模型,包含使用者 ID、使用者名稱、電子郵件、雜湊密碼、啟用狀態、是否為超級使用者等欄位。
    • 建立 Role 模型,用於定義不同的使用者角色(例如:管理員、普通使用者),並建立 User 與 Role 之間的關聯。
  2. 資料庫連線與初始化:
    • 設定 PostgreSQL 資料庫連線。
    • 建立一個工具函數,用於在應用程式啟動時自動建立所有定義的資料庫表格。
  3. 實作認證與授權邏輯:
    • 密碼雜湊:使用 passlib 庫對使用者密碼進行安全雜湊處理。
    • JWT 認證:實作基於 JWT (JSON Web Token) 的使用者認證機制,包括:
      • 生成 JWT 令牌。
      • 驗證 JWT 令牌並從中提取使用者資訊。
    • 使用者相關 API 路由:
      • 註冊使用者:提供一個 API 端點供新使用者註冊。
      • 登入:提供一個 API 端點供使用者登入,成功後返回 JWT 令牌。
      • 取得當前使用者:建立依賴項,用於從 JWT 令牌中獲取當前已認證的使用者資訊。
      • 權限檢查:建立依賴項,用於檢查使用者是否具有特定角色或權限(例如:只有超級使用者才能存取的路由)。
  4. 模組化路由:將使用者相關的 API 路由組織到獨立的檔案中(例如:routers/users.py 和 routers/auth.py),並在
    main.py 中引入。

這時有一些失誤,我本來想他把計劃列出來討論完再開始,但由於我指令沒有下好,導致他計劃完就直接執行了
不過由於看起來沒有特別的問題,我就沒阻止他繼續
他建構資料夾與一些功能後
我先去.env修改一些敏感資料例如SECRET_KEY和資料庫帳密
將資料修改成你自己的內容確保安全

接下來我打算測試他建構的功能,不過首先避免他又擅自執行,我先告訴AI同事等我說好再執行
我給AI的指令:

先暫停,等我說階段二繼續開發再繼續

但要測試前,由於功能需要依附資料庫才能正常運作,我請AI同事先幫我建構一個資料庫容器
我給AI的指令:

請先幫我先用容器建構一個postgredb,並在裡面建立一個測試用資料庫,@backend/.env 在裡面寫入測試資料庫的連線資料,供測試使用

不過這邊,由於我之前有安裝docker desktop所以可以直接執行,如果沒有就要先建構自己電腦的容器環境
等待他把相關image的檔案下載後,應該就會啟動了

結果他忘記我說在postgredb測試,他直接寫了用sqlite測試的程式,結果就出錯了,而且他還把資料庫帳密直接放在docker-compose.yml裡面,這之後如果想做github上傳會有很大的資安風險
還有就是由於我之前沒跟他說我手動更新了資料,結果他又把資料還原成舊的
我只好跟AI同事好好說明,請他把敏感資訊都放在.env,因為檔案之後我會叫他不會上傳,並跟他說我的測試資料庫是postgredb不是sqlite
我給AI的指令:

首先,我更新了帳密 @backend/.env 請不要去蓋過我的資料,第二,@docker-compose.yml 帳密相關請將開一個.env的檔案去存放敏感資料。第三,我測試的資料庫是postgredb不是sqlite,請修正程式內容   

還有為了他以後記得這件事,我特別請AI同事去記住敏感資料要另外放
我給AI的指令:

請記得,像ip、帳密、key...等敏感資料,不能放在程式裡面,而是外部寫一個.env去引用

之後AI同事給了我測試用指令

  1. .\venv\Scripts\activate
  2. pytest tests
    結果發現他測試程式碼出現問題,這時候我複製錯誤訊息給AI同事幫我修正
    (題外話:我之前其實是想用更自動化的方法,例如執行指令後的結果輸出log檔,然後請AI去讀,但光這個功能那時候就搞得好幾天,後來覺得每多一個功能就會多一個出現BUG的機會,除非未來針對這個功能去開發,不然現階段還是以手動複製貼上會比較順利)
    修復bug是一個比較枯燥的動作,就是執行,把錯誤碼貼給AI同事請他分析修正。
    這裡遇到的是需要的套件沒有安裝,因為很多錯誤通常都不會只有一個地方出現,我直接請AI同事檢查有沒有需要的套件沒有安裝
    我給AI的指令:
請你幫我檢查目前功能需要的套件,並幫我安裝 

然後出現下一個問題,他出現無法import的問題

from backend.main import app
E ModuleNotFoundError: No module named 'backend'
我直接貼錯誤碼給他,他想要硬解用 sys.path去把路徑添加近來,而且還說這可能不是最佳實踐
我覺得這不是好的做法,於是我提示AI同事檢查__init__.py的用法,是不是有資料夾沒有
AI同事才想起來我的tests資料夾也要放__init__.py才能正確被解析
(我覺得這個操作已經需要一點程式經驗了,因此我認為與AI共事,還是要學習,不然很容易被AI偷埋奇怪的用法)
解決完這個問題,再加上後面出現的有些相依套件安裝後,pytest環境到此終於架構完成,可以執行了。

比想像中花了更多的時間在處理建置的問題,不過一開始能把這些相關建置好,之後在處理功能上的問題就能排除掉相關因素~

今天時間差不多了,明天進度應該是處理pytest測試的錯誤訊息


上一篇
【Day 4】和 AI 對話,不說清楚真的會出事
下一篇
【Day 6】debug地獄到曙光:我和 AI 合作修測試的故事
系列文
30 天與 AI 同事打造系統的求生實錄30
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言