現場實作引導:從考古題下載到專案 skill

本頁是工作坊當天使用的精簡操作講義。請跟著講師的節奏逐步完成;每段提示詞都可直接複製貼到 Codex,也可依需求客製化調整,例如資料存放位置或檔名格式。

先說清楚:現場版與完整教材的角色不同

今天的現場版

只完成關鍵操作、觀察結果、調整提示詞,並把已驗證的流程整理成可重複使用的 project-local skill。

既有四個完整模組

保留給課前預習、課後複習與自主練習。內容更完整,也需要較多時間逐步閱讀與操作。

今天的目標:不是一次把所有教材做完,而是親自經歷一次「先用口語提出需求 → 觀察結果 → 補上必要規格 → 把確認過的流程存成 skill」的 AI Agent 協作循環。

開場與準備

  1. 簡介 AI Agent 的發展以 Codex、Claude Code 與 Gemini 等工具為例,說明除了對話外,AI Agent 也能在指定的工作區內處理檔案、使用工具並回報結果。
  2. 準備 GitHub 帳號請尚未申請的學員先完成申請;稍後若要把教材發布到網路,會更方便。
  3. 回顧 Codex 專案確認知道如何建立專案、知道目前專案資料夾的位置,並讓 Codex 的工作範圍只限於這個專案。
工作坊(一)已涵蓋工具安裝與基本設定;今天假設環境已可使用,先花幾分鐘讓每位學員確定自己正在正確的專案資料夾中。

練習一:先用自然語言提出需求

第一輪刻意不規定資料夾結構。目的是觀察:同一個需求,只要細節沒有說清楚,不同人的 Agent 可能會把檔案放在不同位置,或用不同方式命名。

請複製這段提示詞

PROMPT 01|先完成一件事
幫我在目前的專案裡,從大考中心下載 115 學年度四技二專統一入學測驗電機與電子群資電類的專業科目(一)與專業科目(二)歷屆試題及答案,並放到這個專案資料夾裡。完成後告訴我下載的檔案位置,並列出檔名讓我檢查。
  • Agent 把檔案放在哪一個資料夾?
  • 題目與答案是否都有下載?
  • 不同學員的資料夾名稱、檔名與位置是否一致?
不要急著判定哪一位做錯。這正是要看見的差異:需求有完成,但檔案結構尚未被共同定義。

練習二:補上必要規格,讓結果可管理

現在把「放在專案裡」改成可驗收的資料夾規格。之後即使下載多個年份,也能在同一個位置找到所有原始資料。

請複製這段提示詞

PROMPT 02|補上位置與年份規則
請在目前專案下載 114 學年度四技二專統一入學測驗電機與電子群資電類的專業科目(一)與專業科目(二)試題及答案。

請把每一個年份的原始下載資料放在專案根目錄的 raw 資料夾下:
- 114 年的資料放在 raw/114/
- 115 年的資料放在 raw/115/

每個年份資料夾中都要保留該年度的題目與答案。若目前已下載的 115 年資料不在 raw/115/,請整理到該位置,但不要刪除任何檔案。完成後列出 raw/114/ 與 raw/115/ 的檔案,讓我檢查。
  • 是否出現 raw/114/ 與 raw/115/?
  • 每個年份下是否都能找到題目與答案?
  • Agent 是否有先說明找不到資料、需要確認來源,或需要你的授權?
這次不是「講得越長越好」,而是補上真正會影響成果的規格:存放位置、年份層級、保留哪些檔案與完成後的檢查方式。

練習三:把驗證過的流程存成 project-local skill

每次都重新說明下載、整理與檢查規則並不必要。當流程已經驗證符合需求,就讓 Agent 幫我們把它保存成只屬於目前專案的 skill。

請複製這段提示詞

PROMPT 03|把流程變成可重複使用的 skill
請根據我們剛剛已確認的考古題下載與整理流程,在這個專案建立一個 project-local skill,名稱為 download-exam-pdf。

這個 skill 的預設行為是:把下載的原始題目與答案依年份放在 raw/<year>/。

使用時我應該可以指定:
1. 單一年份,或起訖年份範圍。
2. 考試類群,例如電機與電子群資電類。
3. 下載專業科目(一)、專業科目(二),或兩者都下載。
4. 原始資料的存放根目錄;若未指定,就使用目前專案的 raw/。

