WikiTA · 操作說明 v2 phase 1

學生、PI、Mentor、Interviewer 的功能與操作流程。

總覽

WikiTA 是給研究實驗室「新人入訓」用的 onboarding 系統。AI 帶學生跑一輪 Probe → Deepen → Reassess 的適性學習循環,PI 在 dashboard 看 mastery heatmap 即時介入。一個 server 可以同時 host 多個 lab, 彼此資料隔離(row-level security)。

給「學生」

選一個 topic 進去,系統會問題目、判分、給提示、跟你聊。一路答到所有 concept 都 mastered 為止。

給「教師」

PI 開新 topic(用 bundle editor)、審註冊、看 heatmap、必要時手動 override 學生 mastery。Mentor 看一樣的 dashboard 但只能讀。

核心概念

名詞意思
Lab一個實驗室/租戶,用 slug(例:alpha)做 URL 前綴:/alpha/login/alpha/teacher。每個 lab 的 users/topics/mastery 完全隔離。
Topic一門「課」,例如「Git Basics」、「Paper Reading」。由 PI 用 Bundle Editor 一次到位匯入。每個 topic 可以選擇性指派到一個 Category
CategoryLab 內把 topic 分組的標籤(slug + 顯示名 + 可選 icon emoji / 顏色)。學生 SPA picker 進來會先看到分類 grid、點分類才看分類底下的 topic。一個 topic 最多歸一個 category,不指派就是「未分類」。PI 在 📁 分類 tab 管理。
ConceptTopic 底下的單一觀念。彼此有 DAG 形式的 prereq 關係(A 是 B 的先備知識)。
Question掛在某個 concept 上的題目(MC 或 free-text),有 difficulty tier 1–4(Bloom 概念)。
Mastery(student × concept) 的 0–1 分數,EWMA 平滑。狀態:unseen → struggling → developing → proficient → mastered
Stage學生在某 topic 的當前階段:probe → deepen → reassess → completed。每次 /api/topic/next 重算。
Tier ratchet同一 concept 連續答對兩次 → 升 tier(最高 4);連續錯兩次 → 降 tier(最低 1)。獨立於 mastery 分數。

學習引擎流程

每次學生答題後,orchestrator 重新判斷下一階段:

┌─────────┐ all concepts ≥ proficient ┌──────────┐ │ probe │ ─────────────────────────────────────▶ │ deepen │ └─────────┘ └──────────┘ ▲ │ │ restart concept │ ALL concepts ≥ proficient │ (PI 用 restart verb) │ AND deepen engine 沒題了 │ ▼ │ ┌──────────┐ └──── (回去補學) ◀──── reassess fail ───── │ reassess │ ─── pass ──▶ completed └──────────┘

三個引擎做什麼

角色 × 權限矩陣

功能 Student Interviewer Mentor PI
進入 topic、答題
看 wiki / 用 hint / 找 TA✕ 禁用
Escalate(求救給 mentor)✕ 禁用
分享 TA 對話 / inline Q&A✕ 禁用
看「我的進度」/ 錯題簿受限
看 mastery heatmap / 每個學生詳情✓ 唯讀
看警示佇列、回覆訊息
核可警示、解決 alert
批准/拒絕 signup、編輯/刪 shared 內容✓ PI only
建立 / 編輯 / 刪除分類、指派 topic 到分類✓ PI only
掌握度 override(soften/accept/restart/stretch)✓ PI only
PI Directive(對特定學生丟指令給 TA)✓ PI only
新增 / 編輯 topic、bundle 匯入✓ PI only
題庫審核(approve / unapprove / edit / delete)✓ PI only
看 LLM 成本明細
傳訊息給其他人

如何進入系統

角色網址(local)預設帳號(alpha lab)
Student / Interviewerhttp://localhost:5174/alpha-s / alpha-s-pwalpha-i / alpha-i-pw
PI / Mentorhttp://localhost:5173/alpha-pi / alpha-pi-pwalpha-m / alpha-m-pw

