Showing Posts From
N8n
-
gooliya.papa - 22 Dec, 2025
如何使用 N8N 搭配 Google Drive + RAG 建立屬於企業自己的 Line 客服 AI 機器人
最近看了許多文章、影片,都在探討 RAG 的應用,所以研究了一下 N8N 如何建立自己的 RAG 系統, 並且結合 Line 來打造一個客服 AI 機器人,這篇文章就來分享一下整個流程和步驟。 由於 AI 領域的更新,可能是以天或者甚至以小時為單位在變化,參考了很多影片後,會發現不一定時做得出來你想要的需求 總共會使用到的服務有 N8N、Line OA、Gemini AI、Pinecone、Google Drive,這些服務大部分都有免費額度可以使用 建立 Line 帳號 首先進入到 Line OA 管理後台,建立自己一個新的官方帳號 Line OA 管理取得 Channel Access Token 和 Webhook 以及點擊下方的 LINE Developers Console 可以找到 Channel Secret 這 3 個資訊在後續 N8N 的設定中會用到。RAG 介紹RAG (Retrieval-Augmented Generation) 是一種結合檢索和生成的技術,主要用於提升自然語言處理模型的性能。 在大語言模型中經常會出現「幻覺」(Hallucination) 的問題,RAG 透過引入外部知識庫來減少這種現象。 主要分成三個部分:檢索 (Retrieval):從外部知識庫中檢索相關資訊,這些資訊可以是文件、文章、數據等。 增強 (Augmentation):將檢索到的資訊與輸入的查詢結合起來,形成一個更豐富的上下文。 生成 (Generation):使用自然語言生成模型來產生回答。RAG 與 生成式 AI (Generative AI) 的主要區別於 RAG 透過資料庫中的資訊來輔助回答問題, 而生成式 AI (例如 GPT 等)則主要依賴於模型本身的訓練數據來產生內容,但不一定保證內容正確性 N8N 設定 這次總共會使用到兩個 Flow,一個是用來建立 RAG 的流程,另外一個是用來處理 Line 的訊息, RAG Flow 將資料切片放入 Pinecone主要是將資料放於 Google Drive 透過 N8N 裡面的 Google drive 節點來讀取檔案內容,接下來就要使用 Pinecone 來建立向量資料庫申請 Pinecone 帳號 建立一個 Index,選擇一個 model 作為向量模型根據圖中拉取 Search files and folders 節點來讀取 Google Drive 的檔案 Download file 節點來下載檔案內容 Pinecone Vector Store 節點來將檔案內容上傳至 Pinecone 向量資料庫 建立 Pinecone Credential,輸入 API Key 和 Environment Pinecone Index 選擇剛剛在 Pinecone 建立的 IndexEmbedding Model 選擇 Google Gemini EmbeddingsData Loader下方要加上一個 Recursive Character Text Splitter 這邊就是要選擇要切割的方式,可以根據文件的特性來選擇適合的切割器,以及大小執行後就會將 Google Drive 裡面的檔案內容上傳至 Pinecone 向量資料庫整合 Line & AI & RAG FlowWebhook 節點,設定 Method 為 POST,這邊的網址就是要放在 Line OA 裡的 Messaging API Webhook URL 裡面 AI Agent 節點,設定主要的 System Prompt,這邊可以根據自己的需求來設定AI Agent 下方的 Chat model 我是選用 OpenRouter Chat Model 中的 Gemini-2.0-flash-001 AI Agent 的 Tools 下要新增一個 Pinecone Vector Store,這邊要設定剛剛建立的 Pinecone Credential 以及 Index下方的 Embedding Model 也是選用 Google Gemini Embeddings 最後一個節點是 Line 節點,這邊要設定剛剛取得的 Channel Access Token 和 Channel Secret URL : https://api.line.me/v2/bot/message/reply Method : POST Generic Auth Type : Bearer Token Send Body Body Content Type : JSON Body Parameters : replyToken :{ "replyToken":"{{ $('Webhook').item.json.body.events[0].replyToken }}", "messages":[ { "type":"text", "text": {{ JSON.stringify($json.output) }} } ] }