iT邦幫忙

2026 iThome 鐵人賽

DAY 13
0
ChatGPT & Codex

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

[Day 13] 讓查帳功能真正上線:把 Query Service 接進 LINE Bot 即時對話

  • 分享至 

  • xImage
  •  

前言

昨天的 Day 12,完成了 SubWise 的第一個核心能力:使用者說「我今天買咖啡花了 80 元」→ Gemini AI 辨識消費 → 寫入 Google Sheets。

今天則往前再走一步。如果 SubWise 已經能夠「記帳」,下一個問題自然就是:「那我可以問它,我到底花了多少錢嗎?」

因此 Day 13 的目標,是讓 SubWise 開始具備「查帳」能力,讓使用者可以直接用自然語言詢問自己的消費與訂閱資料。今天主要完成四件事:建立 Query Service、讓 Gemini 判斷使用者的查詢意圖、從 Google Sheets 篩選與計算資料、將查詢結果透過 LINE 回傳給使用者。


今日實作實錄

一、確認 Query Service

前面開發過程中已經建立過 query_service.py,這次沒有重新打造,而是重新檢查它是否符合今天的需求。Query Service 主要負責三件事:

  1. 篩選消費日期:支援 todayyesterdayweekmonthall 五種區間
  2. 計算消費總額:將 Google Sheets 中的 Amount 欄位加總
  3. 整理成 LINE 可以直接閱讀的文字,例如附上查詢期間、總支出與消費明細

這讓 query_service.py 專門負責「資料處理」,而不是把所有邏輯都塞進 app.py

二、讓 Gemini 學會辨識「查詢」意圖

修改 Gemini 的 System Prompt,新增查詢類型:

{
    "type": "query",
    "target": "expense",
    "period": "yesterday",
    "keyword": null
}

Gemini 不需要自己去讀 Google Sheets,只需要回答「使用者到底想查什麼?」,例如「我昨天花多少錢?」對應 period: yesterday,「我這個月花多少錢?」對應 period: month,「我有哪些訂閱?」對應 target: subscription。這裡採用的核心設計是:Gemini 負責理解人話,Python 負責處理資料,讓 AI 和實際資料操作各司其職,也比較容易維護。

三、把 Query Service 接進 LINE Bot

修改 app.py,新增 query 的處理流程。當 Gemini 回傳查詢意圖,Python 就會呼叫 query_service、讀取 Google Sheets、篩選指定日期、計算總金額、整理結果、回傳 LINE。整體架構變成:

使用者 → LINE Bot → Gemini AI → 判斷 Query Intent
→ Query Service → Google Sheets → 篩選/計算/格式化 → LINE 回覆

四、本機測試 Query Service 與 Gemini 串接

先在本機測試 query_service.py,查詢昨天消費得到「總支出 NT$320」,明細也正確列出三筆;查詢本月消費得到「總支出 NT$930」,代表日期篩選與加總邏輯都正常。

接著測試 Gemini + Query Service 是否真的串起來,直接輸入「我昨天花多少錢?」,Terminal 成功顯示 Gemini 判斷出查詢意圖、Python 呼叫 query_service 查詢 Google Sheets,最後得到「總支出 NT$320」,代表 Gemini 的「語意理解」與 Python 的「資料查詢」已經成功接在一起。

五、最後進行 LINE 真機測試

程式部署到 Render 後,實際用 LINE 測試三種情境,全部成功:

  • 查詢昨天消費:輸入「我昨天花了多少錢」,SubWise 回覆總支出 NT$320 與三筆消費明細
    https://ithelp.ithome.com.tw/upload/images/20260814/20178527TQ0fmSlZQS.png

  • 查詢訂閱:輸入「我有哪些訂閱」,SubWise 成功從 Google Sheets 找到 Netflix(NT$390 / monthly,下次扣款 2026-08-15)
    https://ithelp.ithome.com.tw/upload/images/20260814/20178527LTnLvCSoxS.png

  • 查詢本月消費:輸入「我這個月花了多少錢」,SubWise 成功計算出總支出 NT$930 並列出本月所有消費明細
    https://ithelp.ithome.com.tw/upload/images/20260814/201785274IM0529rf7.png

至此,Day 13 的核心功能正式完成。


今日完成

  • 確認並沿用 Query Service(日期篩選 + 加總計算)
  • Gemini 新增 query 意圖判斷(target / period / keyword)
  • 把 Query Service 接進 app.py,串接 LINE Bot
  • 本機測試 Query Service 與 Gemini + Query Service 串接
  • LINE 真機測試:查詢昨天消費、查詢訂閱、查詢本月消費全部成功

今天完成測試後提交 Git,Commit 8c0b74c,確認 git status 顯示 working tree clean,代表今天的程式版本已經完整保存。

目前 SubWise 已經具備:理解自然語言查詢、查詢今日/昨日/本月/全部消費、計算指定期間總支出、顯示消費明細、查詢訂閱服務與下次扣款日期,並透過 LINE 直接回傳結果。


明日預告

目前 SubWise 已經能透過 LINE「記帳」與「查帳」,但這兩項功能都建立在使用者願意主動打字描述消費內容的前提上。明天 Day 14,我將開始讓 SubWise 具備「看得懂發票」的能力——串接 Gemini 的 Vision 功能,讓使用者只要拍一張發票照片傳到 LINE,SubWise 就能自動辨識出品項與金額,不必再手動輸入。

這會是 SubWise 從「AI 文字記帳」正式邁向「AI 多模態記帳」的第一步。我們明天見!


上一篇
[Day 12] AI 不只會聊天:打造 LINE × Gemini × Google Sheets 智慧記帳管線
下一篇
[Day 14] Smart Default:當使用者沒說清楚該怎麼辦?SubWise 訂閱扣款日的智慧補全機制
系列文
AI 時代的輕量化開發:ChatGPT 打造 LINE 多模態記帳與續訂預警 Agent16
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言