作為這份英語家教 Skill 中唯一不是「先考試、後檢討」的主題,字詞講堂肩負幾項功能。
單字主題共有四種分類:
文法主題則有兩種:
字詞講堂 Skill 會基於以下架構進行輸出:
多數情況依照之前 grilling 過的共識,就能良好地生成出來。
但在這段期間,依然出現了一些錯誤。
在正常情況下,我們有兩種生成講堂內容的方式:
在測試「錯題本生成」後,首先出錯的點是:「AI 誤以為只能依照錯題本中已經存在的單字作為介紹項。」
因此出現了整個主題只介紹三個單字的情況。
當然,這個問題只需要修改「取材限定」的描述即可。但就「限定」這件事情而言,還存在另一個問題。

可以看到,當時的主題採用的是相似字根的 -tion(轉名詞)作為介紹主題。
稍微對英語有點了解的人就知道,-tion 這個字尾接近於「有多少個單字就有多少個變化」的程度。
因此,為了防止 AI 以這種過度發散的字根作為主題,我讓它修改了分群依據中對於「字根」的定義。
分群依據:只做「共同字根/字尾」這種最明確的關聯(其他關聯方式之後有需要再擴充,第一版不做)。
同時加入以下限制:
排除純文法性、不帶具體語意的通用字尾(
-tion/-sion/-ing/-ed/-ly/-ness/-ment/-able/-ible/-er/-or/複數-s這類——這種字尾套用在任何字根上都成立,把字根彼此無關的字湊在一起沒有教學意義),只用「本身帶著具體語意的字根/字首/字尾」(例如trans-、auto-、-phobia)或「同一具體字根的不同詞形」(例如attract/attractive/attraction)當分群依據。
然而,這樣做又顯得有些矯枉過正。
第二次測試中,AI 以 attract 作為主題,結果跑出來的內容卻幾乎完全侷限於 attract 的不同詞形。
這顯然又限制得太死,因此,在第三次修改中,我明確定義了字根的封閉性問題,加入了以下規則:
但若這個字根封閉,優先退一步找更小的拉丁/希臘字根片段,例如
-tract-,當分群依據。
同時加入第二種分群依據。
第二種依據「共同語意主題」:vault 裡若有一群字明顯來自同一次出題批次、圍繞同一個具體情境/主題(依
history裡的sentence欄位判斷,不是看拼寫),也算有效群聚,對應「主題相關常用字」內容類型。
到這裡為止,以上都只是一些日常的小修改。
但這些細節修改的過程中,我突然意識到:
倘若連這種定義都有可能出現發散,那麼這份家教 Skill 的另一個核心——錯題本的定義,又會如何?
眾大題都仰賴錯題本提供使用者的錯誤單字及判斷標籤
再根據這些資訊給予適當題目,讓使用者能夠充分複習錯字。
然而,現有的標籤及定義貌似存在一個問題:
在太過發散的同時,又太過紊亂。
單純用文字描述可能很難理解,因此,我決定先重新整理現有的單字庫架構。
全部資料存在:
vault.json
~/.claude/gsat-tutor-data/vault.json
目前有兩種 Schema 並存。
包含:
這類資料的 key 是單字本身。
例如:
{
"abandon": {
"word": "abandon",
"pos": "v.",
"level": 4,
"tags": ["一字多義誤判"],
"wrong_count": 2,
"familiarity_score": -1,
"next_review": "2026-08-10",
"mastered": false,
"section": "vocab",
"history": [
{
"date": "...",
"question_type": "single",
"sentence": "...",
"chosen": "B",
"correct": "A",
"explanation": "..."
}
]
}
}
包含:
這類題目的錯誤通常不是單一單字,而是:
因此改用「摘要/詳情分層」Schema。
key 是文法結構描述,例如「主詞動詞一致性」。
{
"key": "主詞動詞一致性",
"section": "essay",
"summary": "主詞為單數時,動詞誤用複數形式",
"wrong_count": 3,
"next_review": "2026-08-14",
"mastered": false,
"history": [
{
"date": "...",
"task": "essay",
"submission": "...",
"full_feedback": "...",
"attempt_number": 1
}
]
}
其中:
summary:錯題本列表顯示用的一行精簡摘要history:完整的原始作答/批改內容這樣可以避免錯題本列表被大段文字塞滿。
主選單中的選項 10為錯題本。
目前的顯示邏輯是:
依 next_review 由近到遠,列出所有尚未 mastered 的項目。
每筆顯示:
next_review 日期wrong_count)section 欄位,用來標示原本是哪個大題答錯)當使用者說「出複習卷」時:
不管這個字原本是在:詞彙題、文意選填、綜合測驗、其他大題中答錯,整份待複習清單都統一交給 gsat-vocab-tutor。
並使用詞彙題格式即一句話+4 選項逐一出題。
因為複習的目的是:
測「這個字本身記不記得」,而不是重現原大題的出題機制。
因此:
答完之後,section 欄位維持原值不變,只是被複習模式抓出來考一次。
原本有兩個職責不同的欄位:
wrong_count
familiarity_score
wrong_count
純粹累計答錯次數。
用途:
next_review 的間隔遞增邏輯familiarity_score
這是今天字詞講堂上線後新增的欄位,獨立追蹤使用者對單字的熟悉程度。
規則:
0
+1
+3
-1
涵蓋的情境包括:
目前用途只有兩個:
字詞講堂上線前寫入的舊資料沒有 familiarity_score 欄位。
因此讀取時:
視為預設值
0。
原本的弱點標籤會依大題性質不同而不同,並不是統一的一套系統。
詞彙題/文意選填/綜合測驗詞彙類空格,包含:
篇章結構改用篇章邏輯關係類型:
混合題型/翻譯/作文直接使用「文法結構/用法描述」作為 key 本身,不另外貼標籤。
追蹤欄位的wrong_count跟familiarity_score本身功能重疊,只是一個會隨使用者行為動態調整權重而另一個不會,有鑑於諸大題的首要目標都是優先練習使用這最不熟的那一個,所以第一步就是將功能整合進familiarity_score中。
其次我將錯題本的紀錄改為主要兩類:單字與文法。
單字主要從各大題考單字用法的地方紀錄(如詞彙題、綜合/閱讀等長篇文章大題考單字的題目,以及作文/翻譯的誤用,拼字錯誤等)。
文法由於有限因此純紀錄各大題答錯次數(當翻譯/作文出現誤用或沒能使用翻譯題目需求的文法時同樣紀錄)。
這項調整排除了非選及內容理解的錯題記錄,但本身最需要錯題的字詞講堂功能並不配備講解文章理解及寫作架構等內容,所以移除並無影響。最終規整如下圖。