請在 skill 說明中寫清楚需要輸入的資訊、預設行為、檔案結構與完成後的檢查方式。建立後,告訴我 skill 的位置,並給我一個最簡短的使用範例。
  • skill 是否建立在目前專案,而不是使用者帳號的全域設定中?
  • 說明是否包含年份、類群、科目與儲存位置四種可調整項目?
  • 預設輸出是否明確是 raw/<year>/?
skill 不是魔法指令;它是把「已經確認能用的工作方法」寫成下次可直接套用的說明。先驗證流程,再儲存流程,才能減少重複說明。

練習四:把試卷切成可用的題庫資料

現在使用已下載的原始資料,將每一題轉成一張圖檔,並把答案整理成一個簡單的 JSON 資料庫。圖檔名稱就是題目的 key,JSON 以同一個 key 對應正確答案。這個步驟的輸出不再放在 raw/,而是固定放在 repo/<year>/。

請複製這段提示詞

PROMPT 04|從原始試卷建立題庫
請使用目前專案 raw/114/ 中的統測試題與答案,建立可供後續測驗使用的題庫資料。

請完成以下工作:
1. 將專業科目(一)與專業科目(二)的每一題切成一張獨立圖檔。
2. 為每一張圖檔建立穩定、不重複的檔名;檔名要能作為題目的 key。
3. 讀取答案資料,建立一個 keys.json,讓每一個圖檔 key 都能對應到正確答案。
4. 將完成的題庫放在 repo/114/;原始下載檔仍保留在 raw/114/,不要混在一起。

完成後列出 repo/114/ 的資料夾結構、題目圖檔數量,以及 keys.json 中的題數,讓我檢查兩者是否一致。
  • 每張圖檔是否只代表一題?
  • 圖檔名稱與 keys.json 的 key 是否可一一對應?
  • 圖檔數量與答案資料的題數是否相同?
這裡把「看得到的題目」與「機器可讀取的答案」拆開保存。圖檔 key 是兩者之間的連接點,後續才能隨機挑選題目並正確判定答案。

練習五:檢查與精修題目圖檔

切題完成不表示題庫已可使用。先挑幾題實際打開檢查,再請 Agent 針對常見問題逐一修正。不同試卷、不同工具或不同學員的結果可能不同,因此這是必須保留的人工驗收步驟。

題目邊界不乾淨

圖檔可能多切到上一題或下一題的一部分內容。

共用圖表遺失

題組共用的圖或表若只留在第一題,後續題目會缺少作答資訊。

保留舊題號

舊試卷題號會干擾日後重新編排或隨機出卷,應從圖檔中移除。

請複製這段提示詞

PROMPT 05|檢查、修正與清理
請檢查 repo/114/ 中已切好的題目圖檔與 keys.json,找出並修正下列問題:

1. 每一張圖檔只保留該題的題幹、需要的圖表與選項;不要留下上一題或下一題的內容。
2. 若多題共用同一張圖或表,請讓每一題都保留作答所需的那張圖或表,不要只有第一題看得到。
3. 請移除圖檔中原始試卷的題號;保留題幹、圖表與選項即可。圖檔檔名與 keys.json 的 key 不要改掉。

修正後,請隨機列出幾個已檢查的題目,說明你修正了什麼;並再次確認圖檔數量與 keys.json 的題數一致。
  • 抽看同一題組的每一題,是否都保有必要的共用圖表?
  • 圖檔內是否只剩題目本身、圖表與選項,而沒有舊題號或相鄰題目?
  • 清理後是否仍能以原圖檔 key 找到對應答案?
這一步的產出不是「切好的圖片」,而是可獨立使用的題目。日後不論重新選題、混合年份或建立練習網頁,每一題都必須自己站得住腳。

練習六:建立第二個 project-local skill,讓流程可組合

下載與切題清理是兩件不同的工作。現在把第二件事存成獨立 skill;它不限定統測來源,只要提供題目與答案的原始檔,就能整理成同樣的題庫格式。

請複製這段提示詞

PROMPT 06|建立切題與清理 skill
請根據我們剛剛已確認的切題、答案對應、檢查與清理流程,在這個專案建立第二個 project-local skill,名稱為 prepare-question-bank。

