PM 新同事剛到職,我們需要先向他介紹團隊正在進行的專案,否則他也掌握不了專案進度。
昨天在 Day 2 把環境準備好,今天先別急著按 Create agent。就像新同事第一天上班,我們總不能只給他一台電腦和位子,就叫他報告專案進度吧?
Agent 也一樣,如果沒有拿到公司的專案資料,它只能回答不知道;更糟的情況,是講出一段聽起來很合理、其實沒有根據的內容。
所以在讓 Agent 開口回答之前,我們先用 n8n 的 Data Tables,替這位新同事建好五本工作簿,把交接資料準備好!
n8n 的 Data Tables 是放在 n8n 裡的小型資料表,可以先把它想成幾本共用工作簿:Workflow 可以讀取、寫入或更新資料,下一次執行時,資料也還在。
這裡的 Data Tables 是工作資料,和 Agent 的對話記憶是兩回事;建好表,也不會讓 Agent 自動知道表裡有什麼。後面仍然要做 Workflow Tool,Agent 才能查詢這些資料。我們今天只負責把資料櫃和欄位準備好。
這 30 天會用到五張表:
| Data Table | 放什麼 | 今天完成後的筆數 |
|---|---|---|
project_status |
專案進度、阻塞、風險與下一步 | 1 |
project_docs |
可搜尋的文件內容與來源網址 | 1 |
jira_drafts |
等待確認的 Jira 草稿 | 0 |
jira_issues |
練習用的 Jira 結果,不會連到真的 Jira | 0 |
test_results |
後面每次考試的 PASS/FAIL | 0 |
前兩張像新人到職時拿到的交接資料,先各放一筆,讓 Day 6 和 Day 11 有東西可查。後三張則是它開始工作後留下的紀錄,今天先保持空白。
可以先想像之後的工作情境:你問「專案做到哪了?」,它去查 project_status;你要看專案背景,它去找 project_docs。接著你說「幫我擬一張待辦」,內容先放進 jira_drafts,等你核准後,才把模擬建立的結果記在 jira_issues。至於它有沒有照規矩做,就交給 test_results 記錄。
今天先準備這五本工作簿,查詢和寫入的能力會在後面逐步接上。
我把五份 CSV 完整放在下面,不用另外找下載連結。每份都只有兩行:第一行是欄名,第二行是練習資料。
請用你習慣的純文字編輯器,分別存成下面的檔名,編碼選 UTF-8。只複製區塊內的內容,不要連同 Markdown 的三個反引號一起複製;也確認副檔名是 .csv,不是 .csv.txt。五個檔案放在同一個資料夾就好。
這些都是示範資料。日期保留練習當時的數值,方便和截圖對照;
example.com也是示意網址,並不是一份真的專案文件。先保留這些值,後面的練習才能對得上。
projectKey,projectName,progress,blocker,riskLevel,nextStep,owner,statusUpdatedAt
AI,AI 同事計畫,35,等待確認模型 credential,medium,完成第一個查詢 Tool,Andy,2026-08-20T09:00:00+08:00
sourceId,projectKey,title,content,sourceUrl
DOC-001,AI,AI 同事專案說明,本週完成 self-hosted n8n 與五張練習資料表,https://example.com/docs/ai-project
draftId,projectKey,summary,description,acceptanceCriteria,payloadHash,status,draftCreatedAt
DRAFT-SEED,AI,這是一筆建表用範例,建立欄位型別後會刪除,不會真的建立 Jira,seed,seed,2026-08-20T09:00:00+08:00
issueKey,draftId,idempotencyKey,summary,status,issueCreatedAt
ISSUE-SEED,DRAFT-SEED,seed,這是一筆建表用範例,seed,2026-08-20T09:00:00+08:00
testId,testName,input,expected,actual,passed,runAt
TEST-SEED,建表型別檢查,seed,Boolean 欄位應為 true,尚未執行,true,2026-08-20T09:00:00+08:00
progress 的 35 在這份資料裡代表 35%,不是 0.35。最後三份 CSV 裡的 SEED 則是建表用的臨時範例,等一下會刪掉。
打開 Day 2 準備好的那套 n8n,進入 Personal(或你用來練習的專案),打開上方的 Data tables 分頁,按右上角 Create data table。
五張表和後續的 Workflow 都要放在同一個 n8n 專案,就像交接資料要放在同一個團隊的資料夾,才不會人坐在 A 辦公室,資料卻全放在 B 辦公室。
下面截圖使用本系列實測的 n8n 2.35.3。不同版本的按鈕位置或 CSV 型別推斷可能有差異;重點是最後建出的表名、欄位和型別要一致。
接著照下面填:
project_status
project_status.csv

表名用 project_status,不要加 .csv;header 選項要勾選,第一行才會被當成欄名。
按下 Create 後,n8n 不會立刻建表,而是先讓我們檢查欄位。請特別確認:
progress 是 Number
statusUpdatedAt 是 Datetime

欄位型別會影響後面的比較與排序;進度如果被存成文字,100 甚至可能排在 35 前面。
確認後再按一次 Create。在這版介面裡,n8n 會自動增加 id,所以 CSV 雖然只有 8 欄,清單上會看到 9 columns,這是正常的。
我第一次把時間欄叫做 updatedAt,建立時才看到「reserved column」錯誤,原來這是 n8n 自己保留的欄名,不能拿來當自訂欄位。
上面的 CSV 已經改成 statusUpdatedAt。如果你是自己建立 CSV,也請避開 id、createdAt、updatedAt 這幾個名稱。
回到 Data tables,用同樣的方法建立 project_docs,並上傳 project_docs.csv。建立完成後打開它,應該會看到 DOC-001 這一列:

