AI幫幫忙:我如何用AI快速生成考古題練習工具
把「刷考古題、整理錯題」變成一套可重複使用、可以分享的小工具,而且整個過程幾乎都是在和 AI 對話中完成的。
起點:分數起伏讓我不安
我最近在準備 IPAS 初級資訊安全工程師能力鑑定。備考方式很樸素:在網路上把歷年考古題一份一份刷過去。
刷到後來,有件事讓我不太踏實:每次模擬的分數落在 60 多到 80 多分,起伏很大。及格線是 70 分,等於我隨時可能掉到線下。我意識到,真正該花時間的不是再多刷幾份新題,而是把錯過的題目收起來反覆練,因為錯題才是弱點的所在。
先想清楚:我要的是「記得我」的題庫
一開始我的直覺是把錯題丟給 AI,請它出題、講解、陪我複習。試了一下就發現幾個摩擦:
- 對話一拉長,前面貼過的題目和我定的規則就會被稀釋,每次都得重講。
- 哪幾題錯了幾次,AI 不會穩定地幫我記帳。
- 換一個考試,或換一個人用,一切又得從頭來過。
這些問題的共同點是:我需要的不是更聰明的聊天,而是一份會被保存、可以累積的資料。 於是我換了個思路:把它做成一個工具,而且從設計之初就把「題庫(資料)」和「工具(程式)」分開。這樣 AI 只需要替我產生題庫,不必每次重寫程式;題庫格式一致,工具就能永遠不用動。
做成工具還有兩個額外的好處:可以直接分享給一起備考的人,也能套用到其他任何有考古題的考試。
工具是怎麼長出來的
整個過程不是事先規劃好的,而是「用一陣子,遇到不順,就跟 AI 說一句話改一點」。回頭看,有幾個值得記錄的轉折。
第一版:先做到能刷題。 我請 AI 把一批考古題整理成網頁,每題用表格呈現,題目與選項用藍色,題意、各選項的分析和答案用紅色。答案預設藏起來,點單題才展開,交卷後才一次顯示,並自動標示對錯。這一版的題目直接寫死在 HTML 裡,能用,但每換一份考題就得重做一次,還稱不上工具。
真正的轉折:把題庫拆成 JSON。 我和 AI 花了不少時間把格式談清楚:檔名採「年度-能力-科目.json」(例如 112-info-sm.json);每題包含分類、題目、題意、選項、每個選項的對錯分析和正確答案。HTML 只負責讀取與顯示,放在同一目錄或 ./json/ 的題庫會被讀入下拉選單,並顯示標題與題數。從這一刻起,換考試只要換題庫,工具本身不用動。
讓它記得我:作答紀錄。 我想知道的是「哪幾題總是錯」。所以交卷後,工具會把正確率與錯題寫成獨立的紀錄 JSON;同一個題庫在不同時間的作答會合併成同一份檔案,每題旁邊標示「累計錯 N 次」,還能查看每次成績的變化與平均正確率,或只練習反覆錯的題目。瀏覽器預設不能自己寫檔,所以我讓工具透過 File System Access API 請使用者授權一個資料夾,不支援的瀏覽器則退回下載檔案,並用 localStorage 做備份。
用出來的需求,一個一個補上。 日常使用中冒出的想法,都只是一句話交給 AI:
- 錯題備註: 交卷後,答錯的題目旁會出現備註欄,讓我寫下「為什麼會錯」,存檔後下次遇到同一題會自動帶出來。
- 綜合題庫模式: 同一科目不分年份全部合併,重複題自動去重,成績另外存檔。去重靠比對題目與選項文字;題目的識別碼則用內容雜湊產生,這是刻意的設計,日後新增題庫、題號重排,錯題統計也不會錯位。後來我又加上「隨機抽 10 / 25 / 50 題」,時間不多的時候來一份小測驗,比整份刷更容易持續。
- 版面調整: 頁面寬度改為視窗的 80%;選項內容欄統一寬度、不折行,選項分析欄則吃掉剩餘空間、允許折行;備註框與「顯示/隱藏解析」放在同一行,看起來更俐落。
- 選項順序隨機: 刷到後來,我發現自己開始記「答案在第幾個選項」而不是記觀念。所以加了選項重排,可以選 0%、25% 或 50%,代表每一題有多大機率被打亂順序。畫面上的 (A)(B)(C)(D) 會跟著重新標示,但判分和錯題統計仍以原始選項為準,不受影響。
- 依功能分組與自適應版面: 工具列越加越長,按鈕擠成一排很難找。我把它整理成「選擇題庫」「出題設定」「資料與維護」三張卡片,交卷與重新作答獨立成一條固定在上方的作答列;同時改成自適應版面,手機改為堆疊式顯示,選項分析在展開後出現在選項下方,平板與桌機維持兩欄。
- 索引檔自動化: 網頁沒辦法自己列出資料夾內容,所以需要一份
index.json當題庫清單。我請 AI 在工具上加了「更新 index.json」按鈕,另外寫了一支 Python 腳本,新增題庫後一鍵重建。
題庫累積的過程也出現過小插曲:同一年度的兩份管理概論試題,題號有重複、內容卻不同。我的處理方式是合併後重新編號,並在每題保留原題號與來源份數(origNo、set)以便回頭對照,最後 31 題檢查過沒有任何重複。
與 AI 協作的五個心得
1. 先定規格,再生成內容。 JSON 格式、檔名規則、紀錄格式一旦固定,AI 每次生成的題庫就能保持一致,工具也才能穩定讀取。花在規格上的時間,後面全部賺回來。
2. 要求「最小修改」。 每次改功能,我都明講「在現有的 HTML 上加,保留原本的元素和欄位名稱」。這樣舊題庫與舊紀錄才不會因為一次改版而失效。
3. AI 的答案一定要自己核對。 這是整件事最重要的一條。題庫裡的答案是 AI 依知識判斷出來的,不是官方標準答案。遇到附圖(例如創用 CC 授權標示、Kerberos 流程圖、字串分析題),AI 看不到圖,只能從選項推測,這類題目我會要求它在備註欄標上「暫定」;憑記憶回答、沒有查證的,也要標明。涉及法規的題目,我則要求它先搜尋條文再回答,例如資安事件通報的審核時限(第一、二級 8 小時、第三、四級 2 小時),就是查過才寫進題庫的。看到這些標記的題目,我再自己去核對一次。
4. 對話不是永久的。 有好幾次,AI 沙盒裡先前生成的檔案消失了,只能重新生成或重新上傳。這讓我學到兩件事:檔案要存在自己手上;還要寫一份「生成規則-重啟對話」文件,把命名規則、JSON 格式、HTML 規格和常用提示詞都寫進去。之後開新對話,貼上這份文件再附上最新的 HTML,就能無縫接續。
5. AI 也有看不到的地方。 AI 可以做語法檢查、跑邏輯測試,但沒辦法替我在真實的瀏覽器裡操作畫面。排版、按鈕行為這類東西,還是得自己打開實測,再把問題回報給它修正。
目前的成果與限制
目前累積了九個題庫:七個是 IPAS 初級資訊安全工程師的管理概論與技術概論(涵蓋多個年度,約 105 題),另外兩個是我後來順手放進去的 AI 應用規劃師練習題(中級科目一 150 題、初級學科一 200 題),合計約 455 題,每一題都有題意說明和逐個選項的分析。同一個工具能直接吃下不同考試的題庫,這也驗證了「資料與工具分開」的好處。工具本身只有一個 HTML 檔,加上放在 json/ 資料夾的題庫,不需要安裝任何套件,也沒有後端。
當然也有明確的限制:
- 目前只支援單選題。
- 題庫答案未經官方比對,有爭議或附圖缺漏的題目需要自行確認。
- 想把成績直接寫回檔案,需要 Chrome 或 Edge 授權資料夾;其他瀏覽器只能下載紀錄檔。
- 直接雙擊 HTML 開啟時,工具無法自動掃描資料夾,每次開啟都要按一次「選擇資料夾」(或「選擇 JSON 檔」);開本機伺服器可以省掉這個步驟(詳見下一節)。
- 自適應版面已針對手機與平板調整,但我只在開發環境做過語法與邏輯檢查,沒有逐一在實體裝置上測試,實際顯示請自行確認,遇到問題再回報給 AI 修正。
本地部署:不需要架伺服器
這個工具不需要任何 HTTP 服務,下載後用瀏覽器直接打開就能用。差別只在「題庫怎麼載入」和「成績怎麼存」。
先擺好資料夾
建議另外建一個專用資料夾,把工具和題庫放在一起:
我的題庫/
├─ info-test.html
├─ make-index.py (選用)
└─ json/
├─ 112-info-sm.json
└─ index.json
兩種開法
| 開法 | 做法 | 題庫載入 | 成績存檔 | 適合 |
|---|---|---|---|---|
| A. 直接雙擊(免伺服器) | 雙擊 info-test.html,按「選擇資料夾」並授權;或按「選擇 JSON 檔」一次選取題庫檔 |
每次開啟都要手動選一次 | 授權資料夾時直接寫回 json/(Chrome、Edge);用「選擇 JSON 檔」則下載紀錄檔,需自行放回資料夾 |
想最快上手、不碰命令列 |
| B. 本機伺服器 | 在資料夾執行 python -m http.server,瀏覽器開 http://localhost:8000/info-test.html |
自動掃描 ./ 與 ./json/,不用手動選 |
授權資料夾後可直接寫回;否則下載 | 每天都在用,想省掉重複選資料夾 |
開法 A 的細節
- 雙擊開啟後,畫面上方會顯示「尚未讀到 JSON」,這是正常的:瀏覽器在
file://下不允許網頁自己讀取資料夾。 - 用 Chrome 或 Edge 的話,按「選擇資料夾」,選整個
我的題庫資料夾並允許讀寫。工具會讀入裡面(包含json/子資料夾)的題庫與紀錄,之後的成績與備註都會直接寫回去。 - 用其他瀏覽器,按「選擇 JSON 檔」,在檔案對話框裡全選題庫檔。成績會以下載方式儲存,請把下載的
.records.json放回json/覆蓋舊檔,下次載入時才會接上先前的紀錄。 - 如果授權資料夾失敗(例如瀏覽器拒絕你選的系統資料夾),改選專用的子資料夾,或退而使用「選擇 JSON 檔」。
幾個要留意的地方
- 索引檔: 不管哪種開法,只要是「選擇資料夾」,工具會直接讀取裡面所有題庫,不依賴
index.json;index.json主要是給伺服器模式(開法 B)自動掃描用的。要更新它,按「更新 index.json」按鈕或執行make-index.py。 - 紀錄不會憑空消失: 工具同時會把紀錄備份在瀏覽器的 localStorage;但換瀏覽器、清除網站資料或換開啟方式(雙擊與 localhost 被視為不同來源),備份就不會跟著走,所以仍以資料夾裡的紀錄檔為準。
- 瀏覽器差異: 不同瀏覽器與版本對
file://的限制不盡相同。如果某個功能在你的環境不能用,先換 Chrome 或 Edge,或改用開法 B。
想自己做一套?照這樣做
這套做法不綁定特定的 AI。關鍵在於 「生成規則-重啟對話.md」 這份文件:它把我和 AI 磨合出來的規格全部寫成文字,任何 AI 讀過之後,都能產出格式一致的題庫與工具。
你需要準備
- 一個能長文對話、最好能上傳檔案的 AI 助理(能執行程式、直接輸出檔案更方便,沒有也沒關係)。
- 三樣東西:
生成規則-重啟對話.md、info-test.html(作答工具),以及你要練習的考古題文字。 - 一個專用資料夾,結構如上一節所示。
步驟
- 開新對話,先把規則交給 AI。 上傳
生成規則-重啟對話.md和info-test.html,或把規則檔的內容直接貼上。可以先用這段話當開場:
我要做一套考古題練習工具。附上的「生成規則」是我的規格,info-test.html 是現成的作答工具。
請先讀完並用三句話複述:題庫 JSON 的格式、檔名規則、你生成題庫時要遵守的原則。
之後我會貼考古題,請依規則生成題庫 JSON。
先讓 AI 複述規格,是在確認它真的讀懂了;複述有誤就當場糾正,比事後修檔案省力。
- 貼上考古題,請它生成題庫。 一次貼一份試卷,並註明年度、科目:
以下是「○○年 ○○考試:○○科目」的題目。請依生成規則逐題分析題意、每個選項的對錯與具體原因,
生成題庫 JSON,檔名為 年度-能力-科目.json。
附圖看不到的題目請在 note 標「暫定」,法規題請先查條文,憑記憶的請標明未查證。
- 存檔。 如果你的 AI 能直接輸出檔案,下載後放進
json/。如果不能,請它把 JSON 放在程式碼區塊裡,你自己複製後存成 UTF-8 的.json。 - 產生索引(選用)。 在資料夾裡執行
python make-index.py,或打開工具後按「更新 index.json」。也可以請 AI 依規則檔第 3.1 節輸出,但 AI 容易漏列舊題庫,所以我建議用腳本或按鈕。如果你只用開法 A 的「選擇資料夾」,這一步可以先略過。 - 開始作答。 依「本地部署」一節選擇開法 A 或開法 B。
- 回頭檢查題庫。 AI 偶爾會寫出不合格式的 JSON。下面這支小腳本(存成
check-bank.py)可以快速檢查:格式對不對、題號有沒有重複、答案是否真的在選項裡。
import json, pathlib, sys
ok = True
for p in sorted(pathlib.Path(sys.argv[1] if len(sys.argv) > 1 else 'json').glob('*.json')):
if p.name == 'index.json' or p.name.endswith('.records.json'):
continue
d = json.loads(p.read_text(encoding='utf-8'))
errs = []
if d.get('type') != 'bank': errs.append('type 不是 bank')
if d.get('id') != p.stem: errs.append('id 與檔名不符')
for k in ('year', 'ability', 'subject', 'title'):
if not d.get(k): errs.append('缺少 ' + k)
nos = [q.get('no') for q in d.get('questions', [])]
if len(nos) != len(set(nos)): errs.append('題號 no 重複')
for q in d.get('questions', []):
keys = [o.get('key') for o in q.get('options', [])]
if q.get('answer') not in keys: errs.append('第 %s 題 answer 不在選項中' % q.get('no'))
for f in ('category', 'question', 'intent'):
if not q.get(f): errs.append('第 %s 題缺少 %s' % (q.get('no'), f))
print(p.name, '→', '通過' if not errs else errs)
ok = ok and not errs
sys.exit(0 if ok else 1)
換成別的考試,要注意什麼
- 能力與科目代碼: 題庫裡的
ability、subject是綜合題庫模式的分組依據。換考試時請自訂代碼(例如englistening)。代碼只能用英數字或底線,不要含「-」,因為工具是用「能力-科目」組合分組鍵,再以「-」切開。不同考試或不同級別也請使用不同的ability(像我的資安題庫用info、中級 AI 用ai、初級 AI 用aijr),這樣綜合題庫才不會混在一起。 - 名稱對照表: 工具內有一份科目名稱對照(目前只有
sm、st),遇到新代碼時畫面會直接顯示代碼本身,不影響功能。想顯示中文名稱,可以請 AI「在對照表補上這個科目」。 - 題型: 目前只支援單選題。複選、填空需要請 AI 擴充工具,同時要更新規格,兩者要同步。
常見狀況
- AI 好像忘了規則: 重新貼上規則檔,再請它複述一次。
- AI 說檔案不見了: 別怕,這是沙盒的特性。把你手上的最新版重新上傳,請它在上面繼續改。
- 每次打開都要重新選資料夾: 這是雙擊開啟(開法 A)的正常現象;想省掉就改用開法 B。
- 在手機上看起來怪怪的: 先確認不是用「雙擊開啟」造成載入問題;版面問題請把裝置與畫面狀況描述給 AI,請它在現有 HTML 上以最小修改調整。
- 想改工具的功能: 一律說「請在已上傳的 info-test.html 上以最小修改方式調整,保留元素 id 與 JSON 欄位名」,並要求它改完做語法檢查、說明沒有實測的部分。
- 想重新生成工具: 規則檔的提示詞 E 就是為了這個情況準備的。
- 規則檔過時了: 每次工具新增功能,記得請 AI 同步更新規則檔,否則下一輪對話會照舊版規格走。
還能延伸的方向
- 其他考試: 任何有考古題的證照或檢定,只要整理成題庫 JSON 就能用。
- 共享題庫: 把題庫分享給同學或同事,各自的作答紀錄互不影響。
- 公司內訓: 把內部資安規範、教育訓練題目做成員工測驗。
- 弱點分析: 紀錄裡已經有每題的分類與累計錯題次數,可以延伸做「各分類正確率」,看看哪個領域最需要加強。
- 更多題型: 複選、填空,甚至圖片題。
- 請 AI 出題: 把我的錯題備註交給 AI,依弱點生成類似題,再回灌題庫。
下載
下載位置:<請填入你的下載連結,例如 GitHub 或雲端硬碟>
內容包含:
info-test.html:作答工具(單一檔案,JS 內嵌)json/:題庫資料夾,內含各年度題庫與index.jsonmake-index.py:重建index.json的腳本生成規則-重啟對話.md:給 AI 用的生成規則與提示詞
下載後怎麼開始,請見上方「本地部署」一節;要新增題庫,請見「想自己做一套?」。
分享前的提醒
- 題庫裡的答案與分析是 AI 依知識判斷產生的,不是官方公布的標準答案,使用前請自行核對。
- 考古題的內容可能涉及著作權或來源授權。公開分享時,建議以工具和空白範例題庫為主,題庫內容請留意來源授權。
結語
這次最大的收穫不是工具本身,而是一種做法:把「重複要做的事」拆成「資料」和「工具」,讓 AI 負責產生資料、修改工具,而我只負責把需求說清楚、把結果核對過。 AI 讓我省下的是機械性的整理與改寫,而判斷題目對不對、弱點在哪裡,這部分仍然是自己的功課。
如果你也在準備同一個考試,或有其他考古題要刷,歡迎拿去用,也歡迎把改進的想法告訴我。