純對話打造線上測驗系統

這份教學示範純對話打造線上測驗系統:不套用任何工作坊講師事先寫好的 custom skill,純粹靠你自己一步一步把需求講清楚,讓 Codex 從零把整個系統寫出來——一個讓全班同時連線作答的測驗網站,加上一個老師可以即時看到「誰在寫、寫到第幾題、寫完了沒、考幾分」的監考儀表板。這篇教學示範的,正是「套用現成 skill、一句話生成」那類捷徑背後,原本要花的那些對話。

repo/ 是現成題庫,包含六組各 10 題的練習包——115 專業科目(一)A/B、115 專業科目(二)A/B、115 數學 A-A/B。這個資料夾目前只提供練習題庫;請依照下方對話流程,讓 Codex 建立可執行的伺服器成品(本教學示範會建立在 server/)。

學習目標

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

這份教學在教什麼

「套用現成 skill、一句話生成」是一種捷徑;這篇教學示範的是那條捷徑背後、最原始的做法——完全不靠任何事先寫好的工具,純粹用對話把系統生出來。不管是哪一種做法,做出來的「東西」都是同一種(線上測驗系統),差別只在「怎麼做出來」。

這篇教學真正想教的,不是要你背下某一句「魔法指令」,而是兩個能用在任何情境的能力:

先備條件

先確認 Python 3 已經裝好:打開 PowerShell,輸入 python --version(找不到就再試 python3 --version)。如果出現版本號(例如 Python 3.12.4)就代表已經裝好,可以跳過這一步。如果出現錯誤訊息,或跳出「你要開啟市集嗎」的視窗,代表電腦還沒有能執行的 Python:到 Windows 的 Microsoft Store 搜尋「Python 3.12」,點取得安裝即可(不需要系統管理員權限,也不用另外設定 PATH)。安裝完成後,請關閉並重新打開一個新的 PowerShell 視窗再試一次 python --version。

第一步:把需求講清楚

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

簡短版:先讓 AI 自己判斷

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

幫我用 repo 資料夾裡的題目,做一個全班可以一起線上考試的網站,
要有學生作答的頁面,也要有老師可以即時監考的頁面。

中等版:講清楚兩邊各自要看到什麼

把學生端、老師端各自要看到的東西、要用的技術,還有「同一個區域網路、不用申請帳號」這個環境限制講出來,但不細究畫面上的按鈕、確認訊息這類細節。多數情況下,這個詳細程度已經夠用,是兩種寫法裡最推薦的起點。

我想要一個線上考試工具:學生打開網址後選考科、輸入姓名,依序作答
repo 資料夾裡的題目,交卷後看到分數;老師可以
即時看到全班每個人目前的作答進度跟最後的成績,畫面要能自動更新。整個
東西要在教室的區域網路運作,不需要申請任何帳號。伺服器請用 Python
搭配 Flask 這個網頁框架來寫,幫我自動安裝所有需要的 Python 套件。

不管挑哪一種寫法,Codex 收到描述後都會自己決定用什麼方式把它做出來,不需要你懂內部細節。完成後,請確認它在 server/ 建立一支可執行的伺服器程式、學生作答頁面與教師監考頁面。每次從零建立的程式內容不一定完全一樣,講得越簡短,跟本教學示範的成果差距可能越大;接下來的啟動指令都以剛剛建立好的 server/ 為準。

啟動看看

先確認上一節已經成功建立 server/,再在 PowerShell 打一行指令,並且讓這個黑色視窗維持開啟,直到考試結束:

cd server
python server.py

如果打 python 出現「不是內部或外部命令」之類的錯誤,改打 python3 server.py 試試看;兩個都不行,代表 Python 還沒裝好,回到上面「先備條件」處理。

指令執行後,畫面應該會停在類似這樣的內容,而且不會自動結束(這是正常的,代表伺服器正在執行):

Student page:    http://192.168.1.23:8000/
Dashboard page:  http://192.168.1.23:8000/dashboard
(this machine)   http://localhost:8000/

Press Ctrl+C to stop.

192.168.1.23 只是範例,每台電腦、每個 Wi-Fi 環境印出來的數字都不一樣,請以自己電腦實際印出來的那組為準。Student page 那一行是要交給學生的網址;Dashboard page(多了 /dashboard)是老師自己看的監考頁面。

第一次看到 Codex 做出來的成果,很可能不會百分之百符合你腦中的想像,這是正常現象,不用自己動手修改程式碼,也不用整段需求重講一次——下一節示範怎麼用簡短的追問把它調整到位。