弱點標籤同樣需要重製,弱點標籤同樣改為單字與文法分類
單字類採:
字義陌生(如當在語意題錯誤時)
形近字混淆(如當非選題錯誤填到相似錯字時,二者皆列入該標籤)
一字多義誤判(如當該單字熟悉度原先屬於正但在不同語意考題中填錯,推測為一字多義誤判)。
相比原先設計這次給了詳細的標籤判斷理由,否則舊綱架所給出的標籤很大程度都是字義陌生而猜不出使用者真正不懂在哪,當然新框架也存在漏洞,後續會在更細緻地進行調整。
文法類與追蹤欄位較相似,將各類型優先排出,當出錯時則幫該類型錯誤次數+1。如下:
"grammar": { "時態": {"familiarity_score": 0, "error_count": 0},
"語態": {"familiarity_score": 0, "error_count": 0},
"假設語氣": {"familiarity_score": 0, "error_count": 0},
"子句": {"familiarity_score": 0, "error_count": 0},
"分詞構句": {"familiarity_score": 0, "error_count": 0},
"不定詞與動名詞": {"familiarity_score": 0, "error_count": 0},
"倒裝與強調句": {"familiarity_score": 0, "error_count": 0},
"比較與對等結構": {"familiarity_score": 0, "error_count": 0},
"主詞動詞一致性": {"familiarity_score": 0, "error_count": 0},
"情態助動詞": {"familiarity_score": 0, "error_count": 0},
"冠詞與數的一致": {"familiarity_score": 0, "error_count": 0},
"介系詞用法": {"familiarity_score": 0, "error_count": 0},
"標點與大小寫": {"familiarity_score": 0, "error_count": 0},
"轉承語與篇章銜接": {"familiarity_score": 0, "error_count": 0}
}
當然詳細不僅限於這些,這次調整牽扯到9個大題10個skill的底層邏輯,光跑就跑了29分鐘,若調整順利,那麼這應該就是本體的最後一個設計了。