跳至主要內容

里程碑

成功做出簡易的食材購買過期管理器

孟德翅膀受了傷 @cpy1126發布於 已編輯

專案成果:LINE Bot 智慧食材保存期限管家 (@328kaoez)

使用 n8n 結合 LINE Messaging API 與 OpenAI AI Agent,打造能自動推算保存天數、記錄並管理食材期限的對話式生活助理。


一、 架構設計與核心做法

1. 主對話流程(Main Workflow: 我的AI小精靈)
  • LINE Webhook 串接:即時接收使用者的對話訊息與中繼資料。
  • UX 體驗優化(Loading 動畫):在呼叫大模型與資料庫前,先發送 LINE Loading API(帶入使用者的 userId),維持良好的對話等待體驗。
  • AI Agent 決策中心:
    • 模型選用 OpenAI Chat Model,搭配 Simple Memory 保留上下文對話。
    • 提示詞(Prompt)注入動態當前時間({{ $now.format('YYYY-MM-DD') }})。
    • 指引模型解析使用者輸入:若未提供購買日則預設為今天;若食材沒有標明過期日,由 AI 根據常識(如葉菜類 3~5 天、熟食 2~3 天)自動估算過期日。
    • 連接自訂子流程工具,由 AI 自行判斷調用 insert(新增)、get(查詢)或 delete(刪除)。
  • LINE 回覆訊息:整理最終輸出,以 LINE Reply Message 送出結果。
2. 工具子流程(Sub-workflow: tool - 商品保存期限操作)
  • Execute Workflow Trigger:定義輸入規格(action, item, expiry_date, purchase_date),並在主流程 Tool 設定中開啟 ✨(AI 自動填入)。
  • Switch 路由分流:
    • Insert 分支:將物品、購買日、過期日寫入 n8n Data Tables(商品保存期限表),後接 Edit Fields 回傳成功狀態。
    • Get 分支:撈取資料表中所有食材資料回傳給 Agent,供 AI 比對今天日期並過濾出快過期的項目。
    • Delete 分支:當使用者表示「吃完了」、「丟掉了」時,比對 item 名稱執行刪除。

二、 卡住的地方與除錯歷程

1. JSON 格式與雙重引號報錯
  • 問題:在 HTTP Request 節點中使用 JSON.stringify(...) 時,外層又包了一層雙引號 "{{ ... }}",導致解析出重複引號壞掉。
  • 解法:移除外層雙引號,讓 JSON.stringify 自身產生標準引號與轉義字元。
2. The workflow did not return a response(子流程無回應)
  • 問題:主流程呼叫子流程後報錯中斷。
  • 排查與修復:
    1. 主流程 Tool 節點的參數未開啟 AI 自動填入(✨),導致傳入全為 null。
    2. Switch 節點的比對規則因大小寫或空格未吻合,資料未流進預期分支。
    3. Insert 與 Delete 分支執行完畢後沒有接上終結回傳節點(Edit Fields),子流程未返回任何 Output。
3. LINE Loading 動畫報錯 400(Invalid chat ID)
  • 問題:在呼叫 LINE Loading API 時,將 chatId 誤填為訊息的 message.id。
  • 解法:修正取值路徑為使用者的 userId($json.body.events[0].source.userId)。
4. Delete 找不到資料與空查詢例外
  • 問題:當資料表為空或找不到欲刪除的物品時,節點輸出 0 筆,造成後續節點不執行或 AI Agent 誤讀歷史記憶。
  • 解法:在節點 Settings 開啟 Always Output Data,並在 Prompt 中建立空資料判定規則,確保回傳明確的「目前清單是空的」狀態。

三、 成果與後續規劃

目前已能透過自然語言順暢完成食材記錄、自動推算賞味期限、查詢即將過期清單與吃完銷帳。下一步預計加入獨立的 Schedule Trigger 定時推播流程,在每天固定時間主動檢查即將到期的食材,推播提醒盡速食用。

0 個愛心0 則留言

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