考完了。上一期結尾寫的是「接著要把中級科目的內容完成,再加上我臨時加報的 AIoT 認證;除此之外就回歸正軌」——這兩週基本上就是照著那張清單走完的。
節奏跟上一期完全不同。上一期 96 個 commit 幾乎全砸在同一個 repo 上,備考把其他事情都擠掉了;這兩週 commit 少了四成,但攤在四個專案上:題庫收尾、兩份新提案、知識庫的格式升級,還有個人網站。從「只有一件事」變回「有好幾件事」,本身就是備考結束的訊號。
不過真正值得寫下來的不是清單清完了,而是清的過程裡反覆出現的同一件事:我用來確認「這批做對了」的方法,決定了我能看見哪一種錯。 這兩週最真實的三個缺陷,沒有一個是被測試抓到的。
這兩週 GitHub 上的實際軌跡
- 8/15 到 8/31 共 55 個 commit,落在 9 個工作天,其中 8 天完全沒有動靜(含連續的 8/27–8/28)。
- 分佈在 4 個 repo:
ipas-aiap-cert27、chenfu.ai11、proposals10、chenfu-kb7。 - 淨變動 +60,589 / −1,076 行、299 個檔案。絕大部分是題庫資料檔。
- 高峰仍然是單日爆發:8/22(六)一天 19 個 commit,全部在題庫上。8/17 一天 8 個。
一天幾乎只屬於一個專案,顏色很少混在一起。也就是說這兩週是切換,不是並行。
iPAS 網站:從刷題工具長成四張證照的平台
一、把掛了幾個月的「已知限制」重新分類成「壞題」(8/17)
匯入 115-1 中級三科考古題時,順手解掉一個從專案初期就存在的問題:原卷裡的圖片。
senior-ml-114-2-q45 這題以「原始 PDF 選項為圖片,pdftotext 無法擷取」的形式,同時記在 CLAUDE.md、AGENTS.md 與 bank-defects.md 三個地方,被歸類為已知限制——知道了,但不打算解決。它其實是壞題:一道四個選項全空白的題目放在站上,不叫限制,叫故障。
轉折點是一個很笨的動作:把 PDF 頁面 render 成 PNG,然後真的看一眼。 那些「圖」是程式碼的截圖——Keras 程式碼、train_test_split 的四種寫法、console 輸出的 classification report。內容全是文字,只是被印成了像素。看清這件事之後,原本在比較的方案(要不要抽圖、放 public/ 還是 base64、浮水印怎麼辦)全部作廢,因為文字轉錄在每個維度上都贏。真正的圖表只有 4 張,佔 42 題裡的 4 題。
這批的規模是:150 題真題(中級三科各 90 → 140 題)、150 則詳解、42 題圖片轉錄,修好 4 題原本無法作答的壞題、3 個解析器缺陷,測試 219 → 225。
二、補上缺失資訊之後,才驗得出既有內容的錯(8/17)
senior-ml-114-2-q50 的舊詳解寫著「空格 1 應填 "r-"、空格 2 應填 "r--"」,並自己標註「因附圖缺失,依官方答案,中信心」。補上圖之後才看得到:圖例是 Training Loss 藍色實線、Validation Loss 紅色虛線,成立的是 A 與 D,不是 C 與 D。
答案字母是對的,理由整條是反的。 它在只有答案可校驗時完全隱形——從答案反推理由,答案對了所以自檢通過;但站上顯示給使用者的是詳解,不是字母。
而且它自己標了低信心,然後就留在那裡。這是上一期那條「揭露不等於修正」的另一種形態:標記在資料裡的自陳弱點,同樣不等於待辦。
三、AIoT 上架逼出了一個問題:既有的 level 到底是什麼?(8/21)
臨時加報的 AIoT 應用工程師(初級)要上站。第一個念頭是把它當成新的 level,改動最小、一行 UI 都不用動。沒有這樣做,是因為那會讓「AI 應用規劃師的初級」跟「AIoT 的初級」並排在同一個下拉選單裡,而使用者的原話是「不要混在一起」。
於是加了 cert 維度,導覽變成 home → cert → level → mode。真正的收穫不在這個決定,而在它逼出來的問題:翻出來才發現 level 一直同時扮演兩個角色——「難度階段」與「這批科目屬於誰」。只有一張證照時這兩件事重合,看不出來;加第二張才把它們拆開。
四、640 題,以及 LLM 命題可預測的失敗模式(8/21–8/22)
這批是這兩週最大的一塊:AIoT 官方練習 80 題、考科二自編 60 題(補上唯一沒有官方題源的科目)、七科新題庫 500 題(中級三科 300 + AIoT 兩科 200)。題庫總量 1,117 → 1,757 題,測試 268 → 422。之後又以加題方式替五科再平衡認知層級分布(+215 題),並替 500 題逐題補上 meta 與判斷分界。
第一版每一批都壞在同樣的地方:senior-ai-tech 的答案分布是 A:69 / B:27 / C:4 / D:0,aiot-junior-basics 是 A:86。A 佔七成的題庫,「不會就選 A」的期望值高過真的去讀。這不是內容問題,是結構性失效——而結構性失效可以用測試擋。擋下它的是 8/13 那批初級新題庫時就寫好的 practiceBank.test.ts,這次直接接住了三個新科目。
但第一次修的時候修錯方向:直接輪替 A、B、C、D,結果每四題恰好是一個 ABCD 排列,比原本的偏斜更好猜。同一支測試的區塊檢查立刻擋下。平衡不等於隨機。
提案與知識庫:回歸正軌的那條線
題庫告一段落之後,8/24 起換到擱置的線上。
proposals 這兩週開了兩個新提案家族:Auxin(農業科技)與 Nevé(手工冰品的批次品質與冷鏈系統),各自帶 proposal、SRS、architecture、primer 四份文件。Nevé 走完了四輪收斂——2026 競品地圖、Phase 1 量測方法,最後從文獻定出 TDI 的動力學形式,proposal 推到 v0.7、SRS v0.5、architecture v0.5,並留下一份收斂回顧。Nevé Primer 值得一提的是它把領域術語照因果順序排列,而不是照字母。
chenfu-kb 則是把知識庫的格式本身當成工程問題來做:OKF v0.2 升級,Rust 寫的 checker 擴充,加上新的 okf-migrate 遷移器(+809 行),wiki/ 的 frontmatter 整批遷移並宣告 okf_version,migrate 補上 raw 模式之後回填 raw/ 61 個檔案,並釐清 raw/ 的唯讀邊界。
chenfu.ai 這期做的是「可驗證的資歷」:About 頁加上 Claude Academy 徽章牆,17 張徽章全部接上公開 verify 連結(/verify/<code> 才是公開頁,/badges/<uuid> 會把訪客擋在登入牆外),並讓改過的頁面顯示更新戳記。
這兩週學到的
用某個詞描述問題時,那個詞帶著一套隱含的解法分類。 「圖片的部份有建議的方式嗎」自然被讀成資產管線問題,於是我開始比較抽圖、存放、渲染、授權。先看一眼就會發現那根本不是圖。先看,再分類,最後才比較方案。
正則能表達的是字面,不是語意性質。 為了驗證「每則詳解都逐項點名 A/B/C/D」寫了一條精心設計的正則,量到 40 則不合格——全是誤判,因為「A 正確描述」的「正」不在我那串動詞裡。我量到的是我的正則涵蓋了多少種中文句法。換成一個弱得多但健全的檢查(四個字母是否各自以獨立 token 出現),0 則不合格,而且這個結果可信。
官方檔案也會錯,而且錯得很安靜。 AIoT 練習評量的 q078 答案欄寫 Ans(C),但它自己的解析全篇在論證選項 (A)——答案與理由放在同一份檔案裡互相矛盾。只要讀一遍就會發現,只做格式驗證就不會。
驗證方法決定了你能發現的缺陷種類。 答案字母重配時要同步搬三樣東西:choiceExplanations 的鍵、meta.distractorTypes 的鍵,以及詳解散文裡「若把選項 C 改成⋯」這類指名字母的句型。我當時的檢查是「鍵是否一致」,而三樣裡只有前兩樣是鍵。散文裡的字母從來不在視野內,所以「0 個不一致」是真的,但它回答的不是「這批題目對不對」,而是「我檢查的那件事對不對」。實際壞了 8 題,其中 3 題在早先已經宣告「驗證通過」的科目裡。
憑印象寫節點名稱,寫掉了 16 題。 考科二的 B2.2 我按印象寫成「物聯網軟體與韌體開發」,一路寫完 16 題韌體題;實際節點是「雲端環境數據收集與平台設計」。topic 是字串,型別檢查沒有意見。那 16 題本身沒問題,問題是大綱裡沒有它們的位置。寫之前 grep 一次,三十秒的動作。
接下來
- 640 題全部沒有人工事實查核。 風險最高的是 AIoT 考科二的 160 題(60 自編 + 100 新題庫)——該科沒有任何官方題源。
- AIoT 的題數與配分仍未查證,簡章只寫「每科 100 分、70 分及格」,所以兩科的
mockExam還是關著。拿到官方數字前不要打開。 - 解析器健檢仍未實作。 「選項長度異常」「選項尾端出現題號」這類檢查,在 8/12、8/17 兩次回顧都提過,至今還是零。這是第三次被寫進待辦。
- 低信心詳解回頭清一遍:
bank-defects.md中其餘標「依官方答案/低信心」的條目,性質與 q50 相同,應視為未驗證而非「已知較弱」。 - Nevé 與 Auxin 的下一輪,以及知識庫這條線繼續往前。
上一期的結論是「把『我感覺不太對』變成可以量測的數字,再把數字變成可以驗證的守衛」。這一期是它的下一步,也是比較不舒服的一步:守衛只會擋下它認得的東西。 這兩週三個最真實的缺陷——自相矛盾的官方答案、散文裡指錯的選項字母、憑印象寫錯的節點名稱——沒有一個在當時的檢查範圍內,而它們全都只需要「真的讀一遍」或「grep 一次」就會現形。
自動化擋掉的是你已經想過的錯。剩下那些,還是得自己看。
Comments & Feedback