跳至主要內容

里程碑

第一次用 n8n 打造 LINE 記帳小幫手|從構想到流程設計

Lu @lu11.10發布於 已編輯

專案構想

我常常忘記記帳,因此想做一個 LINE 小幫手,讓記帳融入日常聊天。用戶只要像平常一樣說「午餐吃了雞肉飯 80」,AI 就會整理成日期、品項、金額,確認後寫進 Google 試算表,也能隨時查詢本週、本月的消費明細。

使用工具: n8n、LINE Messaging API、OpenAI、Google Sheets

Day1(10/12):決定架構

第一版流程(兩個 AI)
  • 思考: 原本構想是一個 AI 專門回應用戶,另一個 AI 負責記帳。
  • 困難: 用戶聊天時不一定會說清楚金額和品項,資訊不完整也會被登錄。
  • 解決: 把整個流程接成一直線,避免兩個 AI 資訊不對等。
改成一條線,但試算表仍是固定執行
  • 思考: 變成一個 AI,並且由 AI 將整理好的資料傳進 Google 試算表。
  • 困難: 用戶有些訊息只是純聊天,造成試算表不斷出現空白列。
  • 解決: 把試算表移到 AI Agent 底下當作 Tool。一般連線是「流程走到就一定執行」,Tool 則是「AI 自己判斷要不要用」,所以資料湊齊才會記一筆。
最終架構(add_expense、query_week、query_month 三個 Tool)與記帳表

Day2(10/14):多人使用與表格設計

思考: 希望多人共用同一個流程,但每個人只看得到自己的帳,還要能結算當週、當月。

做法:

  1. Simple Memory 的 Session ID 改成 LINE 的 userId,每個人的對話記憶分開,不會混在一起。
  2. 表格欄位設計為:日期、品項、金額、userID、週、月。
  3. 「週」「月」兩欄用 ARRAYFORMULA 從日期自動算出,方便之後篩選。
測試視窗標題都是 __,輸入一格三格同步
  • 困難: 設定 Tool 欄位後,日期、品項、金額三格寫入了同一串文字,並出現錯誤 You have multiple tools with the same name: '_'
  • 原因: Tool 節點用中文命名,n8n 會把中文過濾成空字串,三個參數被當成同一個。
  • 解決: Tool 改用英文名稱(add_expense、query_week、query_month),中文說明留在 Description。
AI 不知道今天日期
  • 困難: AI 回覆說今天是 2023 年,試算表的日期也寫成 2023。
  • 原因: System Message 沒有切到 Expression 模式,AI 看不到現在時間。
  • 解決: 切到 Expression 模式,並在提示詞裡明確寫出今年年份。

Day3(10/15):查詢本週、本月

困難: 詢問「這週花多少」,AI 一直回「沒有記錄」。

排查過程:

  1. 到 Executions 發現 AI 根本沒有查詢用的 Tool,所以另外建立 query_week、query_month(Get Row(s))。
  2. 在 Tool 裡取用戶 ID 不能用 $json,要明確指定 $('Webhook').item.json.body.events[0].source.userId。
  3. 用「一次只留一條 Filter」的二分法測試,確認 userID 篩選正常,問題出在「週」欄位的比對。
只留 userID 篩選,成功撈出資料

解決: 週與月改成只用 userID 篩選,再由 AI 自行篩出本週並加總。

Day4(10/15):讓 AI 守規矩

沒說金額,試算表卻多了 -90
  • 困難: 我只說「今天午餐好好吃」和「辛拉麵」,沒說金額,AI 卻自己寫入 -90。
  • 原因: 舊的 Memory 留有過去紀錄,而且 System Message 沒有禁止猜測。
  • 解決:
    • System Message 明確規定:日期、品項、金額必須是用戶本人說出的內容,不可猜測或沿用舊金額。
    • 呼叫 add_expense 前,先跟用戶確認一次。
    • 欄位說明也寫上「不可猜測」。
    • 換新的 Session ID,清掉舊記憶。
收入被拒絕的對話
  • 困難: 我說「昨天領了 1000 元」,AI 回「只能記錄消費」。
  • 原因: System Message 只寫「記帳助理」,沒說收入也能記,而且規則重複、互相衝突。
  • 解決: 整合成單一版本的 System Message,把意圖分成記帳、查詢、閒聊三類,規定支出為負數、收入為正數,查詢時分開統計總支出與總收入。

學到的事

  • 中文不能當 n8n 的內部名稱:$fromAI 參數名、Tool 名稱都要用英文。
  • 預覽顯示 undefined 不一定是錯,$fromAI 要等 AI 呼叫才有值。
  • 除錯用二分法:一次拿掉一個條件,就知道問題在哪。
  • Executions 是最好的除錯工具:能看到 AI 呼叫了哪個 Tool、傳了什麼值。
  • 改 Prompt 後要換 Session ID,否則 AI 會沿用舊對話。

之後想優化

  • 用 Code 節點加總,取代 AI 心算
  • 加上「查詢上週、上個月」
  • 加上修改、刪除紀錄的功能

0 個愛心0 則留言

登入並驗證手機後就能留言。登入