跳到主要內容

財伴 oSave

我們做錯過一次。發票醫生自動抓得到你花了多少錢,卻答不出「所以我的財務健康嗎」。財伴改成用會計邏輯記帳:前台只問三個問題,後端把它翻成 13 項金流方向,再算出六項財務健康指標。

生產中2025.05 – 現在技術長 · 系統架構與後端

App StoreGoogle Play

財伴 oSave
App 規模
397 個 Dart 檔 · 84,978 行 · 16 個功能模組
後端規模
31 個 Python 檔 · 7,996 行
版本
v1.1.5,第 32 次建置
競賽與補助
6 項獎項 + 教育部 U-Start 補助

在解什麼問題

我原本以為記帳的門檻是輸入太麻煩,所以第一版去串了能自動抓資料的來源。後來發現不是——資料進來了,使用者還是不知道自己財務好不好。一堆分類完的消費紀錄回答不了「這個月我是變好還是變壞」。

真正的門檻是「有記等於沒記」:紀錄本身沒有結論。而要有結論,每一筆就必須帶著會計上的意義,不能只是一個金額加一個標籤。問題於是從「怎麼讓人少打幾個字」變成「怎麼在使用者只願意點三下的前提下,拿到足以做財務判斷的結構化資料」。

架構決策

  1. 01 2025.06

    前台只問「金流程序 × 結算型態」,13 項金流方向由後端推導。

    沒選的
    讓使用者直接選會計科目
    為什麼
    完整的會計分類使用者選不動,但沒有會計分類就算不出財務健康。所以前台只問兩個他答得出來的問題:錢是進來、轉換還是出去,以及走的是現金、信用卡還是儲值。兩者的組合能唯一決定的,後端直接判;不能唯一決定的,再用科目與交易語意收斂。使用者的操作成本沒有上升,資料的結構化程度上升了一整級。
    代價
    後端多一層轉譯規則要維護,而且「哪些組合可以唯一對應」必須有一份文件是唯一真相,否則前後端會各自長出一套理解。
  2. 02 2026.04

    品項分類走三層串接,只有最後一層才呼叫模型。

    沒選的
    每一筆都問一次 LLM
    為什麼
    使用者打「星巴克」的時候在等一個下拉選單填好,不是在等 AI 思考。第一層記憶體快取(毫秒內)、第二層本地規則(關鍵字完整比對、正則、模糊相似度,五毫秒內)、第三層才呼叫模型。前兩層擋掉絕大多數請求,成本與延遲都留給真正需要判斷的那幾筆。
    代價
    規則表要人維護,而且會漏;漏掉就往下一層走,代價只是慢一點與貴一點。
  3. 03 2026.04

    分類失敗一律回空結果,App 不顯示錯誤。

    沒選的
    回傳錯誤碼,讓前端提示「分類服務暫時不可用」
    為什麼
    分類是輔助,不是必要路徑。三層全部沒有結果、或任何一層炸掉,端點都回空物件,App 靜默處理,使用者自己選類別,記帳流程一秒都不停。一個因為 AI 掛掉而記不了帳的記帳 App,比沒有 AI 更糟。
    代價
    線上分類失敗率不會從使用者端浮出來,只能靠後端指標盯。
  4. 04 2026.05

    六項財務健康指標用門檻線性轉換成分數,不讓模型評分。

    沒選的
    把使用者的財務資料丟給模型,請它給一個健康分數
    為什麼
    分數要能解釋、要能重算、要能在兩個月之間比較。門檻表是寫死的,同樣的輸入永遠得到同樣的分數,而且看得出來是哪一項把分數拉下去。模型評分做不到其中任何一項。模型只負責把算完的數字翻成一句人話。
    代價
    門檻是 MVP 的假設值,要靠真實使用者資料、收入分布、城市與租屋狀態持續校準;校準之前只有趨勢可信,絕對值的意義有限。
  5. 05 2025.09

    整套建在 Firebase 上,不自架後端。

    沒選的
    自己的伺服器 + 自架資料庫 + 自架推播
    為什麼
    團隊沒有人可以當半個 SRE。驗證、資料庫、雲端函式、推播、當機回報、遠端設定一套解決,換來的是所有人的時間都花在「使用者會不會回來用」上面。
    代價
    被平台綁住,而且用量成長時的單價不會比自架便宜。

資料怎麼流

  1. 01

    記一筆

    使用者在 App 選金流程序與結算型態,輸入品項名稱與金額。

    這一步的操作成本決定整個產品的留存率。

  2. 02

    品項分類

    呼叫後端分類端點,三層串接依序嘗試,回傳建議類別自動填入。

    任何一層失敗都回空結果,記帳流程不中斷。

  3. 03

    金流判斷

    後端把「金流程序 × 結算型態」推導成 13 項金流方向之一,必要時再用科目與語意收斂。

  4. 04

    入帳

    寫入 Firestore,同時標記後續指標計算需要的旗標。

  5. 05

    指標計算

    依帳戶科目編碼表彙總,算出收支結餘、必要支出、非必要支出、固定支出、債務負擔、預算達成。

    全部是確定性的算術,不經過模型。

  6. 06

    呈現

    雷達圖健康分數、熱力圖與桑基圖,加上固定收支自動入帳與財務健康週報。

  7. 07

    說人話

    只有到這一步才再次呼叫模型,把算完的數字翻成一句使用者看得懂的建議。

財伴 oSave 畫面 1財伴 oSave 畫面 2財伴 oSave 畫面 3

得獎

技術

  • Flutter
  • Dart
  • BLoC
  • GoRouter
  • GetIt
  • Drift
  • Firebase Cloud Functions
  • Python
  • 三層分類串接
  • 本地規則比對
  • LLM
  • Cloud Firestore
  • Cloud Storage
  • Firebase Auth
  • Cloud Messaging
  • Remote Config
  • Crashlytics
  • Codemagic