自動化與 Agent
把寫死的選項改成用戶自助:registry 改造清單
卡住你的通常不是缺按鈕,而是選項被寫死成「程式碼」而不是「資料」。把它資料化,新增一個選項就從工程師的工作變成使用者的一次點擊。
一個核心觀念
你的功能之所以「只有工程師能改」,不是因為缺按鈕,是因為選項被寫死成「程式碼」而不是「資料」。
- 寫死的選項=程式碼裡一段固定清單(dict、array、enum)。要改它,只能改程式、重新部署。
- 資料化的選項=存在一份檔案或資料庫裡的內容。要改它,只要增刪那份資料,程式不用動。
把前者變成後者,就是 registry(登記表)模式。
Step 1|找出那個「寫死的清單」
在程式碼裡找一組硬編碼的固定選項,大概長這樣:
選項清單 = {
"選項A": 設定A,
"選項B": 設定B,
}
這就是把你和使用者一起綁死的元凶。
Step 2|把它搬到一份外部 JSON(registry)
{
"items": {
"選項A": { "name": "顯示名A", "config": "..." },
"選項B": { "name": "顯示名B", "config": "..." }
}
}
程式改成讀這份 JSON,而不是讀寫死的清單。檔案存在硬碟上,重啟服務後內容還在,這就是「持久」。
Step 3|加一個「新增」端點
後端 API 固定四段:
- 收:接收使用者送來的表單欄位或上傳檔案。
- 處理:驗證格式、轉檔、清洗,看你的領域需要什麼。
- 登記:讀出 registry → 加一筆 → 寫回去。
- 回饋:立刻回一個預覽/試用,讓使用者確認這次新增 OK。
Step 4|讀清單改成「內建+registry」合併
原本回傳選項清單的 API,改成同時輸出內建選項與 registry 裡使用者新增的選項。前端下拉選單會自動多出使用者自己加的項目。
Step 5|加一個「刪除」端點
能加就要能刪:從 registry 移掉那筆,並刪掉它關聯的檔案。內建選項要擋掉不給刪,那是程式碼,不是使用者資料。
Step 6|前端接上「上傳→命名→確認」
一張卡片或一個表單:選內容 → 命名 → 送出 → 顯示進度 → 完成後自動刷新清單,並選中剛新增的那一項。
你一定會踩的三個坑
坑① 自助新增的內容,走的路徑跟內建的不一樣。 預覽走 A 路徑、正式產出走 B 路徑,結果預覽 OK、正式壞掉。解法:讓自助新增的內容走跟內建完全同一條處理函式,預覽就是正式產出的縮小版。
坑② 把使用者資料提交進 git。
registry.json 是執行期資料,會隨使用者操作一直變,還可能含本機路徑。把它加進 .gitignore:程式碼進版控,資料留在各機器本地。
坑③ 前端改完,使用者看到的還是舊畫面。 如果網頁是先 build 成靜態檔再由後端提供,改完一定要重新 build,而且原本開著的分頁是舊版,要強制重整(Ctrl/Cmd+Shift+R)。很多「功能沒生效」的假 bug 都是這個。附帶一個小坑:檔案選擇器用「按鈕+隱藏的 file input、由程式觸發點擊」,比「label 包住隱藏 input」更不容易點了沒反應。
驗收:別信「程式碼看起來對」
分三層各自跑出真實結果才算過:
- 模組層:直接呼叫新增/讀取/刪除函式,走一次完整 roundtrip。
- API 層:真的發一次上傳請求,確認後端整條流程有真實產物。
- 真實操作:開瀏覽器用滑鼠走完「上傳→新增→確認→刪除」。
每一層都要看到實際檔案或實際回應,不是「應該會動」。
卡住時怎麼問 AI
我是新手,正在用 <你的語言/框架,例如 Python FastAPI + React> 做一個功能。我想把一組「寫死在程式碼裡的選項清單」改成「使用者能在網頁自己新增、且重啟後仍保存」的 registry 模式。這是我現在寫死的部分:<貼上那段程式碼>。請一步一步教我:1) 怎麼把它搬到一份 JSON 檔並在程式啟動時讀取;2) 怎麼加「新增」和「刪除」的 API 端點;3) 前端怎麼上傳並在完成後刷新清單。我遇到的錯誤訊息是:<貼上完整錯誤原文>。請先解釋原因,再給我可以照抄的最小可運行範例。
一句話總結
下次想在程式裡再加一個寫死的選項,先問:這串東西該不該變成使用者能自己增刪的資料?會、而且不只一次,就抽成 registry。
這是踩坑實錄與 AI 工具實測系列的一部分。想收到後續完整 SOP,訂閱電子報。
支持這裡的內容:前往 Ko-fi 斗內