iT邦幫忙

2026 iThome 鐵人賽

DAY 19
0
ChatGPT & Codex

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

[Day 19] 讓 LINE Bot 具備「操作感」:打造 AI Agent 功能選單與 Quick Reply

  • 分享至 

  • xImage
  •  

前言

前幾天完成消費分析功能後,SubWise 已經可以透過 Gemini 判斷使用者的需求,再交給 analysis_service 從 Google Sheets 取得資料並分析。但實際使用時,發現一個問題:

功能雖然很多,但使用者還是得自己記住指令。

例如想分析消費,必須自己輸入「幫我分析這個月的消費」。如果未來功能越來越多,使用者很容易不知道「到底要輸入什麼」。因此 Day 19 不再增加新的分析公式,而是把重點放在:讓 SubWise 從「能回答」進一步變成「可以操作」。


今日實作實錄

一、建立主選單,讓功能架構提前成形

目前 SubWise 已經逐漸具備四個主要功能:💰 記帳、📊 消費分析、📷 發票辨識、🔔 訂閱管理。因此先建立一個比較接近正式產品的主選單:

🤖 SubWise 智慧記帳管家

請選擇你想使用的功能:

💰 記帳
📊 消費分析
📷 發票辨識
🔔 訂閱管理

你也可以直接告訴我想做什麼。

這裡有一個重要的設計:主選單不代表所有功能都已經完成。 發票辨識與訂閱管理目前仍然可以先作為入口,讓使用者知道未來會有哪些能力,也讓整個產品架構提前成形。

二、把主選單獨立成 menu_service

為了避免所有 UI 文字都塞在 app.py,新增 menu_service.py 負責提供主選單內容,app.py 只需要 from menu_service import get_main_menu 即可取用。這也是這次開發過程中一個很重要的體會:功能開始變多後,不只是「能不能跑」重要,程式的責任分離也開始變重要。

三、建立功能入口處理器,支援模糊指令

app.py 加入 process_feature_command(text),讓使用者不需要輸入完全一致的文字也能觸發功能——例如「記帳」「帳目」「新增記帳」都能進入記帳功能,「分析」「消費分析」「支出分析」都能進入分析功能,發票辨識與訂閱管理也各自支援多種同義詞。

四、消費分析改成先選期間,而不是直接執行

這是 Day 19 最主要的新功能。原本使用者輸入「消費分析」後會直接進入某個分析流程,現在改成先讓使用者選期間:

📊 SubWise 消費分析

請選擇你想分析的期間:

📅 今天
📆 本週
🗓️ 本月

你也可以直接輸入:「今天」「本週」「本月」

使用者選擇「消費分析」後,SubWise 會提供「今天/本週/本月」三種分析期間,透過 LINE Quick Reply 降低輸入成本,也讓互動流程更加接近真正的聊天式應用:
https://ithelp.ithome.com.tw/upload/images/20260820/201785274BNfSEvEmY.png

五、加入 LINE Quick Reply

先確認目前使用的 LINE SDK 是否支援 QuickReplyQuickReplyItemMessageAction,測試後確認可以使用,接著建立 create_analysis_quick_reply(),讓 LINE 產生三個快速選項按鈕(📅 今天 / 📆 本週 / 🗓️ 本月)。

這裡有一個很重要的設計:每個按鈕按下後其實只是送出對應的文字(例如「今天」),因此使用者按下按鈕後,仍然會進入原本既有的訊息處理流程:

Quick Reply → 送出文字 → 原本的 process_command() → 既有分析流程

也就是說:UI 是新增的,但核心商業邏輯完全重複利用,沒有重新實作消費分析。


測試與部署

先在 Python 層測試 python -m py_compile app.py 確認沒有語法錯誤,並確認 get_quick_reply("消費分析") 能正確回傳三個 QuickReplyItem 物件,接著才部署到 Render 進行實機測試。

實際用手機 LINE 輸入「消費分析」,成功顯示三個期間選項,點擊「🗓️ 本月」後成功得到完整消費分析結果。

補充 Demo 消費資料:一開始測試時發現「今天」與「本週」都是 NT$0,雖然程式沒有錯,但拿來展示容易讓人誤以為功能沒作用。因此重新整理 Google Sheets 測試資料,涵蓋 Food、Transport、Shopping、Entertainment 四種類別、共 14 筆消費,並確保今天、本週、本月、上個月都有資料,讓三種分析期間都能真正展示出結果。


實機成果

今天:總支出 NT$350,3 筆消費,最高支出類別 Food(85.7%),最高單筆消費 NT$180(Food|午餐)。
https://ithelp.ithome.com.tw/upload/images/20260820/20178527zLx6QYYiUS.png

當天已有消費紀錄時,SubWise 可以直接整理今日總支出、主要消費類別與最高單筆消費,讓記帳資料開始轉化成可閱讀的資訊。

本週:總支出 NT$1,870,10 筆消費,最高支出類別 Food(41.2%),最高單筆消費 NT$450(Shopping|生活用品),最高單日消費出現在 2026-08-15。
https://ithelp.ithome.com.tw/upload/images/20260820/20178527zQZyahfa0g.png

除了月度分析,SubWise 也能即時切換至本週資料,讓相同的分析服務根據不同期間重新計算消費統計。

本月:總支出 NT$2,240,14 筆消費,最高支出類別 Food(46.4%)。更重要的是,這次「本月 vs 上月」的比較也成功跑通。
https://ithelp.ithome.com.tw/upload/images/20260820/201785271MVhND9vxJ.png

使用者只需要選擇「本月」,SubWise 就會自動讀取 Google Sheets 消費資料,計算總支出、消費筆數、分類占比、最高單筆與最高單日消費等資訊。

代表 Day 18 完成的分析能力,成功被 Day 19 的互動入口重新利用,而不是各自獨立運作。


今日完成

  • 建立主選單,涵蓋記帳 / 消費分析 / 發票辨識 / 訂閱管理四大功能入口
  • 新增 menu_service.py,分離 UI 文字與商業邏輯
  • 建立 process_feature_command(),支援模糊指令匹配
  • 消費分析改成先選期間,加入 LINE Quick Reply 快速選項
  • 補充完整 Demo 測試資料(14 筆,涵蓋四種類別與跨月資料)
  • 完成本機測試與 LINE 實機測試(今天/本週/本月三種期間全部驗證)

完成後提交 Git,Commit 5270674,成功推送到 GitHub,確認 working tree clean。

目前 SubWise 的整體流程:

LINE 使用者 → LINE Webhook → handle_message()
├── 固定指令 → process_command()(主選單 / 功能入口 / Quick Reply)
└── AI 訊息 → process_ai_message() → Gemini → 記帳/查詢/分析 → Sheets / analysis_service


明日預告

明天 Day 20 我希望把主選單中的「發票辨識」從目前的「功能入口」真正變成可以使用的多模態 AI 功能,也就是讓使用者不需要手動輸入日期、分類、金額、品項,而是直接拍一張發票或收據,讓 AI 幫忙辨識並完成記帳。這將會是 SubWise 從「文字型智慧記帳」走向「多模態智慧生活管家」的重要一步。


上一篇
[Day 18] 消費資料也能做 Data Aggregation?SubWise 實作每日支出分析
下一篇
[Day 20] 從「你說我記」到「你拍我記」:打造能看懂發票的 LINE 記帳 Agent
系列文
AI 時代的輕量化開發:ChatGPT 打造 LINE 多模態記帳與續訂預警 Agent20
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言