Landing page(/)會列出 server 上所有 lab;點任一張卡 → /{slug}/login 登入。 Beta lab 帳號是把 alpha 換成 beta(beta-s / beta-s-pw 等)。

Student(學生) student

學生是 WikiTA 的主受眾。一個 topic 從 picker → study → completed,全部在 http://<host>:5174 的單一 SPA 裡跑。

1. 主題挑選(📚 主題 tab)

登入後預設停在 picker,畫面採兩段式:

2. 答題與學習(study mode)

進 topic 後左邊是題目區,右邊(非 interviewer)是側邊欄。

題目區動作

顯示資訊

3. 💡 提示 與 🤖 TA

右側邊欄(interviewer 看不到):

按鈕行為限制
💡 提示 呼叫 LLM 給漸進式提示。第 1 次很模糊、第 2 次更明顯、之後可能直接點答案方向。 每題硬上限 HINT_HARD_CAP(內部常數);達上限後改回「去問 mentor」。
🤖 TA 對話 跟 AI 助教聊。四個 persona 可切換:
  • grounded — 只用 wiki,問題出 scope 就拒答
  • research — 延伸到 domain 知識,會標 confidence
  • senior — 學長口吻,會做類比、給 code
  • coach — 蘇格拉底式,會反問你
系統會依當前 concept 自動推一個合適 persona,學生可手動切。
對話會寫進 ta_logs,PI 可後台看。
📤 分享這段對話 標記一段 TA log「我覺得這對其他同學有用」→ 送 PI/mentor 審 → 通過後變成 topic 內共用的 inline 問答。

4. 🆘 求救(escalate)

「真的卡住了,要人介入」時按 escalate:

Interviewer 沒有 escalate 按鈕 — 面試情境不該求助。

5. 📖 看 wiki / supplements

6. 👤 我的進度 tab

7. 📬 訊息 tab

Interviewer(面試 / 旁聽) interviewer

跟學生用同一個 SPA 殼,但**所有「外援」都被砍掉**。場景:lab 申請者的能力檢測、 或實驗室訪客體驗系統。

跟 student 的差別

功能StudentInterviewer
看題、答題、判分✓ 一樣
看 wiki / supplements backend 強制 reject
💡 hint backend 強制 reject
🤖 TA 對話 backend 強制 reject
🆘 escalate 按鈕不顯示
分享 TA log / 發 peer Q&A
看「我的進度」部分(可看 mastery,看不到 shared logs / peer 內容)
傳訊息
Server-side first:UI 雖然會 hide 按鈕,但所有 wiki/hint/TA/escalate 端點都會在 backend 檢查 role; 就算前端被改也擋得住。

PI(實驗室負責人) pi

PI 是 lab 的最高權限者。主介面是 http://<host>:5173/teacher, 9 個 tab 涵蓋所有日常管理。另有獨立的 Bundle 編輯器/bundle-editor)用來建/改 topic。

