iT邦幫忙

2026 iThome 鐵人賽

DAY 16
0
Build on Google AI

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

Day 16【Firestore】:將學生的對話與錯題紀錄存入雲端

  • 分享至 

  • xImage
  •  

昨天我們已經順利把前端網頁部署到 Firebase Hosting 上,讓原本只能在本機執行的介面可以在網路上使用。真正可以拿來使用的 AI 教育系統,不能只是「現在問、現在答」,如果學生重新整理網頁,之前的學習內容就全部不見了,那其實很難做到真正的個人化學習。

所以今天要處理的就是 「長期記憶」。我們希望把學生過去問過的問題、AI 的引導回覆,以及學生答錯或容易搞混的觀念都保存下來。這樣之後 AI 才能根據學生過去的學習紀錄,知道他曾經在哪些地方卡住,進一步提供更適合他的教學。

因此今天會開始整合 Google Cloud Firestore,讓 Python 後端可以把學生的學習歷程寫入雲端資料庫。

【今日開發目標】

今天的主要目標,就是在現有的 AI 虛擬助教系統中導入 Firebase Admin SDK,讓後端程式可以安全地連接 Firestore。接著會設定 Service Account Key(服務帳戶金鑰),處理後端與 Firebase 之間的身分驗證,最後再撰寫資料寫入邏輯。今天會先把學生的互動資料整理成結構化格式,並將這些紀錄存進 Firestore 的 learning_logs 集合中。

這樣一來,AI 助教就不再只是「一問一答」的系統,而是開始具備保存學生學習歷程的能力,方便後續的個人化學習功能。

【Google AI 工具實作過程】

要讓我們的 Python 後端程式成功連線到 Google 雲端資料庫,主要需要完成以下幾個步驟:

步驟一:取得並設定 Firebase 服務帳戶金鑰

  1. 前往 Firebase Console,進入你的專案設定(Project Settings)。
  2. 切換到 「服務帳戶 (Service Accounts)」 分頁。
  3. 點擊 「產生新的私密金鑰 (Generate new private key)」,下載一組 JSON 格式的金鑰檔案。
  4. 將該檔案重新命名為 serviceAccountKey.json,並放置於你的專案根目錄下(切記這個檔案絕對不能上傳至 GitHub 公開儲存庫!不然帳會算在你頭上喔)。

步驟二:安裝 Firebase Admin 套件

在終端機執行指令,安裝 Python 的 Firebase 管理工具:

pip install firebase-admin

步驟三:在 Firestore 建立資料庫與驗證連線

確認專案中的 Firestore 已經在 Console 介面上啟用,接著我們就可以撰寫程式碼來測試雲端寫入是否正常運作。

【核心 Prompt / Code 展示】

以下是用於初始化 Firebase 並將學習歷程寫入 Firestore 的核心 Python 程式碼(database.py):

import os
import firebase_admin
from firebase_admin import credentials, firestore
from google.cloud.firestore import SERVER_TIMESTAMP  # 確保正確引入伺服器時間

# 1. 檢查金鑰檔案是否存在
if not os.path.exists("serviceAccountKey.json"):
    print("❌ 找不到 serviceAccountKey.json 檔案!")
    exit()

# 2. 初始化 Firebase Admin SDK
try:
    cred = credentials.Certificate("serviceAccountKey.json")
    firebase_admin.initialize_app(cred)
    print("✅ Firebase Admin 初始化成功!")
except Exception as e:
    print(f"⚠️ 初始化警告:{e}")

# 取得 Firestore 客戶端實例
db = firestore.client()

def save_learning_log(student_id: str, question: str, ai_response: str, is_mistake: bool = False):
    """
    將學生的提問、AI 助教的回覆以及錯題標記寫入 Firestore 的 learning_logs 集合
    """
    try:
        # 在 learning_logs 集合中建立新文件,ID 由 Firestore 自動生成
        doc_ref = db.collection("learning_logs").document()

        log_data = {
            "studentId": student_id,
            "questionText": question,
            "aiReply": ai_response,
            "isMistakeRecord": is_mistake,
            "timestamp": SERVER_TIMESTAMP  # 使用雲端伺服器時間
        }

        doc_ref.set(log_data)
        print(f"🎉 學習歷程已成功寫入雲端!文件 ID: {doc_ref.id}")
        return doc_ref.id

    except Exception as e:
        print(f"❌ 寫入 Firestore 失敗:{e}")
        return None

if __name__ == "__main__":
    # 本地測試寫入
    save_learning_log(
        student_id="student_001",
        question="為什麼 Python 的 list 排序會改變原本的順序?",
        ai_response="這是一個很好的觀念!請問你使用的是 sort() 還是 sorted() 呢?",
        is_mistake=True
    )

執行 python3 database.py 後

https://ithelp.ithome.com.tw/upload/images/20260925/20183764KgHizpFQET.png

此時前往 Firebase Console 的 Firestore Database 畫面,就能夠親眼看到 learning_logs 集合中多出了一筆結構化的 JSON 資料!

https://ithelp.ithome.com.tw/upload/images/20260925/20183764dINq1XWHn7.png

【未來教育反思】

在傳統的教學現場中,老師很難即時且全面地記錄每一位學生在學習過程中的「每一個提問」與「盲點錯題」。透過將對話紀錄與錯題標記以結構化 JSON 形式存入 Google Cloud Firestore,我們不僅減輕了教師手動統計學生弱點的負擔,更為未來的「適應性學習(Adaptive Learning)」奠定了完美的數據地基。系統可以根據這些雲端歷史紀錄,精準分析學生的認知盲區,進一步實現真正因材施教的未來教育願景。

【明日預告】

明天我們將迎來實作的另一大亮點:Day 17【Function Calling】讓 AI 助教學會「調用外部工具」(如計算機/搜尋),讓我們的 AI 助教不只會嘴上引導,還能實際執行精確計算與檢索。


上一篇
Day 15|【Firebase】使用 Firebase Hosting 快速將 AI 助教部署上線:讓全世界都看得到你的 AI 專案
下一篇
Day 17|【Function Calling】讓 AI 助教學會「調用外部工具」:告別計算幻覺
系列文
用 Google AI 打造「因材施教」的個人化 AI 虛擬助教 共 22 篇
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言