昨天我們已經順利把前端網頁部署到 Firebase Hosting 上,讓原本只能在本機執行的介面可以在網路上使用。真正可以拿來使用的 AI 教育系統,不能只是「現在問、現在答」,如果學生重新整理網頁,之前的學習內容就全部不見了,那其實很難做到真正的個人化學習。
所以今天要處理的就是 「長期記憶」。我們希望把學生過去問過的問題、AI 的引導回覆,以及學生答錯或容易搞混的觀念都保存下來。這樣之後 AI 才能根據學生過去的學習紀錄,知道他曾經在哪些地方卡住,進一步提供更適合他的教學。
因此今天會開始整合 Google Cloud Firestore,讓 Python 後端可以把學生的學習歷程寫入雲端資料庫。
今天的主要目標,就是在現有的 AI 虛擬助教系統中導入 Firebase Admin SDK,讓後端程式可以安全地連接 Firestore。接著會設定 Service Account Key(服務帳戶金鑰),處理後端與 Firebase 之間的身分驗證,最後再撰寫資料寫入邏輯。今天會先把學生的互動資料整理成結構化格式,並將這些紀錄存進 Firestore 的 learning_logs 集合中。
這樣一來,AI 助教就不再只是「一問一答」的系統,而是開始具備保存學生學習歷程的能力,方便後續的個人化學習功能。
要讓我們的 Python 後端程式成功連線到 Google 雲端資料庫,主要需要完成以下幾個步驟:
serviceAccountKey.json,並放置於你的專案根目錄下(切記這個檔案絕對不能上傳至 GitHub 公開儲存庫!不然帳會算在你頭上喔)。在終端機執行指令,安裝 Python 的 Firebase 管理工具:
pip install firebase-admin
確認專案中的 Firestore 已經在 Console 介面上啟用,接著我們就可以撰寫程式碼來測試雲端寫入是否正常運作。
以下是用於初始化 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 後

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

在傳統的教學現場中,老師很難即時且全面地記錄每一位學生在學習過程中的「每一個提問」與「盲點錯題」。透過將對話紀錄與錯題標記以結構化 JSON 形式存入 Google Cloud Firestore,我們不僅減輕了教師手動統計學生弱點的負擔,更為未來的「適應性學習(Adaptive Learning)」奠定了完美的數據地基。系統可以根據這些雲端歷史紀錄,精準分析學生的認知盲區,進一步實現真正因材施教的未來教育願景。
明天我們將迎來實作的另一大亮點:Day 17【Function Calling】讓 AI 助教學會「調用外部工具」(如計算機/搜尋),讓我們的 AI 助教不只會嘴上引導,還能實際執行精確計算與檢索。