PI 預覽模式:PI 可以直接登入學生 SPA (http://<host>:5174/login 用同一組 PI 帳密), 從學生視角親自答題、體驗 TA / hint / wiki,驗收新 topic 的學習動線。 進去後頂端會有黃色 banner 提醒「你以 PI 身份在學生介面」。答題會以 PI 自己的 user_id 寫入 attempts / mastery (不會污染學生的資料 — PI dashboard 的學生清單只列 role=student 的帳號)。

① 學生進度 tab(progress)

左:學生清單(可搜尋)。中:選中的學生詳情。右:可選 topic 的 heatmap。

② 註冊審核 tab(signup)

所有 signup request 列表(包括 Google OIDC 註冊但未配 role 的人)。

③ 內容審核 tab(content)

學生分享過來的 3 種內容,pending 狀態的全部列在這裡:

每筆可以:

📁 分類 tab(categories)

把 lab 內的 topic 分組。學生 SPA picker 進來會先看到分類 grid、點分類才看分類底下的 topic 清單。一個 topic 最多歸一個分類,不指派就是「未分類」。兩個 panel:

分類管理(上)

Topic 指派(下)

跟 Bundle Editor 的關係

④ PI 指令 tab(directive)

對某 (student, topic) 寫一段 free-text 指令。設定後:

⑤ 掌握度 override tab(verbs)

對單一 (student, concept) 套用「四個動詞」:

verb效果用途
softendifficulty_cap(1–4)。Tier ratchet 升不過 cap。不改 mastery 分數「這學生這個題目別出太難」
accept強制 status=mastered,score=0.95。「我面試過了,他懂,免測」
restart把 mastery 全部歸零回 unseen,cap / stretch 清掉。「他蒙到 mastered,重來」
stretch標 stretch flag,下次 deepen 會傾向出超出 tier 的題。「給他點 challenge」

⑥ 🆘 警示 tab(alerts)

backend scheduler(60s 一次)+ 學生 escalate 會丟 alert 進來:

每筆可:

⑦ 📝 題庫 tab(questions)

選 topic → 列出該 topic 所有題目。可篩 approved/pending。

題目來源:bundle 匯入 + LLM auto-generator(pi_generation router)。

⑧ 💰 LLM 成本 tab(cost)

⑨ 📬 訊息 tab(messages)

獨立頁:Bundle 編輯器(/bundle-editor)

PI 用來「一次到位」建立 / 更新一個 topic。網址: http://localhost:5173/bundle-editor

輸入:一個 markdown bundle 檔(包含 topic config、所有 concepts、wiki、questions 都在一份 .md 裡)。

Mentor(共同指導者) mentor

Mentor 用跟 PI 一樣的 /teacher dashboard,但是 讀多寫少。設計上 mentor 是 PI 的副手:可以看、可以聊、可以 acknowledge alert,但不負責管帳號和改 mastery。

Mentor 看得到 / 做得到

Mentor 看不到 / 做不了

技術上:teacher.html 在沒許可的 tab 還是會顯示,但點 PI-only 動作時 backend 會回 403。前端不主動 hide tab,是為了讓 mentor 知道「這些功能存在,找 PI 處理」。

共通:密碼 / 登出 / 註冊

登入

登出

改密碼

忘記密碼

申請帳號(student)

FAQ & 疑難排解

登入後 dashboard 一片空白 / 按鈕沒反應
  • 硬重整:Cmd+Shift+R(macOS)/ Ctrl+Shift+R(Win/Linux)清 cache。
  • 檢查 DevTools Console 有沒有 error。如果沒 error,看 Network tab 有沒有 401(JWT 過期)。
  • 檢查右上角是否顯示你的角色 + lab slug — 沒顯示代表 session 沒建立。
landing 頁面要怎麼進去某 lab?

landing 不再列出 server 上所有 lab(多租戶隱私考量 — 沒理由讓任意訪客枚舉到全部 slug)。 PI 會跟成員講該 lab 的 slug;在 landing 中央表單打入 slug 按「進入」就會跳到 /<slug>/login。也可以直接打 URL。

學生答題拿不到下一題 / 卡住
  • 該 topic 還沒有 ingest 任何 question — PI 用 Bundle Editor 匯入或用 pi_generation 產題。
  • 學生已 completed 該 topic(所有 concept 都 mastered)。
  • backend log:make logs SVC=backend 看有沒有錯誤。
LLM 呼叫一直噴錯
  • 檢查 .envWIKITA_LLM_* 設定。改完一定要 docker compose up -d backend(重建 container 才會重讀 env_file)。
  • 看 cost tab 是否有失敗的呼叫紀錄。
PI 看不到自己 lab 以外的學生

這是設計:所有 PI 的 query 都被 RLS 限定在自己 lab。alpha-pi 看不到 beta lab 的學生。