第一次執行可能會跳出防火牆詢問:Windows 可能會跳出「Windows Defender 防火牆已封鎖此應用程式的部分功能」視窗,請勾選「私人網路」並按允許存取;如果按了取消或忽略,學生的裝置會連不上。

追問修正:第二輪對話

把第一版跑起來、自己稍微點一輪之後,通常會發現幾個地方不如預期。這時候不用自己猜是哪裡的程式碼有問題,直接用平常說話的方式描述「你看到的狀況」和「你想要的結果」,讓 Codex 幫你調整。以下是幾個很實際會遇到的追問範例:

多選題沒辦法選超過一個答案

有幾題的正確答案不只一個字母(例如同時是 A 跟 D 才算對),麻煩讓學生作答
時可以選超過一個答案,而且要選出的答案跟正確答案完全一樣(不多不少)才算對。

監考頁面全班混在一起,想依考科分開看

監考頁面目前把所有考科的學生混在一起顯示,麻煩加一個下拉選單,
可以只篩選出某一科的學生。

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

學生端操作預覽

學生打開 Student page 網址後:選一個考科、輸入姓名(座號/學號可留白),按開始作答;依序看到每一題的圖片,點選 A、B、C、D(可能不只選一個),可以用「上一題」「下一題」或畫面下方的題號按鈕跳轉;答完按「交卷」,會有確認訊息提醒還有幾題沒作答,交卷後立刻看到分數,之後就不能再修改答案。

教師端:即時監考儀表板

打開 Dashboard page 那個網址(網址結尾是 /dashboard),畫面每 3 秒會自動更新一次,每位已經打開學生作答頁的人會各自出現一張卡片:

卡片狀態顏色代表意義
已加入灰色學生已輸入姓名進入測驗,但還沒開始選答案
作答中藍色已經選了至少一題答案,進度條顯示目前答了幾題
已交卷綠色已按下交卷,卡片會直接顯示這次的分數
連線中斷?紅色提示超過約 25 秒沒有動靜(沒換題、沒選答案),可能是該學生已離開頁面或網路不穩,值得走過去看一下

畫面上方有一個依考科篩選的下拉選單,以及整班的統計(已加入/作答中/已交卷人數、平均得分率)。右上角的「清除名單」按鈕會清空目前畫面上的作答紀錄,換下一班上課、或是想重新測試時再使用,平常上課中不要誤按。

驗收重點

正式讓全班使用前,請老師自己先走過一次完整流程:

  1. 用自己的手機或另一台電腦(不要用伺服器所在那台電腦本身),連上 Student page 網址,輸入一個測試用姓名(例如「測試用」),選一科、答兩三題。
  2. 回到老師電腦打開 Dashboard page,幾秒內應該會看到剛剛那個測試姓名的卡片出現,狀態是「作答中」,進度會跟著你選答案即時更新。
  3. 按下交卷,確認卡片變成綠色「已交卷」並顯示分數;分數應該跟你自己心算的對得起來(可以故意答錯一題來驗證分數真的有算對,不是隨便顯示)。
  4. 用「清除名單」按鈕清掉這次測試紀錄,確認正式開始前畫面是乾淨的,不會混到測試用的假姓名。

課堂結束後

動手做:加入新題庫

完成這份練習後,學生作答頁應該會列出 repo/ 的六組練習包:115 專業科目(一)A/B、115 專業科目(二)A/B、115 數學 A-A/B。之後如果有新的一份題庫(例如下一次段考的考古題),準備方式一樣:每題一張 PNG 圖片,加上一份題號與正確答案相符的 keys.json,放進 repo/<新資料夾名稱>/,再用平常說話的方式請 Codex 加進去:

repo/<新資料夾名稱> 現在也是一組完整題庫(每題一張圖片+keys.json)。
麻煩把這個科目也加進現有的線上測驗系統,不要影響原本六組練習包。

完成後,重新啟動伺服器(Ctrl+C 停掉舊的,再重新執行 python server.py),新科目應該會出現在學生作答頁的下拉選單裡,原本六組練習包維持不變。驗收方式跟上面「驗收重點」一樣:自己先用另一台裝置走一次完整流程。

如果你發現自己常常要對不同題庫重複做這整套對話,可以考慮把這整個流程包成一句話就能重現的 skill,之後不用每次都重新講一遍需求。