先確認 DOC-001 和文件內容已匯入;往右捲動可以檢查 sourceUrl 欄位。
新同事跟你說「文件上是這樣寫的」,你大概會接著問:「哪一份?給我看一下。」sourceId 就是文件編號,sourceUrl 則是回頭找文件的地址,讓回答有地方可以追查。
Day 12 會用這類欄位檢查回答有沒有附上來源。但附了網址,還不代表連結打得開,更不代表文件真的支持那個答案。這裡的 example.com 只是練習用,不能拿它當成已驗證的引用。
project_status 和 project_docs 的這一筆資料都要保留,不要刪除。
剩下三個 CSV 也各有一筆 SEED 資料,就像表單上預先填好的「填寫範例」:先讓系統看懂每個欄位要放什麼,再把這筆範例拿掉。
我在這次使用的 n8n 2.35.3 匯入介面裡,遇到只有欄名、沒有資料列時,欄位被當成 String 的情況。為了讓 passed 是真正的 Boolean、時間欄是 Datetime,這次採用的做法是:先用範例列建表,確認型別,再把範例列刪掉。
依序建立:
jira_drafts,上傳 jira_drafts.csv
jira_issues,上傳 jira_issues.csv
test_results,上傳 test_results.csv
在 jira_drafts,確認 draftCreatedAt 是 Datetime;在 jira_issues,確認 issueCreatedAt 是 Datetime。這兩張表的其他自訂欄位都是 String。
project_docs 的五個自訂欄位也都是 String。到了 test_results,請特別確認下面三個欄位,其餘欄位維持 String:
actual:String,後面要保存 Agent 的實際回答passed:Boolean,只保存 true 或 falserunAt:Datetime,記錄測試時間
我一開始把範例的 actual 也寫成 true,結果它被誤判成 Boolean;畫面中的 String/Boolean/Datetime 才是我們要的結果。
舉例來說,之後我們出一題「專案進度多少?」,expected 可以記預期的「35%」,actual 記 Agent 實際說了什麼,passed 則依測試規則記下有沒有過關。就像考卷要分開放「標準答案、學生作答、判分結果」,不能只留一句「它說得很好」。今天還沒開始考試,所以這張表最後要清空。
這三張表建立後,分別找到 DRAFT-SEED、ISSUE-SEED、TEST-SEED 那一列,勾選後按 Delete,再在確認視窗按一次 Delete。只刪這三筆建表範例,前兩張表的專案與文件資料要留下來。完成後,jira_drafts、jira_issues 和 test_results 都應該顯示 Total 0。
回到 Data tables 清單,名稱應該一個不少:

右下角 Total 5 是「五張表」,不是五筆資料;這版清單上的欄位數也包含自動加入的 id。
最後再打開 jira_issues:

先記住現在的 Total 0。到了人工核准的練習,我們會在執行前後比對這張表:如果你還沒核准,卻多出一筆新的結果,就要檢查是哪個步驟先動了手。
先逐張打開,確認資料筆數依序是 1、1、0、0、0,再用人的眼睛查一次 project_status:
問:AI 同事計畫目前進度多少?卡在哪裡?
從這筆資料能讀到:進度 35%,目前等待確認模型 credential,下一步是完成第一個查詢 Tool。
這是我們手動讀表得到的答案,先用它確認「正確答案應該長什麼樣子」,之後才有辦法檢查 Agent 有沒有亂講;目前還不能算是 Agent 已經查詢成功。
再看一下 project_docs:你能找到 DOC-001,也知道它的示意網址不能拿來證明真實文件存在。這樣就過關了。
還沒,光有資料,Agent 並不會自動知道怎麼用。就像新同事收到一份沒看過的報表,你還是得告訴他:這份資料代表什麼、去哪裡查、什麼時候該用。
先把三件東西分清楚:project_status 是專案工作簿,Session 是這次對話的紀錄,credential 則像連線時要出示的識別證。
例如你在聊天裡說「剛開完會,進度改成 50%,先記著」,即使這句話還在對話裡,表中的 progress 也不會因此從 35 自動變成 50,還得透過寫入流程才能修改工作簿。就像你口頭跟 PM 說了新進度,共用報表也不會自己更新。
後面我們會把查詢流程做成 Workflow Tool,也就是 Agent 可以呼叫的工作流程。你可以把它想成一個「查專案進度」的工具:告訴它要查哪個專案,它就照設定好的步驟去翻工作簿。
等我們把它接好,預期的過程會像這樣:
AI。projectKey = AI 查表,取回 progress = 35,以及阻塞、下一步等欄位。這裡的 35% 是從表裡查回來的,Agent 負責判斷何時使用工具,並把查到的結果說清楚,而不是自己決定一個看起來合理的百分比。這條查詢流程還沒在今天建立,先把它當成我們後面要完成的目標。
目前先約定:project_status 由維護者更新,後面的查詢 Tool 只讀取。新人拿到「查資料」的工具,不代表順便拿到了「改資料」的權限。
還有一個之後會遇到的小陷阱:如果同一個 projectKey = AI 出現兩筆資料,一筆進度 35%,另一筆 80%,該信哪一筆?本文沒有替 projectKey 建立唯一限制,所以查詢流程要處理這種情況,不能隨便拿第一筆就當答案。今天先保留一筆 AI,等接上 Tool 再測。
今天完成的成果,就是五張型別正確、資料筆數正確的工作簿。交接資料準備好了,下一篇我們再替這位 AI 同事選模型,並把「能做什麼、什麼事要先問過你」寫進工作規則(Instructions)。