iT邦幫忙

2026 iThome 鐵人賽

DAY 25
0
Build on Google AI

用 Google AI 打造「因材施教」的個人化 AI 虛擬助教系列 第 25 篇

Day 25|【接住情緒才配談教學】:實作 AI 助教的情緒閘門與諮商防禦邊界

  • 分享至 

  • xImage
  •  

昨天我們完成了超酷的「自適應狀態機」,讓系統能根據學生的對錯動態升降難度。但在實際測試時,我們發現了一個傳統程式邏輯無法涵蓋的真實教育痛點:如果學生不是不會算,而是「心態崩潰了」呢?

當學生在鍵盤上敲下:「我好笨」、「我就是數學白癡」、「我不想學了,隨便啦」,如果此時 AI 助教依然無情地回傳:「別放棄,請看這道題目:3x=18,請問 x 是多少?」

這絕對不是引導,這是殘忍的二度傷害。

真正的老師,在學生摔倒時第一時間做的絕不是遞上下一張考卷,而是先蹲下來接住他的情緒。但AI 助教也不能逾越界線變成「心理諮商師」, 它必須在給予足夠同理與安全感的同時,堅守教育輔導的專業防線。

所以今天我們要在教學狀態機之前,加裝一道最高優先級的「情緒閘門 (Emotional Gate)」。

【今日開發目標】

  1. 擴充結構化診斷 (Structured Outputs):在單次推論中零延遲辨識學生的情緒狀態,輸出 requires_empathy_intervention 標記。
  2. 植入 A-N-B 共情三步法與防禦守則:嚴格規範 AI 助教在情緒觸發時的接納、正常化與微步橋接邏輯,並鎖定非諮商的專業邊界。
  3. 實作後端「慈悲攔截機制」:在 Express 後端狀態機中凍結錯誤計數器並重置難度,避免挫折疊加引發放棄迴圈。

【Google AI 工具實作過程】

系統決策流:在教學邏輯前加裝前置攔截

我們沒有選擇額外發起一次專門做情緒分析的 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) ──► 執行一般難度升降與解題引導

【核心 Code / Prompt 展示】

1. 擴充結構化 JSON Schema (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"]
};

2. System Instruction 注入:A-N-B 共情三步法與防禦邊界

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 字以內,溫暖真誠,不講空洞雞湯。

3. 後端狀態機的慈悲機制 (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;

【實戰測試:當系統接住下墜的學生】

我們模擬了一次情緒崩潰場景,檢視系統的反應:

https://ithelp.ithome.com.tw/upload/images/20261004/20183764YYV2kmXYJb.png

  • 後端接收到的結構化日誌 (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 原則,沒有越界做心理診斷,也沒有強迫學生解題。在這一刻,系統不再只是冰冷的執行程式,而是具備同理心的數位學習夥伴。

【遇到的問題與 Debug 實錄】

1. AI 容易過度沈浸於「心理治療」,偏離教育初衷

  • 現象:在初期測試時,一旦觸發同理心指令,模型會開始長篇大論追問學生:「你是不是平常壓力很大?可以跟老師說說看家庭或學校發生了什麼事嗎?」這已經嚴重越界進入諮商禁區。
  • 原因分析:未對同理範疇加上負向邊界約束(Negative Constraints),導致 LLM 抓取過多網路心理諮商的對話套路。
  • 解決方式:在 System Instruction 中嚴格定義 Non-Counseling Guardrails,強制將同理情境鎖定在「認知卡關是生理必然現象」的成長型思維,並硬性限制輸出長度。

2. 狀態機在學生平復情緒後「暴衝出難題」

  • 現象:學生被安撫後打了一句「好,我心情好一點了」,舊版狀態機因為前一輪判定非錯誤,竟直接把難度調高。
  • 解決方式:在慈悲機制中寫入強制防護:凡是走過 requires_empathy_intervention 的 Session,下一次重回題目時強制從 Level 1 開始,先用最簡單的基礎題幫學生找回掌控感。

【未來教育反思】

在做教育科技主題時,我不想當一個只盯著演算法指標的開發者,只注重答題正確率、推論速度、上下文覆蓋長度,因為教學的本質始終發生在人身上。真實學習者會沮喪、會疲倦、會懷疑自我價值。如果在學生最脆弱的時刻,系統只會機械式地遞送下一張考卷,這不是科技賦能,而是一種冷酷的壓迫,做這道「情緒閘門」的意義在於:讓 AI 助教在追求教學效能的同時,永遠保有溫柔接住學生的能力。

【明日預告】

我們的 AI 助教已經學會了引導、看手寫題、查教材、工具呼叫、動態難度升降與情緒安撫。

但它真的禁得起極端場景的考驗嗎?明天我們將進入發布前的最後洗禮——【極限測試】Gemini 真的能理解超長文字嗎? 我們將拿破萬字教材與複雜考卷,對我們的助教做 Context 壓力測試。


上一篇
Day 24|【Adaptive Learning】實作 AI 自適應學習狀態機,真正落實因材施教
下一篇
Day 26【極限測試】Gemini 真的能理解超長文字嗎?破萬字電子學教材的 Context 壓力測試
系列文
用 Google AI 打造「因材施教」的個人化 AI 虛擬助教 共 27 篇
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言