iT邦幫忙

2026 iThome 鐵人賽

DAY 22
0
ChatGPT & Codex

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

[Day 22] 一句話問 AI,我的錢花去哪了?SubWise 查帳能力解鎖

  • 分享至 

  • xImage
  •  

前言

昨天完成了消費修改功能之後,還有一個小尾巴——刪除功能的意圖判斷雖然已經跑通,但主程式還沒有真正接上。原本以為今天可以很快把它補完收工,沒想到實際做下來,反而多了一個很重要的體會:

「能修改、能刪除」是一回事,但真正好用的記帳工具,還必須讓使用者能快速找回自己的消費紀錄。

所以今天除了完成昨天暫留下來的「刪除消費」功能,也把原本已經存在的消費查詢能力重新整理,讓 SubWise 開始從「可以記帳」往「可以幫我整理帳目」前進。


今日實作實錄

一、把昨天留下來的刪除功能完成

昨天已經完成刪除功能的大部分程式邏輯,Gemini 也能正確辨識「把 2026-07-31 那筆 120 元刪掉」這類指令,回傳:

{"type": "expense_delete", "date": "2026-07-31", "keyword": None, "old_amount": 120}

但一開始 LINE Bot 並沒有真的執行刪除。檢查 app.py 後發現,問題不是 Gemini,而是主程式還沒有完整接上 expense_delete 的處理流程。補上:

elif data_type == "delete_expense":

讓它交給 delete_expense(data),再透過 Google Sheets 端的刪除函式,實際移除對應的資料列。

二、刪除功能的核心:不能只相信 Gemini

這次也特別處理了一個很重要的安全問題。假設 Google Sheets 裡剛好有兩筆「2026-08-21 / 100 元」(一筆 Food、一筆 Transport),SubWise 不能隨便挑一筆刪掉。因此加入了三層判斷:

  • 找不到:「找不到符合條件的消費資料,請提供更明確的日期或金額。」
    https://ithelp.ithome.com.tw/upload/images/20260823/201785273Ud4L8fPxb.png

  • 找到多筆:「找到多筆符合的消費資料,為避免誤刪,請提供更明確的日期或金額。」
    https://ithelp.ithome.com.tw/upload/images/20260823/20178527lTgQIg6waR.png

  • 只有一筆:才真正執行刪除
    https://ithelp.ithome.com.tw/upload/images/20260823/20178527VzHKMqRSsl.png

這讓「刪除」不只是功能有做出來,而是多了一層避免誤刪的防呆機制。

三、強化消費查詢功能

刪除完成後,開始重新思考使用者真正會怎麼使用記帳 Bot。如果每天只是說「午餐 120 元」讓資料丟進 Google Sheets,那 SubWise 比較像是一個「記帳輸入工具」;但使用者更常遇到的問題其實是「我最近花了什麼?」「我這個月到底花多少?」這些都屬於「查帳」需求,因此決定把原本的查詢功能再強化。

1. 消費日期排序 — 新增 sort_expenses_by_date(),把消費按照日期從新到舊排序,讓使用者看到的第一筆永遠是最近的消費。

2. 加入「最高單筆消費」 — 新增 find_highest_expense(records),從查詢結果裡找出最高的一筆消費,讓 SubWise 能回答「這段期間裡哪一筆花最多」。

3. 讓查詢結果更像「摘要」,而不是資料表 — 今天最重要的改變不是新增某一個函式,而是重新設計了 LINE 的回覆方式。以前只是把消費資料列出來,現在改成一次整理出查詢期間、總支出、消費筆數、最高單筆消費、最近消費五項資訊:

💰 SubWise 消費查詢

📅 查詢期間:week
💵 總支出:NT$570
🧾 消費筆數:4 筆

🔥 最高單筆消費
📅 日期:2026-08-21
💵 金額:NT$300
📂 分類:Shopping
📝 備註:生活用品

📋 最近消費:

2026-08-21|Shopping|NT$300|生活用品
2026-08-20|Food|NT$120|午餐
2026-08-19|Transport|NT$50|捷運
2026-08-18|Food|NT$100|早餐

這已經不只是「查資料」,而是開始替使用者做一層簡單的資訊整理。


LINE 實機測試

測試一:查詢最近消費
輸入「我最近有哪些消費?」,SubWise 成功回覆本週總支出 NT$2439、10 筆消費,並標出最高單筆消費(NT$1089,Entertainment),同時列出最近 10 筆消費明細。代表 LINE → Gemini → 判斷 query → query_service → Google Sheets → 整理資料 → LINE 這條流程已經成功串起來。
https://ithelp.ithome.com.tw/upload/images/20260823/20178527SNpUi4dnEH.png

測試二:查詢本月消費
輸入「我這個月花了多少錢」,SubWise 成功判斷 period = month,回覆本月總支出 NT$3459、16 筆消費,並列出本月消費明細。代表今天新增的查詢邏輯,不只是 Python 裡測試成功,而是已經真正進入 LINE Bot。
https://ithelp.ithome.com.tw/upload/images/20260823/201785279IBPViXuI1.png


今天的體會:程式「有寫」跟功能「真的能用」是兩回事

刪除功能就是一個很好的例子。Gemini 明明已經可以正確理解 expense_delete,Python 測試也能成功刪除,但如果 app.py 沒有接上對應的處理分支,使用者在 LINE 上操作時,功能還是不存在。

查詢功能也不是單純新增一個 print() 就結束,真正要讓使用者覺得好用,還需要思考資料應該怎麼排序、要不要顯示總額與筆數、哪一筆最值得提醒、LINE 訊息怎麼排版才不會太亂——這些都不是「寫一個函式」就能解決的問題,也讓我更理解這次鐵人賽真正想練習的:不是把程式碼寫出來,而是透過 AI 協作,一步一步把產品做得更完整。


今日完成

  • 完成 expense_delete 意圖串接(app.py 補上 delete_expense 分支)
  • 加入刪除防呆:找不到資料、找到多筆時都不執行刪除,避免誤刪
  • 新增 sort_expenses_by_date(),消費依日期新到舊排序
  • 新增 find_highest_expense(),找出查詢期間內最高單筆消費
  • 重新設計查詢回覆格式,整合期間/總支出/筆數/最高單筆/最近消費
  • 完成 Python 單元測試與 LINE 實機測試(最近消費、本月消費)

目前 SubWise 已經具備:

能力 說明
📝 記帳 透過自然語言建立消費紀錄
✏️ 修改 修改分類/金額/項目/備註,含錯誤分類防呆
🗑️ 刪除 依日期與金額定位刪除,含找不到/多筆防呆
🔎 查閱 自然語言詢問「最近花了什麼」「這個月花多少」
📊 查閱摘要 自動整理總支出、筆數、最高單筆、最近消費

明日預告

目前 SubWise 已經補齊了消費資料的「新增、修改、刪除、查詢」四項基本能力,接下來 Day 23 可以開始把重心轉往訂閱管理這一塊,讓使用者一樣能用自然語言查詢、修改、甚至刪除訂閱資料,讓 SubWise 對「消費」與「訂閱」兩種資料的管理能力保持一致。我們明天見!


上一篇
[Day 21] 別再手動改帳!讓 SubWise 用 AI 自動找到並修改錯誤紀錄
下一篇
[Day 23] 一句話就能問帳:打造 SubWise 的自然語言財務搜尋引擎
系列文
AI 時代的輕量化開發:ChatGPT 打造 LINE 多模態記帳與續訂預警 Agent24
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言