回到 n8n 點選 Create Workflow 建立第一個工作流

初始畫面

n8n工作流初始畫面

點選左上重新命名工作流為 n8nDocIntoVectorDB

n8n工作流重新命名

點選右上角 … 打開選單,接著點 Settings

n8n工作流設定選單

將 Time Zone 改為 Asia/Taipei 後點右下角 Save

n8n工作流時區設定

現在點選畫面正中央的 Add first step

n8n添加第一個步驟

右側會彈出一個視窗

n8n節點選擇視窗

於搜尋框輸入 form ,點選 n8m Form

n8n搜尋表單節點

繼續點選 On new n8n Form event

n8n選擇表單事件

出現節點設置視窗,先不要慌。

n8n表單節點設定視窗

Form Title 輸入 ‘檔案選擇’,然後點一下 ‘Add Form Element’

n8n表單元素設定

Field Name 輸入 ‘inputFiles

Element Type 選擇 ‘File’

Multiple Files 撥到左邊

Accepted File Types 輸入 ‘pdf’

最後按一下 ESC 關閉這個設定畫面

看到跑出來了,緊接著按一下節點右邊的加號

n8n添加新節點

在搜尋框輸入 ‘extract’ 並選擇 ‘Extract from File’

n8n搜尋檔案提取節點

繼續選擇 ‘Extract from PDF’

n8n選擇從PDF提取

接著在節點設定畫面的 Input Binary Field 從 ‘data’ 改成 ‘inputFile’,然後按 ESC 關閉設定畫面。

n8n提取PDF節點設定

在 Extract from File 右邊加號點一下,在搜尋框輸入 supabasse,點選 Supabase Vector Store

n8n搜尋Supabase Vector Store節點

點選 Add documents to vector store

n8n選擇添加文件到向量儲存

接著會自動打開設定視窗,點選右邊的鉛筆

n8n Supabase Vector Store節點設定

Credential 設定視窗

n8n Supabase憑證設定

然後回到 Supabase 網頁,到 API Settings 頁面。

複製 Project URL 貼到 n8n 的 Host 欄位

複製 Supabase 的 service_role 貼到 n8n 的 Service Role Secret 欄位

最後點選右上角的 Save,會出現認證成功訊息。

Supabase API設定頁面
n8n Supabase憑證設定完成

接著會自動回到節點設定畫面,我們點選 Table Name 比較寬的那個下拉選單,選擇我們之前建立的 ‘nhi_drug_768’。

然後按一下最下面的 Add Option

n8n Supabase Vector Store表格選擇

將 Query Name 從 match_documents 改成 match_nhi_drug_768

然後按 ESC 關閉設定畫面

n8n Supabase Vector Store查詢名稱設定

現在的工作流會長這樣,點選 Supabase Vector Store 節點左下的鬚鬚

n8n工作流預覽

選擇 Embedding model,這邊我們先選擇 Embeddings Google Gemini

n8n選擇Embedding模型

接著下拉點選 Create new credential

n8n建立新憑證

改名稱,然後貼上 API Key

n8n憑證名稱與API金鑰輸入

忘記 API Key 的可以回到 Google Cloud 查閱

Google Cloud查詢API金鑰

貼上 API key 後按右上的 Save,然後按旁邊X關掉畫面。

n8n憑證儲存
n8n憑證儲存成功

接著下拉選擇 models/test-embedding-004,然後按 ESC 關閉畫面。

n8n選擇Embedding模型

此時可以看到左下的鬚鬚長出一顆圓球

n8n Embedding模型連接成功

這時候看到 Supabase 節點還是紅的,代表還有問題沒解決,此時點右下角的鬚鬚。

點選 Default Data Loader

n8n Supabase節點錯誤提示

點選 Add Option,然後點 Metadata。

n8n Supabase添加選項Metadata

接著點 Add property

n8n Supabase添加屬性

Name 輸入 fileName,Value 貼上

{{ $('On form submission').item.json.inputFile.filename }}

並確認這個小格子的右上方的 Expression 是亮的。

n8n Supabase設定Metadata屬性

此時換成右下鬚鬚紅了,直接點一下它的加號

n8n添加新節點

選擇 Recursive Character Text Splitter

n8n選擇文本分割器

改成 200,然後按 ESC 關閉設定畫面。

n8n文本分割器設定

這時候的畫面,點一下 Execute workflow 首次觸發

n8n執行工作流

點選 ‘選擇檔案’,然後選擇要寫入向量資料庫的檔案後,點選 Submit。

示範檔案可以到此下載 : 最新版藥品給付規定內容(整份帶走)-114.04.25更新-衛生福利部中央健康保險署-健保服務-健保藥品與特材及醫療服務-健保藥品-藥品相關法規與規範-藥品給付規定-最新版藥品給付規定內容(整份帶走)

此時會發現背後開始偷偷跑了,有點措手不及但是沒關係,先關掉這個 Submit 視窗。

n8n檔案上傳中

看一眼剛剛執行成功的 Executions

n8n執行成功紀錄

此時回到 Supabase 網站,打開我們的資料庫,就可以看到剛剛寫入的資料了。

Supabase資料庫查看已寫入資料


此時還有最後一個步驟:刪除重複資料

在 Extract from File 節點右邊的線上面按一下加號

n8n添加新節點

輸入 supabase 搜尋,然後點選 Supabase

n8n搜尋Supabase節點

下一層繼續選擇 Delete a row

n8n選擇刪除行

這邊點選 Table Name or ID 並下拉選擇 nhi_drug_768

n8n Supabase選擇表格

Select Type 點選下拉,選擇 String。

n8n Supabase選擇類型

在 Filters (String) 貼上下面的字串,然後點一下格子右上的 Expression。

metadata->>fileName=like.{{ $('On form submission').item.json.inputFile.filename }}
n8n Supabase設定過濾器

關掉後,會看到剛剛的 delete 節點流落在外

n8n刪除節點位置

把它拉到 Supabase Vector Store 上方,並且從 Extract from File 拉一條線連接起來

n8n連接節點

再次啟動工作流,並且選擇同一個 PDF 檔案上傳。

n8n重新執行工作流

等待跑完,觀察 delete: row 節點有沒有數量,有就對了。

n8n刪除節點執行結果

至此完成將檔案塞到向量資料庫的工作流,並且遇到同檔名的時候會先刪除舊資料,避免重複塞入。

n8n最終工作流