純對話打造值班排班工具

這份教學延續練習 2「純對話打造線上測驗系統」的做法,這次換一個完全不同的任務:不套用任何工作坊講師事先寫好的 custom skill,純粹靠你自己一步一步把需求講清楚,讓 AI 助理從零做出一個活動值班表自動排班工具——輸入是一份人員名單(含每個人可以值班的時段、誰是組長),輸出是一份自動排好、儘量平均分配、又符合各種限制(時段人數、組長規則、每人最多值班次數)的班表。同一套「講清楚需求、東西不如預期就追問修正」的方法,可以套用在測驗系統以外的任何小工具上,這正是這份教學想驗證的事。

repo/ 裡目前只有一份範例人員名單 人員管理範例.csv;請依照下方對話流程,讓 AI 助理建立可以直接用瀏覽器打開的排班工具(本教學示範會建立在 app/,資料夾名稱可以自己換)。

學習目標

做完這份教學,你應該能夠:

這份教學在教什麼

練習 2 示範的是「套用現成 skill、一句話生成」背後最原始的做法:完全不靠事先寫好的工具,純粹用對話把系統生出來,做出來的是一個線上測驗系統。這份教學用同一套做法,換成排班這個完全不同性質的任務,用來驗證一件事:這套能力不是只能用在某一種特定的工具上,而是任何你講得清楚的需求,都可以請 AI 助理照著做出來。

這篇教學真正想教的,還是那兩個能用在任何情境的能力:

先備條件

不需要事先懂任何排班演算法的術語(例如限制滿足、貪婪演算法),只要把「這個工具要幫你做到什麼」講清楚就好,實際怎麼排、用什麼方式算,都是 AI 助理自己的事。

第一步:把需求講清楚

不用去想「要用什麼技術做」,只要把你希望這個工具做到什麼、畫面上要看到什麼,用平常說話的方式講清楚就好。同一個需求,可以用不同的詳細程度來描述:講得越簡短,AI 自己要猜、要決定的地方就越多,做出來的東西不一定跟你想的一樣;講得越詳細,第一次做出來的結果通常會越接近你的想像,事後要追問修正的次數也會比較少。下面示範兩種寫法,挑一種開始就好,不用兩種都用;不管從哪一種開始,做出來不滿意都可以照下一節「追問修正」的方式繼續調整。

簡短版:先讓 AI 自己判斷

只講最核心的目的,其餘細節(要不要能匯入 CSV、超過限制時怎麼提示、畫面長什麼樣子)全部交給 AI 自己決定。適合想先快速看看 AI 能做到什麼程度,或是還沒想清楚細節、只想有個東西可以邊看邊調整時使用。

幫我用 repo 資料夾裡的範例名單,做一個活動值班表自動排班的網頁工具,
不用架伺服器,雙擊就能開啟。

中等版:講清楚要考慮的規則

把時段設定、人員名單、要遵守的排班限制、超出限制時該怎麼處理都講出來,但不細究畫面上的按鈕、配色這類細節。多數情況下,這個詳細程度已經夠用,是兩種寫法裡最推薦的起點。

我要一個活動值班人員排班的網頁工具:先設定活動時段(可以用常用時段快速
套用,也可以自己新增修改);新增人員時可以勾選誰是組長,並勾選每個人
可以值班的時段,人員名單也要能用 repo 資料夾裡的範例 CSV 一次匯入;每人
可以設定最多值班幾個時段,也可以開關「每個時段至少要有一位組長」這個
規則;按下產生班表後自動排班,儘量平均分配工作量,畫面要能看到每個
時段排了誰、誰是組長、每人值班幾次;如果現有條件沒辦法同時滿足,要
清楚告訴我原因,不要硬生出一份違反規則的班表。最後的班表要能匯出成
CSV,也要有適合列印的版面;資料留在瀏覽器裡,重新整理網頁還在。
人員管理範例 CSV,包含姓名、是否為組長與可值班時段三個欄位
範例 CSV 的欄位:姓名、是否為組長、可值班時段。

不管挑哪一種寫法,AI 助理收到描述後都會自己決定用什麼方式把它做出來,不需要你懂內部細節。完成後,請確認它建立了一個可以直接打開的網頁工具。每次從零建立的程式內容不一定完全一樣,講得越簡短,跟本教學示範的成果差距可能越大;接下來的操作都以剛剛建立好的成果為準。

打開看看

完成後,直接雙擊打開 AI 助理建立的入口網頁(例如 app/index.html),不需要安裝任何東西、不需要開終端機、也不需要連網路。第一次看到的成果,很可能不會百分之百符合你腦中的想像,這是正常現象,不用自己動手修改程式碼,也不用整段需求重講一次——下一節示範怎麼用簡短的追問把它調整到位。

