記帳軟體好麻煩
我對於記帳一直都是三分鐘熱度,最早也用一些 App 來記帳,但又對許多無法自動調整的內容感到厭煩,後來自己用了 Google Sheet 加上 Google Form 來建立記帳系統,讓記帳行為真的能夠跟著自己的習慣以及模式來調整。
結果所有都敗給了 惰性
2025 年 30 多歲的我消費力大增,每天有需多大大小小的支出,交易方式也多元到電子支付、現金、刷卡、悠遊卡,也有那種訂閱制要等到我拿到信用卡帳單(前提是我要打開來看)才會想起來我有花費,因此要一筆一筆記下來還是很麻煩。
再來就是時間,透過 app 或 Google Form 記帳,在怎麼樣減少都要填入分類
、金額
、內容
這三大要素,因此每一筆記帳都很有可能超過 10 秒鐘,手指要動很多次,老實說日子一長實在覺得很麻煩,每一次買個飲料都要花 10 秒寫下來,容易焦躁以及懶惰發威。
但是記帳以及財務規劃這麼重要,持續忽略的話會變成一個難以管理的黑洞,但究竟要怎麼樣才能解決我的問題呢?
User Story - 在 AI 時代!就用 AI 來做下一個世代的 AI 記帳系統
在 2025 年的我們總算等到的 AI 以及語言模型的普及,也已經有許多工具可以自己串接來達成自己理想的記帳系統,因此就開始吧!
首先,先盤點一下我想像中的需求:
- 可以快速的記帳,快還要更快
- 會彙整、分析我的消費,給予我財務建議
- 會主動通知我,我不用再手動拉表單或去看資訊
最終整理之下,我的 User Story 就出來了
我是 一個財務焦慮的小白
我可以 快速的記帳,每月看到一份我的財務分析報告
如此一來 省下許多時間,直接進入我的財務 Review
技術選型以及流程架構
評估以及選型之後,我最後採用的工具有以下內容
- Google Form & Google Sheet 給予消費者端點(我的手機)記帳機制
- n8n 自動化工具,並且會使用到其中的 Code function 以及 AI Agent,關於安裝可以參考我之前寫的 n8n 文章
- LLM 模型 使用在 n8n 內的節點,這裡我是用 Gemini,便宜好用,提供給 AI Agent 做串接的
- Gmail 在 n8n 內把 AI Agent 寫的報告自己寄給自己來看用的
而流程設計上概念上大概是這樣子下圖,實際的操作我們包含:
- 建立 Google Form 表單語音輸入
- n8n 設計
- 抓取上月資料
- AI Agent 分析
- 分析報告透過 Gmail 寄給自己
- 每月 1 號收到分析報告
@startuml Converter CLI actor "ME" as user order 10 box "Phone" #LightBlue participant "google Form" as form order 15 participant "Gmail" as gmail order 18 end box database "Google Sheet" as sheet order 20 box "n8n" #LightBlue participant "function" as function order 30 #99FF99 participant "AI Agent" as ai order 40 #99FF99 end box autonumber user->form : 語音記帳 form->sheet : 自動存入 sheet->function : 每月trigger,拿到全部資料 rnote over function 資料處理 endrnote function->ai : 傳送本月資料 rnote over ai LLM 分析資料 撰寫消費報告 endrnote gmail<-ai : 傳送報告 user<-gmail : 收到通知,閱讀 @enduml
建立 Google Form 表單語音輸入
直接用一張圖告訴你們,我的 Google form 與 Google sheet 有多簡單
也就是說在我的 Google Form 中 只有一個輸入欄位,包含了以下思維:
- 不填時間是因為填入當下 Google Form 有紀錄時間,而事實上假如忘記了就補紀錄就好,我沒有那麼 care 消費在哪一天發生
- 不填分類,後續透過 LLM 自己幫我分類即可
- 單一欄位可以透過 iPhone 的語音辨識輸入,例如當我說 “買嬰兒用品六百二十五元”,辨識會自己變成 “買嬰兒用品$625”,非常方便!
打開網頁、語音數入,這樣我每一筆大概 5 秒可以完成,非常快速,我覺得這樣子就是最好的記帳方式了!而且只有在我記帳的時間成本越小的時候,我才能保持記帳這件事情。
Google sheet 也超簡便,爽欸
n8n 設計
這裡先看看我的 n8n 畫出來的流程以及各個節點的重點內容
- Schedule Trigger: 定時觸發節點。
- getmonth: 一個抓取現在時間以及整理的工作節點。
- Get Sheet: 拉出整個記帳 data。
- filter_month: 篩選上個月資料丟給 LLM,省 token
- AI Agent: 整個 workflow 的核心,分析資料,並把結果回傳給成 html
- Send Email: 透過 gmail 來寄送給自己
抓取上月資料
Schedule Trigger
我設定是在每個月的 1 號執行 workflow,因此用 cronjob 0 0 1 * *
來設定,要注意因為我的 n8n server 是 UTC-4,因此這裡的 1 號半夜 0:00 其實是台灣的 1 號中午 12:00 整。
getmonth
再來我們 要 define 抓取的月份,因此我使用了一個 “Get” 節點,設計上如下:
- Operation 為 “Substract From a Date”
- 變數用
{{ $now }}
來抓到現在時間,我是在每月 1 號 0:00 執行,產出資料會是 “2025-09-01T00:00:30.766-04:00”。 - 設定減 1 個月,如此一來這個節點產出的時間就會是上個月的 1 號,產出的資料會變成 2025-08-01T01:52:03.282-04:00,這樣我就可以取用這個資料當作我要撈到的上個月數值。
Get row(s) in sheet
用 google sheet 的節點,撈取我的收支資料,可以參考我的 Docker 自建 n8n 並且連結上 Google OAuth Credential,來看怎麼設定 Google OAuth Credential。
這個節點執行之後,會把全部的 data 用 JSON 格式傳給下一個節點。
filter_month
由於我們整個記帳表有太多非本月資料,我們先透過此節點篩選正確的資料,以方便傳給 LLM,這裡直接給出我的 javascript,要注意的是時間節點以及上一個 google sheet 節點的資料可以正確傳進來
// 取得前面節點的日期變數
const fullDate = $('getmonth').first().json.newDate;
// 取 yyyy-MM 作為目標月份 2025-08
const targetMonth = fullDate.slice(0, 7);
// 取得輸入資料
const items = $input.all();
// 篩選月份
const filtered = items.filter(item => {
const dateStr = item.json["時間戳記"];
let [datePart] = dateStr.split(" ");
datePart = datePart.replace(/\//g, "-");
const parts = datePart.split("-");
const formatted = `${parts[0]}-${parts[1].padStart(2,"0")}`;
return formatted === targetMonth;
});
// 結果包成 JSON
return [{
json: {
filteredData: filtered.map(f => ({
Time: f.json["時間戳記"],
Item: f.json["記帳內容"]
}))
}
}];
AI-Agent 分析
接著在 n8n 加上 AI-Agent 節點,還是簡單說明一下 Agent 的概念好了。
Agent 指的是助手,而 AI Agent 在現在主要是說明可以使用各種工具(Tool),來達成 LLM 指揮功能的角色。
因此如果 LLM 是大腦,那 AI Agent 可以說是「把大腦安裝好,可以操作工具的助手」
AI Agent 街上前一個 code 節點之後,有三個重要的內容要進行
- 串接 LLM - 在這裡我是使用 Gemini,只要去 Gemini API 建立一個就可以用了,我目前主要使用 2.5-Flash 這個模型,跑一次應該不到 1 元
- 給 Simple Memory - Session ID 這裡要改為手動填入,我是直接用
{{ $now }}
的變數當作 ID 使用即可。 - 設定 Prompt - 這部的用意就是讓你的 AI Agent 知道你要做什麼事情,讓他清楚要拿前面的資料,進行一個嚴格的財務分析,以下為我給的 Prompt 內容,大家也可以自己做修改,來符合你們自己的財務審核需求:
{{ JSON.stringify($json.filteredData, null, 2) }}
你是一個財務非常嚴謹的助手以及審核員,以上為我上個月的花費,出現的數字為我花費的新台幣金額,請進行以下
1. 將所有花費,進行分類,包含為 [食物] [交通] [日用品採購] [貸款] [學習] [雜支],每一筆花費都要處理到
2. 將本月的花費,撰寫一份本月消費報告,並點出其中的消費問題、可以減少的花費,目標是能積極地讓我財務狀況變好,以及整理過後的「消費總覽」與「消費明細」,消費總覽為「總花費、各項分類花費」,消費明細包含「消費日期、消費金額、分類、消費內容」。請把撰寫的報告寫成 HTML
以下為我的資料,可依據我的資料評估我的財務使用狀況
「男性,19xx年生,已結婚有一個20xx年x月出生的小孩,目前與妻子以及小孩同住,平均月收入約xxxxx」
有幾個可以說明的地方:
{{ JSON.stringify($json.filteredData, null, 2) }}
是在把前面一個 filter 過後的資料整理丟給 AI,在 Preview 時可以看到一筆一筆的資料- 記得我之前說我記帳時不分類嗎!就是為了讓 AI 自己去判斷所有分類
- 產出的報告我有指定請他用 HTML,這樣下一步丟給 Gmail 寄信時就可以直接用了。
分析報告透過 Gmail 寄給自己
終於來到最後了,這裡我們就要嘗試把 AI 產出來的報告寄給我們自己,一樣先依照 Docker 自建 n8n 並且連結上 Google OAuth Credential設定 Google OAuth Credential,來建立 Gmail 節點。
節點設定如下:
- Oeperation 選擇
Send
- 收件者寫自己就好了
- 主題我使用了變數,一樣是使用到的
getmonth
節點資料, 標題寫為{{ $('getmonth').first().json.newDate.substring(0,7) }} 財務報告
,這邊說明一下用了.substring(0,7)
其實就是只拿到 2025-09 的資料,讓標題變成2025-09 財務報告
- Email Type 選擇 HTML,並且在 message 放入
{{ $json.output }}
,這個是說會把前一個 AI Agent 節點產出的報告(記得我們指定要給 HTML 嗎!)放進去,這樣子就可以直接把報告寄給自己了。
每月 1 號收到分析報告
讓我們來看看結果吧!
順利的話測試執行就會收到完整的報告,報告的內容其實會根據你寫的 Prompt 來提供,我其實覺得還滿滿意的,很像有個人認真閱讀了你的財務報告之後,寫了一份實際的建議書。
結論
這個 workflow 是來自於我對於自己財務快要飛出去所做的,期望自己可以保持記帳習慣,不斷去審視消費習慣,未來或許會增加幾個小功能:
- 每次除了寄信,新增把總結內容存入 Google Sheet
- 每半年、一年回顧
不過這些都是之後的事情啦~先期望自己能扎實的記帳。
以上!希望有給大家一些對於 n8n 以及自動化流程的想像,如果有任何建議或卡關,都歡迎聯繫我,我很願意跟你討論。