這個 skill 的工作是:從一個已存在的原始試題與答案資料夾,建立可用的題庫;預設輸出位置為 repo/<year>/。

使用時我應該可以指定:
1. 原始試題與答案所在的資料夾。
2. 年份或題庫名稱。
3. 輸出的題庫根目錄;若未指定,就使用目前專案的 repo/。

skill 說明必須包含:逐題切圖、以圖檔名稱對應 keys.json、共用圖表的處理、移除舊題號、人工抽查與圖檔數量/答案數量的檢查。它不能假設原始資料一定來自統測,也要能用於學測或書商提供的試卷。建立後告訴我 skill 的位置,並給我一個最簡短的使用範例。

為什麼要分成兩個 skill?

skill專責工作可重複使用的情境
download-exam-pdf找到、下載並按年份整理公開試題與答案。下載統測不同年份或不同類群的資料。
prepare-question-bank把已存在的試題與答案切題、清理並建立 JSON 對應。統測、學測、書商試卷,或任何已放進專案的題目來源。
重點:如果合成一個大 skill,換成學測或書商資料時,可能得重新建一套流程。拆成兩個 skill 後,只要替換前段的資料來源,後段的切題與清理 skill 仍可直接重用;需要完整流程時,Agent 也能依序串成「下載 → 切題清理」的 pipeline。

用一段測試提示詞看見 pipeline

PROMPT 07|讓 Agent 串接已建立的 skill
請使用目前專案已建立的 skill,先下載 115 學年度電機與電子群資電類的專業科目(一)與專業科目(二)試題與答案到 raw/115/,再把這些原始資料整理成 repo/115/ 的題庫。完成後分別報告下載階段與題庫整理階段的結果,並讓我檢查每個資料夾的位置與檔案數量。
這不是把兩個 skill 硬綁在一起,而是讓 Agent 在需要完整流程時依序調用。下一次若資料已經在本機,就可以直接使用第二個 skill,不必重新下載。

練習七:先做出第一版靜態練習網頁

題庫已經在 repo/<year>/,現在請 Agent 用它產生學生可直接開啟的靜態練習網頁。第一版先聚焦在最小可行成果:隨機出題、學生作答、立即批改,以及顯示每題對錯。

請複製這段提示詞

PROMPT 08|第一版靜態練習網頁
請使用目前專案 repo/114/ 中已整理好的題目圖檔與 keys.json,建立一個給學生使用的簡易靜態練習網頁。

每次開始練習時,請從題庫隨機抽出 10 題,顯示題目並讓學生選擇答案。學生送出後,請立即批改,顯示答對幾題、答錯幾題,以及每一題是答對還是答錯。

請把網頁放在目前專案的 app/ 資料夾,並告訴我完成後要開啟哪一個 HTML 檔案。這是第一版,先做出可直接開啟、可實際作答與批改的成果即可。
  • 雙擊 HTML 檔案後,是否不需要啟動伺服器就能開始練習?
  • 重新開始後,抽出的題目是否可能改變?
  • 送出後是否同時看得到總分與每一題的對錯?
第一版的價值是快速看見一個可操作的成果,而不是一開始就要求所有功能都完整。

練習八:補上完整規格,做成可攜式練習單元

第二輪把「能用」提升為「可分享」。將本次需要的題目、答案與程式全部包進單一 HTML 檔,檔案被複製或部署後便不會因為相對路徑或遺漏資料夾而失效。

請複製這段提示詞

PROMPT 09|單一 HTML 的完整練習單元
請以 repo/114/ 的題庫建立完整的學生自主練習單元,輸出為 dist/practice-114.html。

請將題目圖檔、答案與網頁程式全部包進單一、可直接開啟的靜態 HTML;不可依賴外部檔案、相對路徑或網路連線。

起始畫面讓學生選擇練習題數;每回合從題庫隨機且不重複地抽題作答。送出後顯示答對與答錯總數,以及每題的學生答案、正確答案與對錯。提供重新開始功能,並讓學生下載一份自包含的 HTML 複習紀錄,內含本次題目、學生答案、正確答案與每題對錯,可離線開啟複習。
  • 將 dist/practice-114.html 單獨複製到其他資料夾後,是否仍能正常顯示題目與批改?
  • 同一回合中是否沒有重複題目?
  • 下載的複習紀錄是否包含本次題目、學生答案、正確答案與對錯?
