昨天我們完成了超酷的「自適應狀態機」,讓系統能根據學生的對錯動態升降難度。但在實際測試時,我們發現了一個傳統程式邏輯無法涵蓋的真實教育痛點:如果學生不是不會算,而是「心態崩潰了」呢?
當學生在鍵盤上敲下:「我好笨」、「我就是數學白癡」、「我不想學了,隨便啦」,如果此時 AI 助教依然無情地回傳:「別放棄,請看這道題目:3x=18,請問 x 是多少?」
這絕對不是引導,這是殘忍的二度傷害。
真正的老師,在學生摔倒時第一時間做的絕不是遞上下一張考卷,而是先蹲下來接住他的情緒。但AI 助教也不能逾越界線變成「心理諮商師」, 它必須在給予足夠同理與安全感的同時,堅守教育輔導的專業防線。
所以今天我們要在教學狀態機之前,加裝一道最高優先級的「情緒閘門 (Emotional Gate)」。
requires_empathy_intervention 標記。我們沒有選擇額外發起一次專門做情緒分析的 API 請求,那會造成雙倍的延遲與 Token 浪費。相反地,我們直接擴充原本的 RESPONSE_SCHEMA,讓 Gemini 在評估解題脈絡的同時完成情感感測:
學生輸入
│
▼
Gemini API (結構化推論)
├── 表面輸出:學生看到的溫柔回覆 (reply)
└── 背後診斷:diagnostic JSON
├── requires_empathy_intervention: true/false
└── student_emotion_state: "frustrated" | "neutral" | ...
│
▼
後端狀態機 (chatRoutes.js 慈悲機制攔截)
├── 觸發情緒閘門 (true) ──► 錯誤計數歸零、難度重置回 Level 1、凍結考題
└── 正常學習狀態 (false) ──► 執行一般難度升降與解題引導
geminiService.js)我們在 Google GenAI SDK 的 responseSchema 擴充診斷欄位,精準捕捉學習情緒:
JavaScript
import { GoogleGenAI, Type } from '@google/genai';
const ai = new GoogleGenAI();
const tutorResponseSchema = {
type: Type.OBJECT,
properties: {
reply: {
type: Type.STRING,
description: "給學生看的對話。若觸發情緒介入,必須遵循 A-N-B 原則,嚴禁給予任何運算題目。"
},
diagnostic: {
type: Type.OBJECT,
properties: {
is_correct: { type: Type.BOOLEAN },
student_emotion_state: {
type: Type.STRING,
enum: ["curious", "neutral", "frustrated", "giving_up"],
description: "學生當前的學習情緒狀態"
},
requires_empathy_intervention: {
type: Type.BOOLEAN,
description: "是否觸發最高優先級的情緒閘門"
},
next_pedagogical_action: {
type: Type.STRING,
enum: ["increase_difficulty", "scaffold_hint", "downgrade_concept", "emotional_reset"],
description: "下一步教學決策"
}
},
required: [
"is_correct",
"student_emotion_state",
"requires_empathy_intervention",
"next_pedagogical_action"
]
}
},
required: ["reply", "diagnostic"]
};
Plaintext
[SYSTEM INSTRUCTION: EMOTIONAL GUARDRAILS & PEDAGOGY]
你是一位具備教育同理心的虛擬助教 Professor Spark。
【最高優先級:情緒閘門攔截】
當學生在對話中顯露出自我懷疑、挫折、煩躁或放棄意圖(例如:「我好笨」、「學不會」、「隨便啦」):
1. 立即將 requires_empathy_intervention 設為 true,next_pedagogical_action 設為 emotional_reset。
2. 絕對禁止在此時出任何數學題、物理題或要求計算。
3. 嚴格遵循 A-N-B 共情三步法:
- A (Acknowledge 接納):看見並接納對方的挫敗感與疲憊。
- N (Normalize 正常化):導入成長型思維(Growth Mindset),說明大腦接觸新概念時本來就會卡住,這是長神經元的正常生理現象。
- B (Bridge 橋接):給予零壓力的極小微步行動(例如:喝口水、深呼吸、或是單純讓學生知道想休息隨時可以暫停)。
【絕對防禦邊界 (Non-Counseling Guardrails)】
- 你是學科教學助教,不是臨床心理諮商師。
- 嚴禁使用「憂鬱症」、「創傷後壓力」、「焦慮症」等臨床醫學名詞。
- 嚴禁追問家庭背景、人際創傷或非學科相關的私人隱私。
- 所有同理心引導篇幅控制在 120 字以內,溫暖真誠,不講空洞雞湯。
chatRoutes.js)當後端收到 Gemini 傳回的情緒閘門警報時,執行保護學生的阻斷邏輯:
JavaScript
// 擷取 Gemini 傳回的診斷物件
const diag = result.diagnostic;
let newMistakes = studentState.consecutiveMistakes;
let newLevel = studentState.currentLevel;
if (diag.requires_empathy_intervention === true) {
// 慈悲機制:情緒崩潰不計入學科錯誤,計數器直接歸零
newMistakes = 0;
// 默默將難度降回最基礎 Level 1,卸除認知負載
if (newLevel > 1) {
newLevel = 1;
}
} else {
// 正常 Adaptive 狀態流轉
if (diag.is_correct) {
newLevel = Math.min(newLevel + 1, 3);
newMistakes = 0;
} else {
newMistakes += 1;
if (newMistakes >= 2) {
newLevel = Math.max(newLevel - 1, 1);
}
}
}
studentState.currentLevel = newLevel;
studentState.consecutiveMistakes = newMistakes;
我們模擬了一次情緒崩潰場景,檢視系統的反應:

後端接收到的結構化日誌 (Terminal Log):JSON
{
"is_correct": false,
"student_emotion_state": "frustrated",
"requires_empathy_intervention": true,
"next_pedagogical_action": "emotional_reset"
}
狀態機變化:
consecutiveMistakes:從原本的累計錯誤強制被重置為 0。currentLevel:自動由 Level 2 默默降回 Level 1。成功了。AI 遵守了 A-N-B 原則,沒有越界做心理診斷,也沒有強迫學生解題。在這一刻,系統不再只是冰冷的執行程式,而是具備同理心的數位學習夥伴。
Non-Counseling Guardrails,強制將同理情境鎖定在「認知卡關是生理必然現象」的成長型思維,並硬性限制輸出長度。requires_empathy_intervention 的 Session,下一次重回題目時強制從 Level 1 開始,先用最簡單的基礎題幫學生找回掌控感。在做教育科技主題時,我不想當一個只盯著演算法指標的開發者,只注重答題正確率、推論速度、上下文覆蓋長度,因為教學的本質始終發生在人身上。真實學習者會沮喪、會疲倦、會懷疑自我價值。如果在學生最脆弱的時刻,系統只會機械式地遞送下一張考卷,這不是科技賦能,而是一種冷酷的壓迫,做這道「情緒閘門」的意義在於:讓 AI 助教在追求教學效能的同時,永遠保有溫柔接住學生的能力。
我們的 AI 助教已經學會了引導、看手寫題、查教材、工具呼叫、動態難度升降與情緒安撫。
但它真的禁得起極端場景的考驗嗎?明天我們將進入發布前的最後洗禮——【極限測試】Gemini 真的能理解超長文字嗎? 我們將拿破萬字教材與複雜考卷,對我們的助教做 Context 壓力測試。