iT邦幫忙

2026 iThome 鐵人賽

DAY 16
0
ChatGPT & Codex

AI 時代的輕量化開發:ChatGPT 打造 LINE 多模態記帳與續訂預警 Agent系列 第 16

[Day 16] 消費數據不再只是數字:SubWise 加入月度比較分析

  • 分享至 

  • xImage
  •  

前言

昨天 Day 15 已經讓 SubWise 具備基本的消費分析能力——能計算分類支出、分類占比、找出最高支出類別,並根據占比產生第一版智慧消費提醒。但這些分析都只回答了一件事:「現在」花了多少錢。

今天想讓 SubWise 再往前一步,回答另一個問題:

「跟上個月比起來,我是花得比較多,還是比較少?」

單純知道「這個月花了 NT$930」是一個靜態的數字,但知道「這個月比上個月多花了多少」,才能真正幫助使用者建立對自己消費趨勢的感覺。因此今天的重點,是在 analysis_service.py 裡加入月度比較功能。


今日實作實錄

一、建立月度比較函式

新增 compare_monthly_expenses(),分別取得「本月第一天到今天」與「上個月第一天到最後一天」兩段區間的消費資料,各自計算總額後,得出:

  • 本月支出
  • 上月支出
  • 差額
  • 變化百分比

二、處理「上個月沒有資料」的例外情況

實作時遇到一個很實際的問題:目前 Google Sheets 裡只有本月的測試資料,上月支出是 0。如果直接計算 (本月 - 上月) / 上月,會遇到除以零的問題,直接告訴使用者「本月增加 930%」顯然是不正確的。

因此加入判斷:如果上月沒有資料,就不計算變化百分比,改為告訴使用者目前無法完整比較:

📊 SubWise 月度比較

📅 本月支出:NT$930
📅 上月支出:目前沒有資料

💡 本月已累計 NT$930,
目前尚無法與上月進行完整比較。

這是今天很重要的一個開發觀念:不是所有資料都適合直接套公式,程式必須處理「沒有資料」這種真實世界的情況。

三、整合進既有的分析流程

月度比較的結果,跟 Day 15 已經完成的分類統計、最高支出類別、智慧消費提醒整合成同一份分析報告,一起透過 analyze_expenses() 回傳給 LINE,讓使用者輸入「幫我分析這個月的消費」時,可以同時看到「現況」跟「跟上個月的變化」。


完整測試及成果展示

執行:

python -c "from app import process_ai_message; print(process_ai_message('幫我分析這個月的消費'))"

除了延續 Day 15 已經驗證過的分類統計與智慧提醒外,今天新增的月度比較部分也成功顯示:

本月:NT$930
上月:目前沒有資料

代表新加入的比較邏輯,在「有資料」與「沒有資料」兩種情境下都能正確運作,沒有出現除以零或程式崩潰的狀況。

程式完成後,我直接透過 LINE 實際測試:
「幫我分析這個月的消費」

SubWise 不只是回傳總支出,而是會進一步整理消費類別、計算占比、找出最高支出類別,並比較本月與上月的消費狀況。從 Google Sheets 的原始記帳資料,到最後在 LINE 上看到完整分析結果,這也代表今天新增的分析功能已經真正串進 SubWise 的使用流程。
https://ithelp.ithome.com.tw/upload/images/20260817/20178527D5869raKED.png


今日完成

  • 建立 compare_monthly_expenses(),計算本月與上月的消費總額、差額、變化百分比
  • 處理上月無資料時的除以零例外情況
  • 將月度比較整合進既有的 analyze_expenses() 分析流程
  • 完成本地整合測試,驗證有資料/無資料兩種情境

明日預告

目前的消費分析都是「使用者主動問,SubWise 才回答」,Day 17 將開始朝「異常偵測」前進,讓 SubWise 能主動找出某一筆消費是否明顯高於平常,並在使用者記帳的當下就給出提醒,而不用等到使用者主動詢問分析結果。


上一篇
[Day 15] 餵給 AI 的不只是帳單:用 Python 量化 SubWise 的消費結構
系列文
AI 時代的輕量化開發:ChatGPT 打造 LINE 多模態記帳與續訂預警 Agent16
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言