「所有資料都包在一個 HTML」不是唯一的網頁架構,但很適合不需要伺服器的課堂練習單元。

練習九:把練習網頁流程存成第三個 skill

當「題庫資料夾 → 單一 HTML 練習網頁」已確認可用,就把這段流程也保存下來。未來只要換一個年份或換一個題庫,仍能套用同一個產生流程。

請複製這段提示詞

PROMPT 10|建立靜態練習網頁 skill
請根據已確認的題庫到練習網頁流程,在目前專案建立第三個 project-local skill,名稱為 build-static-practice-page。

此 skill 讀取 repo/<year>/ 題庫,產生單一、可直接開啟的靜態 HTML 練習網頁,預設輸出至 ./dist/。

使用時可指定:
1. 題庫來源,例如 repo/114/。
2. 輸出位置,預設為 ./dist/。
現在的三段 pipeline:download-exam-pdf 負責取得資料,prepare-question-bank 負責整理可用題庫,build-static-practice-page 負責把題庫變成學生可使用的練習單元。每一段都能單獨重用,也能在需要時依序串接。

練習十:部署與分享

靜態 HTML 檔可先在電腦上直接開啟;若要讓學生透過網址使用,則可部署到 GitHub Pages。若帳號已開通 ChatGPT Sites,也可以請 Codex 建立並部署一個 Site。使用 GitHub Pages 時,請直接說清楚完整網址結構:{account}.github.io/{repository}/{root}/{exam-name}。

選項 A:部署到 GitHub Pages

PROMPT 11A|GitHub Pages 部署範本
請將目前專案的 app/practice-114.html 部署到我的 GitHub Pages。

https://abc123.github.io/2026fall/digi101/formative01/

選項 B:部署到 ChatGPT Sites

PROMPT 11B|ChatGPT Sites 部署範本
@Sites 請將目前專案的 app/practice-114.html 部署到我的 ChatGPT Site。
  • 網址開啟後,題目圖檔是否仍正常顯示?
  • 練習、批改、重新開始與下載複習紀錄是否都實際可用?
  • 分享範圍是否符合預期,不要誤把只供課堂使用的內容公開給不該看到的人?
ChatGPT Sites 的可用性與發佈控制會受帳號方案、工作區與管理員設定影響;若無法使用,GitHub Pages 是這類單一靜態 HTML 練習單元的直接替代方案。相關說明見 OpenAI:Creating and managing ChatGPT Sites。

選做:用模組化 skill 建立可重複執行的本機測驗產生 APP

若時間足夠,最後會使用講師準備好的 skill 套件,建立一個之後不必再依賴 AI 的本機 Python APP。它不是只產生一份靜態測驗頁面,而是一個可反覆加入新題庫、再產生新測驗頁面的工具。

先下載 skill 套件

從本場講義下載 module4-agents-skills.tar,解壓縮後放進目前專案的 .agents/skills/。

套件中的四個 skill

download-exam-pdf、slice-exam-pdf、clean-exam-question-images 與 build-quiz-app。

請複製這段提示詞

PROMPT 12|用 build-quiz-app 建立本機產生器
請使用目前專案的 $build-quiz-app skill,參考 repo/114/ 的題庫,建立一個可重複產生靜態測驗頁面的本機 Python APP,放在 ./app/。再套用 repo/114/ 題庫生成一份靜態測驗頁面,放在 ./app/dist/。
這個 APP 的工作方式:第一次由 AI Agent 協助建立 APP;之後加入新的、已切割好的題庫時,只要調整 app/config.json,再執行 python3 app/build_bundle.py,即可由本機 Python 直接產生新的靜態測驗 HTML。
  • app/config.json 是否列出題庫設定?
  • 是否能執行 build_bundle.py 並在 app/dist/ 看到新測驗頁面?
  • 新增另一個題庫設定後,是否不需要再次要求 AI 便能重新產生測驗頁面?
重複性的產生工作改由本機 APP 處理,可以維持輸出格式的一致性,也避免每次重新請 AI 生成而消耗不必要的 token。