EP-33|你知道用 Google 試算表也能做出 AI 應用嗎?用 AI 辨識影像自動產生熱量,記錄你每日飲食的智慧卡路里追蹤器
本文介紹如何運用 Google 試算表結合 Gemini API 打造一個智慧卡路里追蹤器。透過 Google App Script (GAS) 這個免費的 JavaScript 雲端開發平台,我們可以讓使用者透過 Google 表單上傳餐點照片,讓 AI 自動判斷食物內容並估算熱量、營養成分。
你是不是跟我一樣,都在追逐著最新 AI 資訊,深怕在這股 AI 浪潮下,被所有人狠狠地拋在後頭。
追逐久了,我開始有點厭倦。畢竟學習到了這麼多 AI 新知,但是真正應用的技能卻沒幾個。
各大 AI 廠商、新創的確做了許多令人讚嘆的產品,可是荷包君卻已經扁扁的,能不能不要再花錢了啊!
今天我要告訴你,其實我們不用好高騖遠,請看看陪伴我們多年的好伙伴,Google 試算表。
一直以來,我們用 Google 試算表,大部分都是當作線上 Excel 使用。
可是,
你知道 Google 試算表可以拿來做網站嗎?
你知道 Google 試算表甚至可以拿來做 AI 應用程式嗎?
我這次要製作智慧卡路里追蹤器,使用 Google 試算表及表單,讓使用者用 Google 表單上傳餐點照片,讓 AI 判斷食物內容,回傳估計的食物重量、熱量、蛋白質、碳水化合物,寫入 Google 試算表內。
GAS
GAS,全名為 Google App Script ,是 JavaScript 雲端開發平台,我們用來幫 Google Workspace 的各種應用程式編寫腳本,包含 Google 試算表。
這玩意出來 10 幾年了,大概是我開始用 Google 試算表時,它就存在了。
可是以前也不懂得寫程式,所以也不在乎,一直到了 AI 問世,我才猛然想起,我可以讓 AI 幫我在上面寫程式啊!
你知道 GAS 最大的優點是什麼嗎?
免費!
好吧,其實不完全免費,超過免費額度才要收費。
比如說觸發條件執行的時間,一天不能超過90分鐘。
可是,每次觸發其實才幾秒鐘,如果你的 App 是開發給你個人、家庭,或者團隊內部使用,其實綽綽有餘啦!想更進一步瞭解可閱讀他們官網中文資訊。
除了免費額度夠多,使用 GAS ,還有下列好處
無需架設伺服器:Google 幫你打理好所有基礎設施
整合性高:可以輕鬆串接 Google 各種服務,像是 Gmail、雲端硬碟等
開發便利:使用 JavaScript 語言,入門門檻相對較低,尤其是現在有 AI ,你根本不用自己寫程式!
不只 GAS 免費額度夠高,你使用 Google 試算表、 Google 表單也是免費的,太爽了吧?
那麼使用 Google 試算表的 GAS 功能,可以做什麼?
製作網頁表單並自動處理資料
串接外部 API 服務
建立自動化工作流程
開發簡單的網站應用
這次要介紹的 AI 應用—智慧卡路里追蹤器,就是運用 GAS ,結合 Google 試算表和大型語言模型 API,打造一個 AI 飲食紀錄工具。
取得 Gemini API
我們是要打造 AI 工具,當然就是要用 AI。
我們現在說的 AI ,其實是指各家科技大廠開發的大型語言模型,例如 OpenAI 的 ChatGPT、Google 的 Gemini 等等。
如果我們要程式碼去對接大型語言模型,就必須要取得他們的 API。
API 就像是一家餐廳的點餐服務。當你想在餐廳吃飯時,你不需要跑進廚房自己煮,而是透過服務生(API)幫你向廚房(伺服器)傳達你的需求。
舉個例子:
當你想點一份牛排時,你只要告訴服務生:「我要一份七分熟的牛排」。你不需要知道廚師怎麼煎、用什麼調味料,服務生會幫你把需求傳達給廚房,然後把料理送到你面前。
在我們這個專案中,我們會透過 Gemini 的 API 來分析食物的照片和營養資訊,就像是有一位 AI 營養師在幫我們查詢飲食的熱量和營養成分。
那用 API 要錢嗎?當然要啊,幸運的是,目前 Google 為了促銷,所以會送你 300 鎂的額度,你可以在 3 個月內使用完畢。
按照我的經驗,300 鎂要在 3 個月內用完,如果只用 API ,要用完必須很勤勞才可以。所以額度絕對夠用。
請登入 Google Cloud,新加入的使用者,就直接點擊免費開始使用,然後把相關資訊都填一填。
過程中需要填入信用卡,不過它聲稱不會收你錢,除非你特別開通,收集信用卡資訊的目的是為了防止詐騙。
填完資料後,你會在畫面上看到這個畫面,記得不要去啟用完整帳戶啊,不然之後如果你有使用,就可能收費。我們新手期間先當快樂的免費仔就好了。
接著我們換到 Google AI Studio。
登入後點擊右上方的 Get API key → Create API key,選擇你剛剛才建立好的第一個專案。
第一次建立時,我有遇到錯誤訊息,但是過了一會之後,再點一次就又可以了,所以各位可以多試幾次。
取得 API key 之後,請你複製,貼到電腦的記事本或者任何一個秘密的地方,等一下用得到。
建立 Google 試算表與表單
接著是建立 Google 試算表,請先登入 Google 雲端硬碟。
點擊左上角的新增,就可以建立 Google 試算表了。
接著你可以思考一下,你需要在試算表填入什麼欄位,按照本次範例,我填入以下欄位:
日期
餐別
食物名稱
份量
單位
總熱量(kcal)
總蛋白質(g)
總碳水化合物(g)
總脂肪(g)
我還改了分頁名稱,叫”每日記錄”。
接著點擊上方的工具 → 建立新表單。
在新建的 Google 表單中,我輸入了幾個問題
餐別:可以選擇早餐、午餐、晚餐
請簡單說明這是什麼食物(非必填):此項目地是幫助 AI 判斷。
上傳食物照片:僅允許特定檔案類型設定為圖片。
再來就是點擊試算表上方的擴充功能 → App Script ,打開新分頁,開始編輯本次專案的程式碼。
讓 Gemini 2.5 Pro 幫你寫程式
我使用 Gemini 2.5 Pro 寫程式,倒也不是因為它也是 Google 出的,主要是我最近有訂閱。
但是 Gemini 2.5 Pro 在程式上表現非常好,而且也提供免費用戶試用。
相比 ChatGPT,免費用戶使用的是 4o,效能就比不上 Gemini 2.5 Pro 。
建議免費用戶要寫程式的話,可以在 Gemini、Claude、DeepSeek 交互使用。
請記得,要讓 AI 寫程式,先搞懂自己要做什麼。
按照本次專案的目的,我希望使用 Google 表單
在寫程式的過程中,前後我與 Gemini 討論過好幾次, 如果你想跳過此過程,底下是我重新請 Gemini 生成,建議你輸入的提示詞:
請撰寫一個 Google Apps Script 函式,用於處理 Google 表單提交事件。
此函式需完成以下任務:
1. 從 Google 表單提交的事件物件 (e) 中,擷取以下資訊:
- 時間戳記(自動欄位)
- 餐別(問題標題為 "餐別")
- 食物說明(問題標題為 "請簡單說明這是什麼食物(非必填)",為選填欄位)
- 上傳食物照片的 Google Drive 檔案 URL(問題標題為 "上傳食物照片")
2. 從 Google Drive 檔案 URL 中解析出檔案 ID,並使用此 ID 從 Google Drive 中取得檔案,將其內容轉換為 Base64 編碼字串。
3. 呼叫 Gemini API 分析食物圖片。
- 使用 Gemini 1.5 flash 模型
- API 金鑰 (GEMINI_API_KEY) 需從 Apps Script 的腳本屬性 (Script Properties) 中安全讀取。如果金鑰不存在,請記錄錯誤並停止執行。
- 建立一個動態提示詞 (prompt) 給 Gemini API:
- 提示詞起始內容為:「你是一個專業的營養師,請分析這張圖片中的食物。1. 辨識出圖片中每一項獨立的食物品項。2. 針對每一項食物,請估計其『食物名稱』(使用台灣繁體中文)、『重量(克)』、『總熱量(kcal)』、『蛋白質(g)』、『碳水化合物(g)』、『脂肪(g)』。3. 請嚴格依照以下 JSON 格式輸出你的分析結果,不要包含任何 JSON 格式以外的文字或說明。」
- 如果使用者有提供「食物說明」,則將其附加到提示詞中,例如:「重要參考資訊:這張圖片中的食物,使用者說明是:『[食物說明內容]』。請務必將此說明納入考量,以提高你判斷的準確度。」
- 提供 JSON 格式範例:
```json
{
"foods": [
{
"name": "滷肉飯",
"weight_g": 350,
"calories_kcal": 580,
"protein_g": 15,
"carbs_g": 80,
"fat_g": 22
}
]
}
```
- API 請求方法為 POST,內容類型為 `application/json`。
- 處理 API 回應:檢查 HTTP 狀態碼是否為 200,並解析 JSON 回應。
- 如果 API 呼叫失敗或未回傳有效資料,需記錄錯誤。
4. 將 Gemini API 分析出的食物營養資料寫入到名稱為「每日紀錄」的 Google 試算表工作表中。
- 寫入的資料欄位順序為:日期(當前日期)、餐別、食物名稱、重量、單位(固定為「g」)、總熱量、蛋白質、碳水化合物、脂肪。
- 如果工作表不存在,需記錄錯誤並停止執行。
- 如果 API 回傳的食物資料為空,需記錄錯誤。
5. 程式碼需包含完整的錯誤處理(try-catch 區塊)和日誌記錄(Logger.log)。
6. 程式碼應為 Google Apps Script (JavaScript) 語法。
你可以依照自己的需求去修改這份提示詞,尤其是在動態提示詞這邊,但是一定要讓 Gemini 回傳指定的 JSON 格式,我們才能夠寫入 Google 試算表中。
等程式碼生成完畢後,理論上回到 Google App Script ,選擇程式碼.gs ,刪除原來的文字,貼上新的程式碼即可。
設定 Google App Script 其他設定
點擊左側的觸發條件 → 新增觸發條件,選擇上傳程式會觸發的主程式,在本次專案的例子是選擇”OnFormSubmit”,你不知道的話問你的 AI 。
活動來源選擇「試算表」。
活動類型選擇「提交表單時」。
再來點擊左側的專案設定,找到最底下的「指令碼屬性」,還記得上方提示詞寫:「API 金鑰 (GEMINI_API_KEY) 需從 Apps Script 的腳本屬性 (Script Properties) 中安全讀取。如果金鑰不存在,請記錄錯誤並停止執行。」
所以記得在這裡編輯指令碼屬性,在屬性欄位填上「GEMINI_API_KEY」,值填上之前你申請的 Gemini API key 。
測試
記得一定要測試,實際測試看看,然後回到 Google App Script 的左側執行項目這裡,點一下你剛剛執行的函式,如果正確,應該會有程式碼寫入的記錄,如果不正確也會寫。
假設不正確的話,就把錯誤訊息丟回給 AI ,讓它幫你修正。
來回幾次都是錯誤的,那就換一家 AI ,請它重新生成程式碼。
你成功了嗎?記得留言告訴我!
這個智慧卡路里追蹤器也太爛了吧
你可能也有發現,AI 回傳的資料不太準。哈哈哈!
上圖的漢堡麵包設定為 100 g ,也太武斷了吧。
不準是當然的,因為這是最小可行性產品。通常在開發新產品時,我們都會先測試目前的想法能不能成功。
所以要用最快的方式製作,粗糙一點也沒關係。
這支程式有幾個問題,
缺乏精確的食物資料庫與測量依據:
AI 在分析食物圖片時,主要是根據訓練資料來辨識食物、份量。可是食物的實際熱量和營養成分,會因為**烹調方式、食材來源、份量,**有著很大的差異。
視覺判斷的限制:
AI 對於食物的「重量(克)」或「總熱量(kcal)」等數值,根本就是亂猜的,而且這還是一張 2D 照片,很難判斷。
大型語言模型不擅長計算
AI 產生的資料,是基於它「理解」的食物概念和相關知識,然後估計符合要求的數字。
後續如果要讓程式效果更好,必須再度修改程式的邏輯。
不過不要緊,至少我們證明了拿 Google 試算表能夠做出 AI 應用,要做得多好,就依照我們的需求與能力。
下一篇電子報,如果我還有時間的話,我就繼續改一改吧!
問與答
我需要會寫程式才能製作智慧卡路里追蹤器嗎?
不需要!讓 AI 幫你寫程式。你只需要會使用 Google 試算表、表單,並且按照文章說明去取得 API,剩下的程式碼部分都可以讓 AI 幫你完成。
使用這個工具需要多少費用?
基本上幾乎是免費的!Google App Script 有很高的免費額度,個人使用綽綽有餘。而 Gemini API 目前提供新用戶 300 鎂的額度,可以使用 3 個月。
我上傳的照片會有隱私疑慮嗎?
不用擔心,因為這個工具是建立在你自己的 Google 帳號下,所有資料都存放在你自己的 Google 雲端空間中。
如果 AI 判斷的熱量不準確怎麼辦?
你可以在上傳照片時加入食物說明,這會幫助 AI 更準確地判斷食物內容。此外,這個工具主要是幫助你快速記錄,你仍然可以在試算表中手動修改數據。
本文對你有幫助嗎?或者你想提供什麼回饋,歡迎在此留言,或者到 Threads、Instagram上與我互動。
如果你想贊助我,我也是很感激的,嘻嘻。