里程碑
成功做出簡易的食材購買過期管理器
孟德翅膀受了傷 @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(子流程無回應)
- 問題:主流程呼叫子流程後報錯中斷。
- 排查與修復:
- 主流程 Tool 節點的參數未開啟 AI 自動填入(✨),導致傳入全為
null。 - Switch 節點的比對規則因大小寫或空格未吻合,資料未流進預期分支。
- Insert 與 Delete 分支執行完畢後沒有接上終結回傳節點(Edit Fields),子流程未返回任何 Output。
- 主流程 Tool 節點的參數未開啟 AI 自動填入(✨),導致傳入全為
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 則留言
登入並驗證手機後就能留言。登入