搭建 n8n LineBot RAG

功能介紹


n8n 是一款開源的工作流自動化工具,旨在幫助用戶通過可視化的方式設計和執行自動化流程,實現跨應用和服務的數據整合與操作。是一個功能強大且靈活的工作流自動化平台,適合個人和企業用戶用於提升效率和簡化業務流程。無論是簡單的數據同步,還是複雜的跨平台自動化,n8n 都能提供可靠的解決方案。

知識資料準備

flowchart TD

    subgraph A[知識資料準備]
        A1[知識資料來源]
        A3[ETL資料處理]
        A5[移除雜訊、標準化內容]
        A7[分類、標籤、時間戳]
        A8[存入資料庫]
        A9[存入向量資料庫]

        A1 -->|擷取數據| A3 -->|資料清理| A5 -->|資料標示| A7
        A7 -->|儲存結構化資料| A8
        A7 -->|轉換向量嵌入| A9
    end

RAG 查詢與生成

flowchart TD

    %% 開始
    A[使用者查詢]

    %% 區塊框線:RAG 查詢與生成
    subgraph RAG 查詢與生成

        %% 左路徑:向量查詢
        A -->|語意轉向量| B1[查詢向量庫]
        B1 -->|相似內容查詢| B2[返回最相似資料]

        %% 右路徑:結構化查詢
        A -->|結構化資料查詢| C1[查詢資料庫]
        C1 --> C2[返回資料庫查詢結果]

        %% 整合結果與傳送給 LLM
        B2 --> D[整合查詢結果]
        C2 --> D
        D --> E[傳送給 LLM 生成答案]

    end

    %% 結尾:回答使用者
    E -->|LLM 回應| F[回覆使用者]

簡單n8n 串接 LINE 教學

n8n 是一款強大的工作流自動化工具,能夠輕鬆串接 LINE 並實現多種自動化功能,例如發送通知、處理訊息或與其他應用整合。以下是串接 LINE 的詳細教學:

步驟 1:準備 LINE API 憑證

在串接 LINE 前,您需要取得 LINE 的 API 憑證。以下是準備步驟:

  1. 註冊 LINE Developers 帳戶:前往 LINE Developers 註冊帳戶。

  2. 建立 Channel: * 登入後,建立一個新的 Messaging API Channel。 * 記下 Channel ID、Channel Secret 和 Access Token,這些將用於 n8n 的認證設定。

  3. 設定 Webhook(可選):如果需要接收 LINE 的事件通知,需設定 Webhook URL,該 URL 可由 n8n 提供。

步驟 2:在 n8n 中新增 LINE 節點

N8N設定的畫面

Image 15 Image 15Image 16 Image 16 LINE Bot的設定畫面

Image 17 Image 17

步驟 3:在OpenAI建立好的客製化機器人

網址: https://platform.openai.com/playground/assistants

以下是了解我的書的內容的機器人,這個是Open AI的Agent功能,可以在這邊上傳檔案,讓這個機器人有RAG的資料庫可以回答專屬於自己的知識

Image 18 Image 18

步驟4:在n8n呼叫已經建立好的機器人

可以選擇下面這個節點來和已經建立好的機器人聊天

Image 19 Image 19 要注意的是,這個節點輸入的文字要是前一個節點的”chatInput”變數。所以要在前面新增一個Edit Fields的節點,來改變前一個節點的值的結構

選擇剛剛建立好的機器人

Image 20 Image 20

步驟5:回覆LINE訊息

因為原本n8n只有notify的元件,而這個元件即將要廢棄

因此我自己參考這邊的API格式來呼叫send line message

https://developers.line.biz/en/docs/messaging-api/sending-messages/#reply-messages

curl -v -X POST https://api.line.me/v2/bot/message/reply
-H ‘Content-Type: application/json’
-H ‘Authorization: Bearer {channel access token}’
-d ‘{ “replyToken”:“nHuyWiB7yP5Zw52FIkcQobQuGDXCTA”, “messages”:[ { “type”:“text”, “text”:“Hello, user” }, { “type”:“text”, “text”:“May I help you?” } ] }’

Image 21 Image 21Image 22 Image 22 這邊因為要避免OPENAI回傳一些會打亂JSON格式的特殊字元,因此要用JSON.stringify(…)把回傳的字串包起來

{ “replyToken”:"{{ $(‘If’).item.json.body.events[0].replyToken }}", “messages”:[{“type”:“text”,“text”:{{ JSON.stringify($json.output) }}}] }

完整的工作流

Image 23 Image 23Image 24 Image 24