追問修正:第二輪對話

把第一版打開、自己稍微試填一輪之後,通常會發現幾個地方不如預期,尤其是排班類的工具最容易漏掉某條限制。這時候不用自己猜是哪裡的程式碼有問題,直接用平常說話的方式描述「你看到的狀況」和「你想要的結果」,讓 AI 助理幫你調整。以下是幾個很實際會遇到的追問範例:

組長規則好像沒有生效

我開了「每個時段至少要有一位組長」這個規則,但產生出來的班表裡,
有些時段還是全部都是非組長身份的人,麻煩檢查一下這條規則有沒有
確實套用到每個時段。

班次分配不平均

產生出來的班表裡,有些人被排了很多個時段,有些人幾乎沒被排到,
麻煩在符合每個人可值班時段跟最大值班數的前提下,讓班次儘量平均
分配給每個人。

不管是哪一種追問,處理方式都一樣:把你實際看到的畫面或狀況描述給 AI 助理,講清楚哪裡不符合你要的,不用自己猜是程式的哪裡出了問題。

操作預覽:快速測試

還沒有真實名單之前,可以先用內建的範例資料快速看看效果:點擊畫面上的「載入範例資料」,工具會自動建立一個範例活動、幾個常用時段,以及幾位範例人員;接著點擊「產生班表」,就能看到結果——包括每個時段安排了哪些人、哪些人是組長,以及每個人的值班次數。先用範例資料走一輪,確認基本邏輯沒問題,再換成真實名單會比較安心。

CSV 匯入人員名單

人員較多時,不用一個一個手動新增,可以用 CSV 一次匯入。先在畫面上建立好這次活動要用的值班時段,再到「人員管理」找匯入 CSV 的功能,把整理好的名單貼上或選取檔案匯入。repo/ 裡的 人員管理範例.csv 就是一份可以直接拿來測試的範例,格式大致是「姓名、是否為組長、可值班時段」,可值班時段用一個符號隔開多個時段編號(例如「第 1 個時段和第 2 個時段都能值班」)。實際匯入視窗長什麼樣子、欄位順序是否完全一樣,以你這次做出來的成果為準;如果格式對不起來,一樣照上一節的方式,把匯入後看到的狀況描述給 AI 助理,請它調整解析方式。

驗收重點

正式拿去排真實班表前,建議先走一次完整流程確認:

  1. 用「載入範例資料」+「產生班表」,確認能順利跑出一份班表,畫面上看得到每個時段的人員、組長標記、每人值班次數。
  2. 用 repo/ 裡的範例 CSV 匯入人員名單,確認匯入後的可值班時段跟原始 CSV 對得起來。
  3. 刻意把某個人設定成只能值班某一個時段,確認產生班表後這個人不會被排到其他時段。
  4. 刻意把某人的最大值班數設成 1,確認他最後不會被排超過 1 個時段。
  5. 開啟「每個時段至少要有一位組長」,確認每個時段的名單裡都至少有一位組長身份的人。
  6. 故意把條件設成不可能滿足(例如所有人可值班時段都只勾一個、但時段數量超過人數能覆蓋的範圍),確認畫面會清楚顯示原因,而不是硬生出一份違反規則的班表。

資料儲存與匯出

目前填好的活動、時段、人員資料會留在瀏覽器本機,重新整理網頁後仍然保留;換一台電腦或清除瀏覽器資料後就會不見,這點跟需要另外存檔的桌面軟體不一樣。排好的最終班表可以下載成 CSV 檔案留存,也可以用「列印班表」取得適合列印的版面,方便貼在公告欄或印出來交給組長。

資料只留在這台電腦、這個瀏覽器裡:如果需要在不同電腦之間共用同一份排班資料,或是想要一份不會因為清除瀏覽器資料而消失的備份,記得排完班就先把 CSV 匯出存好。

動手做:加入新規則

目前的規則涵蓋了可值班時段、每人最大值班數、每時段是否需要組長。之後如果有新的排班限制(例如某兩個人不能排在同一個時段、某個時段需要至少兩位以上的人),準備方式一樣:用平常說話的方式把新規則描述清楚,請 AI 助理加進去:

幫我加一條新規則:某些人彼此不能排在同一個時段一起值班,設定人員的
地方要能勾選「不能跟誰同時段」,產生班表時要遵守這條規則,不要影響
原本已經有的其他規則。

完成後,驗收方式跟上面「驗收重點」一樣:先用範例資料測試新規則有沒有生效,確認沒問題後再套用到真實名單。如果你發現自己常常要對不同活動重複做這整套排班設定,可以考慮把這整個流程包成一句話就能重現的 skill,之後不用每次都重新講一遍需求。