iT邦幫忙

2026 iThome 鐵人賽

DAY 19
0
Build on Google AI

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

Day 19:【真實測試】從本機到 Vercel:解決 Serverless 的 uploads/ 與 Git Commit 部署陷阱

  • 分享至 

  • xImage
  •  

在前面的旅程中,我們成功把 AI 助教的各項核心功能與前端串接起來。今天原本的計畫是滿心期待地把專案部署到 Vercel,讓我們的 AI 助教不只能在自己的 MacBook 上演獨角戲,讓學生能夠用網址隨時使用。

然而,現實總是充滿驚喜。當我按下部署按鈕的那一刻起,Vercel 立刻送上一記震撼彈:

FUNCTION_INVOCATION_FAILED
ENOENT: no such file or directory, mkdir 'uploads/'

這行錯誤訊息讓我深刻體會到軟體工程中一句名言的真諦:「在你的電腦上可以跑,不代表在雲端環境也能跑。」

【Google AI 工具實作過程】

為了讓 Vercel 順利跑起我們的 Node.js 後端與 RAG(PDF 上傳與解析)功能,我們經歷了以下兩個關鍵的架構轉折:

步驟 1:修復 Serverless 的檔案路徑禁忌

原本在 routes/ragRoutes.js 中,我們習慣使用 multer 把使用者上傳的 PDF 暫存在本機的資料夾中:

// 原本的寫法(只適用於有長期狀態的本機伺服器)
const upload = multer({ dest: 'uploads/' });

但在 Vercel 的 Serverless Function 架構中,檔案系統是唯讀且瞬息即逝的,根本沒有一個固定的長期資料夾讓我們狂建 uploads/。

  • 正確解法:改用 Serverless 專屬的暫存目錄 /tmp/:
// 修改後的寫法
const upload = multer({ dest: '/tmp/' });

步驟 2:對齊 Git 帳號與 Vercel 部署來源

改完程式碼後,我開心地 git push 上去,卻發現 Vercel 依然死性不改地報一樣的錯。檢查後才驚覺:GitHub 上的最新代碼,不等於 Vercel 正在執行的版本!

而且因為本機的 Git Email 設定與 GitHub 帳號不匹配,導致 Vercel 的自動部署被阻擋:

  • 排查指令:Bash

    git config user.name "你的使用者名稱"
    git config user.email "你的正確Email"
    git commit --allow-empty -m "trigger Vercel deployment"
    git push origin main
    
  • 當我們再次確認 Vercel 的 Deployment 指向最新的 Commit 雜湊碼後,網站終於順利亮起綠燈!

https://ithelp.ithome.com.tw/upload/images/20260928/20183764pRJUFplBOJ.png

【未來教育反思:從「能跑就好」到「生產環境思維」】

這次的踩坑經驗雖然折騰,但對開發教育型 AI 產品來說是極佳的成長。我們平時在本地端開發時,很容易忽略「基礎設施(Infrastructure)的限制」。

當我們的 AI 助教未來要正式服務廣大師生時,不能只依賴簡單的 /tmp/ 暫存,長遠來看必須導入真正的雲端儲存服務(如 Firebase Storage 或 Google Cloud Storage)。唯有經歷過這些從本機到雲端的部署考驗,我們打造的系統才真正具備了走向產品化與規模化的實力。

【明日預告】

明天我們將進入 Day 20:【Prompt 疊代】根據反饋優化 Prompt:解決 AI 太囉嗦與爆答案問題!


上一篇
Day 18:【雙模態教學分流機制】當「蘇格拉底式引導」遇上「Function Calling」:引入「理解門」讓 AI 助教學會動態切換角色
下一篇
Day 20|Prompt 疊代地獄——學生真正用過後,我才發現 AI 太愛講答案了
系列文
用 Google AI 打造「因材施教」的個人化 AI 虛擬助教 共 22 篇
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言