iT邦幫忙

2026 iThome 鐵人賽

DAY 0
0
AI 自動化

30天,利用 n8n Agents 打造一位 AI 同事系列 第 6

Day 6:第一個 n8n Workflow Tool,從 Data Table 查專案進度

  • 分享至 

  • xImage
  •  

「專案做到哪了?」

如果 AI 同事每次都說「請提供更多資料」,雖然沒有亂猜,但你大概還是得自己開表格,這樣的同事顯然不夠聰明。今天,我們就幫它準備一張查詢表單:填入專案代號,就能拿到進度。

這張表單叫 Workflow Tool,也就是一條能被呼叫的工作流程,今天的任務是先把工具做好、單獨測通,Day 7 再交給 Agent 使用。

例如輸入 AI,就從 Day 3 的 project_status 查到進度 35%;輸入不存在的代號,就回「找不到」。資料從表裡拿,不靠模型猜。

今天只串三個節點

整條流程是「收專案代號 → 查 Data Table → 整理回覆」,使用的都是查詢操作,不會改資料。

先確認 Day 3 的 project_status 還在,而且 AI 只有一筆,progress 是數字 35,在這份表裡代表 35%。工作流程也建在同一個 n8n 專案裡,才方便選到這張表。

截圖沿用本系列的 n8n 2.35.3。今天不會呼叫模型,所以不用安裝 Ollama,也不用新增模型的 API key。

回到 Workflows,按 Create workflow,名稱填入:

Tool - Get Project Status

從 Workflows 建立 Tool - Get Project Status

Tool - 只是方便辨認的名字,加上這個字不會自動讓 Agent 學會使用它,後面還要明確加入 Agent 的 Tools。

入口只收一個 projectKey

加入 When Executed by Another Workflow。這是等待另一條 workflow 呼叫的入口,搜尋節點時也可能看到 Execute Sub-workflow Trigger

Input data modeDefine using fields below,按 Add field,填入:

  • Name:projectKey
  • Type:String

入口定義 projectKey,接受文字形式的專案代號

這就像表單上只有「專案代號」一格,查 AI 專案就填 AI。先保留入口的原名,後面的程式會用名稱找到它,詳見 n8n 子工作流程入口說明

拿收到的代號去查表

在入口後面接上 Data Table 節點,設定如下:

  • Resource:Row
  • Operation:Get
  • Data table:project_status
  • Column:projectKey (string)
  • Condition:Equals
  • Value:切到 Expression,填入 {{ $json.projectKey }}

Data Table 依入口收到的 projectKey 查詢

{{ $json.projectKey }} 的意思是「用前一步收到的代號」。收到 AI 就查 AI,收到別的代號就查別的,不要把它寫死成 AI,也不要把整段當普通文字。

這裡用的是 Get,也就是讀取資料;Data Table 的操作差別可以查 n8n Data Table 說明

查不到,也要有一張回條

切到 Data Table 的 Settings,打開 Always Output Data

Always Output Data 已開啟

查不到時,原本會輸出 0 筆,後面的節點也就沒機會回答。打開這個選項,就算沒資料,也會交出一個空項目,讓下一步能回「找不到」。

想像同事去檔案室找文件,找不到也該回來說一聲,不能直接下班吧。

整理成 Agent 看得懂的結果

最後接上 Code 節點,改名為 整理專案狀態回覆,選擇:

  • Mode:Run Once for All Items
  • Language:JavaScript

貼上以下程式碼:

const projectKey = $("When Executed by Another Workflow").first().json.projectKey;
const row = $input.first().json;

if (!row.projectKey) {
  return [{
    json: {
      found: false,
      projectKey,
      message: "找不到這個專案,請確認 projectKey。"
    }
  }];
}

return [{
  json: {
    found: true,
    projectKey: row.projectKey,
    projectName: row.projectName,
    progress: row.progress,
    blocker: row.blocker || "",
    riskLevel: row.riskLevel,
    nextStep: row.nextStep,
    owner: row.owner,
    statusUpdatedAt: row.statusUpdatedAt
  }
}];

Code 節點把查詢結果整理成固定欄位

found 就是「有沒有找到」。找到時回 true 和資料表內容,找不到就回 false、原本的代號和提示,後面接 Agent 時就能分辨兩種情況。

先查一個存在的專案

打開入口節點,在右側 OUTPUTset mock dataEdit Output,切到 JSON 編輯,放入:

[
  {
    "projectKey": "AI"
  }
]

Save 後,這份測試輸入會被釘選。只釘選入口,不要釘選 Data Table 或 Code,這樣後面才會真的查表、整理結果。

回畫布按 Execute workflow,再打開最後的 Code 節點。我這次拿到 found: trueprojectName: AI 同事計畫progress: 35,其餘欄位也來自 Data Table。

查 AI 得到 found true,進度為 35

如果你在 Day 3 填了不同內容,結果應該跟你的表一致,不必硬湊成截圖的數字。

再查一個不存在的專案

把入口的測試資料改成下面這筆,儲存後再執行一次:

[
  {
    "projectKey": "NO-SUCH-PROJECT"
  }
]

這次流程仍成功,但輸出變成 found: false,並提示「找不到這個專案,請確認 projectKey。」沒有出現進度、名稱或風險等資料。

查無資料時只回 found false、代號與提示

「查不到」也是正常結果,不等於系統壞了。這兩題的驗收可以直接對照:

輸入 應看到的結果 本次實測
AI found: true,欄位與表中資料一致 PASS,進度為 35
NO-SUCH-PROJECT found: false,保留查詢代號,不補出不存在的欄位 PASS,回覆找不到

測完收好,別留下舊答案

回入口按 Unpin data,確認紫色釘選圖示消失,避免下次手動測試還在用舊樣本。釘選資料用於開發測試,正式執行會忽略它,詳見 n8n 釘選資料說明

儲存 workflow。我這個版本的畫面另有 Publish,示範中使用版本名稱 Day 6 - 可查詢專案狀態,完成後顯示 Published

三個節點已接好並顯示 Published,入口仍可見釘選圖示

留意這張截圖的入口仍有紫色圖釘,Published 不代表已取消釘選,跟做時要另外檢查。

這個範例先假設每個代號只有一筆資料,程式也只取第一筆;它還沒有處理重複資料或拒絕空白代號。今天驗證的是表中這兩題,不能直接當成所有輸入都沒問題。

做到這裡,查詢表單已經能用。Day 7 才輪到 Agent 填表:問它「AI 專案做到哪了?」,再看工具呼叫紀錄,確認它真的查到 35%,不是剛好猜中。


上一篇
Day 5:n8n AI Agent 會不會亂猜?用 5 題 Preview 實測
系列文
30天,利用 n8n Agents 打造一位 AI 同事6
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言