Taiwan Exam 讓 AI 出一份原創的學測模擬考,最後交付題本和詳解兩份 PDF。它的核心分工只有一句話:模型負責出題,程式只負責排版、檢查和套版,而且程式永遠不替題目品質背書。
為什麼要這樣分工
LLM 很會寫題目,但它也很會「說自己寫得很好」。如果讓同一個模型出題、自評、再宣布完成,品質問題就會被一句「已檢查」蓋過去。所以這套工具的設計原則是:
- 能用機器判斷的(格式、版面、字型、頁面留白、答案分布、圖片解析度),交給腳本判斷;
- 需要判斷力的(題目好不好、難度對不對),要留下可檢查的證據,而且不能由腳本自動標成通過。
主要的流程腳本在說明裡寫得很直接:它「從不出題,也從不核准審查」。
流程
- 讀取知識、預檢。 只讀這一科需要的資料,每段不超過 12,000 字;檢查 PyMuPDF 版本、30 份原始模板的雜湊值、答對率校準快照、字型,以及圖片能不能下載。
- 命題藍圖。 先排出整份考卷:題號、配分、四個難度帶、答案分布、需要幾張圖、總作答時間。難度用大考中心 111–115 年的官方答對率校準,例如數學是「中偏難+難 ≥ 70 分、難 ≥ 30 分、手算 80–92 分鐘」。
- 分批命題。 每次只寫 2~4 題並存檔。格式不對會直接拒收:LaTeX、
$符號、不成對的標籤、雜湊對不上的圖、解析度太低的圖片。 - 盲審解題。 產生一份不含答案的題目包,從印出來的題目重新解一次,再估計答對率、歸入難度帶。
- 內容鎖定。 題目與答案寫進鎖定檔之後,才能開始正式組版;要改題就得重新鎖定並寫下理由。
- 套用原始模板。 題目本體是透明的一頁,用 PyMuPDF 疊印到大考中心的原始模板上,只有年份、頁碼和封面標題是動態欄位。頁首頁尾的像素在疊印前後必須完全相同,否則直接中止。
- 逐頁檢查,然後交付。 每一頁和每一題的截圖都要寫下觀察、標記通過或不通過;最終檢查通過才輸出兩份 PDF。
檢查長什麼樣子
- PDF 檢查器有 9 種硬性失敗:不是 A4 或被旋轉、缺字或替代字元、文字超出頁面、作答欄碰撞、作答欄格式錯誤、數學題印出來源備註、數學題印出製作說明、欄寬過窄、國寫字型用錯。
- 頁面留白:一般內頁最多 32% 空白(英文 42%),最後一頁 60%。組版計畫、檢查器和最終檢查用的是同一條規則,不會前後不一。
- 最終檢查:每題 4 道關(答案、難度、原創性、圖片),整份 5 道關(題型結構、難度平衡、來源依據、模板組成、答案分離),再加上各科自己的檢查。
- 預算:組版計畫最多 3 次、正式組版最多 2 次,避免模型無限重試、把時間耗光。
讓它能在一般人的 AI 裡跑
老師和學生多半不會用終端機,所以同一套規則有三種交付方式:可以直接上傳到 Claude 或 ChatGPT 的 Skill ZIP(Claude 的上傳上限是 200 個檔案,所以要打包成資源包)、給 Gemini 和專案用的知識檔,以及給 Codex、Claude Code 的本機版。完整考卷常常要兩三輪對話才做完,所以每一步都會存檔,使用者回一句「繼續」就能接著做。
誠實的限制
- 機器檢查不等於好題目。 所有自動檢查都只能擋掉「明顯錯」的東西;題目是否有教學價值,仍然需要人看。
- 模型差異很大。 目前 4 種模型 × 7 科、共 28 份的實測只完成 14 份,其餘仍在測。
- 整個專案有 112 支腳本、679 項測試,但測試驗證的是工具本身,不是模型出的每一題。
原始碼與安裝方式:github.com/niansia/taiwan-exam。也可以看 80 秒的前導片。