[n8n] 全文檢索(FTS)集成 | Mermaid圖表生成

第5章:全文檢索(FTS)集成

在前一章中,我們構建了REST API服務作為數據訪問入口。

本章將介紹全文檢索(FTS)集成,它如同智能搜索引擎,為工作流系統提供高效靈活的檢索能力。

核心架構

前文傳送:

技術選型

  • SQLite FTS5:輕量級全文檢索引擎
  • 虛擬表技術:創建專用索引表workflows_fts
  • 自動同步機制:通過觸發器保持數據一致性

功能特性

特性實現原理應用場景示例
模糊匹配通配符查詢(term*)輸入"auto"匹配"automation"
多字段聯合檢索索引name/description等字段在名稱和描述中搜索關鍵詞
結果相關性排序BM25算法計算匹配度更相關的結果排在前面
實時同步INSERT/DELETE/UPDATE觸發器數據變更后立即生效

實現細節

1. FTS表創建

-- 創建虛擬表用于全文檢索
CREATE VIRTUAL TABLE workflows_fts USING fts5(filename UNINDEXED,    -- 僅存儲不索引name,                  -- 工作流名稱description,           -- 描述文本integrations,          -- 集成服務列表tags,                  -- 標簽組content='workflows',   -- 關聯主表content_rowid='id'      -- 關聯字段
);

2. 自動同步觸發器

-- 新增數據同步
CREATE TRIGGER workflows_ai AFTER INSERT ON workflows BEGININSERT INTO workflows_fts(rowid, name, description, integrations, tags)VALUES (new.id, new.name, new.description, new.integrations, new.tags);
END;-- 刪除數據同步
CREATE TRIGGER workflows_ad AFTER DELETE ON workflows BEGINDELETE FROM workflows_fts WHERE rowid = old.id;
END;

3. 檢索邏輯優化

def build_fts_query(raw_query: str) -> str:"""構造FTS查詢語句"""terms = [f"{term.strip()}*" for term in raw_query.split() if term.strip()]return " AND ".join(terms)  # 轉換為"term1* AND term2*"格式

接口增強

1. 搜索端點升級

app.get('/api/workflows', async (req, res) => {const { q, trigger, page = 1 } = req.query;// 構造FTS查詢條件const ftsCondition = q ? `AND rowid IN (SELECT rowid FROM workflows_fts WHERE workflows_fts MATCH '${buildFTSQuery(q)}'ORDER BY rank)` : '';const results = await db.query(`SELECT * FROM workflowsWHERE 1=1 ${ftsCondition}LIMIT 20 OFFSET ${(page-1)*20}`);res.json(results);
});

2. 結果排序優化

-- 按相關性排序的查詢示例
SELECT w.* 
FROM workflows w
JOIN workflows_fts fts ON w.id = fts.rowid
WHERE workflows_fts MATCH 'email* automation*'
ORDER BY rank;

性能對比

檢索方式10萬條數據平均耗時支持特性
傳統LIKE查詢1200ms基礎模糊匹配
FTS5檢索35ms模糊匹配+相關性排序

總結

全文檢索集成通過:

  1. 專用索引表實現毫秒級響應
  2. 智能的模糊匹配算法
  3. 自動化的數據同步
  4. 精準的相關性排序

為工作流管理系統提供專業級搜索體驗。下一章將介紹可視化功能:Mermaid圖表生成


第6章:Mermaid圖表生成

在前一章中,我們實現了全文檢索功能。本章將介紹Mermaid圖表生成功能,它如同智能繪圖儀,將復雜的工作流JSON轉換為可視化流程圖。

核心架構

技術選型

  • Mermaid.js:基于文本的圖表生成庫
  • 語法轉換引擎:將n8n節點轉換為Mermaid語法
  • 響應式渲染:支持實時預覽和動態更新

功能特性

特性實現原理應用場景
自動布局基于graph TD的拓撲排序避免手動調整節點位置
智能標簽融合節點名稱和類型快速識別節點功能
多級連接解析connections嵌套結構準確呈現復雜工作流
錯誤容忍自動跳過無效節點保證生成過程穩定性

實現細節

1. 核心轉換函數

function generateMermaidDiagram(nodes, connections) {let diagram = 'graph TD\n';// 節點生成nodes.forEach(node => {const safeId = node.id.replace(/[^a-zA-Z0-9]/g, '_');diagram += `    ${safeId}["${node.name}\\n(${node.type})"]\n`;});// 連接生成Object.entries(connections).forEach(([source, outputs]) => {outputs.forEach(output => {output.forEach(conn => {diagram += `    ${source} --> ${conn.node}\n`;});});});return diagram;
}

2. 端點實現

app.get('/api/workflows/:id/diagram', async (req, res) => {const workflow = await db.getWorkflow(req.params.id);if (!workflow) return res.status(404).send('Workflow not found');const diagram = generateMermaidDiagram(workflow.nodes,workflow.connections);res.json({ diagram });
});

3. 安全處理

function sanitizeMermaidText(text) {return text.replace(/</g, '&lt;')  // 防XSS.replace(/>/g, '&gt;').replace(/"/g, '&quot;');
}

使用示例

請求示例

curl http://localhost:8000/api/workflows/order_processing/diagram

響應示例

{"diagram": "graph TD\n    Webhook[\"訂單Webhook\\n(webhook)\"]\n    Validate[\"驗證數據\\n(function)\"]\n    DB[\"寫入數據庫\\n(postgres)\"]\n    Webhook --> Validate\n    Validate --> DB"
}

渲染效果

性能優化

  1. 緩存機制:對已生成的圖表進行MD5緩存
  2. 批量處理:支持多個工作流同時轉換
  3. 懶加載:僅在請求時生成圖表
  4. 增量更新:監聽工作流變更事件

總結

Mermaid圖表生成通過:

  1. 自動化轉換技術
  2. 清晰的視覺呈現
  3. 標準化的輸出格式
  4. 便捷的集成方式

為工作流管理系統提供了強大的可視化能力。本系列教程至此已完成全部核心功能的講解

END ★,°:.☆( ̄▽ ̄)/.°★* 。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/94858.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/94858.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/94858.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

用戶模式與內核模式:操作系統的“權限雙軌制”

要理解用戶模式與內核模式&#xff0c;首先需要明確一個核心概念——進程&#xff08;Process&#xff09;。我們日常用C語言編譯生成的.exe文件&#xff0c;本質是“存儲在磁盤上的靜態程序”&#xff1b;當它被加載到內存并開始運行時&#xff0c;就轉化為“動態活動的進程”…

探索 Vertex AI 與 Elasticsearch

作者&#xff1a;來自 Elastic Jhon Guzmn 了解如何將 Vertex AI 與 Elasticsearch 集成來創建 RAG 應用。按照本教程配置一個 Gemini 模型并在 Kibana 的 Playground 中使用它。 更多閱讀&#xff1a; Elasticsearch&#xff1a;在 Elastic 中玩轉 DeepSeek R1 來實現 RAG …

[新啟航]白光干涉儀在微透鏡陣列微觀 3D 輪廓測量中的應用解析

引言微透鏡陣列作為由數百至數千個微米級透鏡單元組成的光學元件&#xff0c;在成像系統、光通信、傳感器等領域應用廣泛&#xff0c;其表面微觀 3D 輪廓參數&#xff08;如曲率半徑、面型誤差、中心厚度等&#xff09;直接影響光學性能。白光干涉儀憑借非接觸、高精度、三維成…

MTK Linux DRM分析(十四)- Mediatek KMS實現mtk_drm_drv.c(Part.2)

一、MTK KMS分析 mtk_drm_kms_init 函數分析 mtk_drm_kms_init 是 MediaTek DRM 驅動程序中的一個靜態函數(static int mtk_drm_kms_init(struct drm_device *drm)),位于 mtk_drm_drv.c 文件中。該函數的主要作用是初始化 DRM 設備的 Kernel Mode Setting (KMS) 子系統,包…

大模型RAG(Retrieval-Augmented Generation)

RAG檢索增強生成 一種結合了檢索與生成能力的人工智能技術&#xff0c;主要用于增強大型語言模型在特定任務中的表現。 含義 RAG 將檢索系統與生成模型相結合&#xff0c;當接收到一個查詢或問題時&#xff0c;模型首先通過檢索模塊從大規模知識庫中尋找與查詢相關的信息片段&a…

企業版Idea 無快捷鍵的啟動方式

在沒有快捷鍵的情況下啟動 IntelliJ IDEA 企業版&#xff0c;可以通過以下幾種方式進行操作&#xff1a; 1. 通過應用程序菜單啟動&#xff08;適用于 macOS&#xff09; 在 macOS 系統中&#xff0c;可以打開 Launchpad&#xff0c;在應用程序列表中找到 IntelliJ IDEA&#x…

智慧清潔革命:有鹿機器人如何重塑三大行業未來

作為有鹿智能巡掃機器人&#xff0c;每天清晨當城市還未蘇醒&#xff0c;我已悄然完成數萬平方米的清潔工作。搭載254TOPS算力的具身智能大腦&#xff0c;我正重新定義保潔、環衛和物業行業的清潔標準。技術賦能&#xff1a;智慧清潔的全面突破我搭載的Master2000通用具身大腦和…

安寶特方案丨AR異地專家遠程支持平臺,適合:機電運維、應急處置、監造驗收

隨著車間設備智能化程度的不斷提高&#xff0c;其復雜性越來越高&#xff0c;故障維修難度越來越大&#xff0c;嚴重依賴設備原廠的技術支持和上門服務。但設備廠家受制于地理遠近和專業人才數量的限制&#xff0c;服務的及時性和服務質量均很難保證。鑒于市場現有的通信聊天軟…

QT應用層項目20250822

01.服務器端代碼1.dbhelper.cpp#include "dbhelper.h" #include <iostream> #include <cstring>using std::string; using std::cerr; using std::cout; using std::endl;template <typename T> std::vector<T>& operator<<(std::…

【Linux】Linux基礎開發工具從入門到實踐

前言&#xff1a;學了Linux的指令&#xff0c;再就是Linux基礎開發工具&#xff0c;熟練掌握基礎開發工具是提升效率的關鍵。本文學習Linux的基礎開發工具&#xff0c;無論是軟件安裝、代碼編輯&#xff0c;還是編譯調試、版本控制&#xff0c;一套順手的工具鏈能讓你在開發路上…

黑馬點評|項目日記(day02)

目錄 一. 全局id生成器 1.為什么需要全局id生成器 2.傳統方式的缺陷: 3.典型全局 ID 生成方案的設計思路 二.優惠券秒殺-Redis實現全局唯一id 三.優惠券秒殺-添加優惠券 四.優惠券秒殺-實現秒殺下單 五. 一人一單問題 1.單體項目下 1,超賣問題思路分析 2.樂觀鎖解決問…

shell腳本編程規范與變量

文章目錄Shell編程文檔整理一、Shell介紹1.1 簡介1.2 Shell解釋器二、快速入門2.1 編寫Shell腳本2.1.1 創建腳本示例2.1.2 賦予執行權限2.2 執行Shell腳本三、Shell程序&#xff1a;變量3.1 語法格式3.2 變量使用3.3 變量類型四、字符串4.1 單引號4.2 雙引號4.3 獲取字符串長度…

【AGI使用教程】Coze 搭建智能體(1)

歡迎關注【AGI使用教程】 專欄 【AGI使用教程】GPT-OSS 本地部署&#xff08;1&#xff09; 【AGI使用教程】GPT-OSS 本地部署&#xff08;2&#xff09; 【AGI使用教程】Coze 搭建智能體&#xff08;1&#xff09; 【AGI使用教程】Coze 搭建智能體&#xff08;2&#xff09; 【…

(二分查找)Leetcode34. 在排序數組中查找元素的第一個和最后一個位置+74. 搜索二維矩陣

首先要明確二分查找算法如何實現&#xff0c;是采用左閉右閉還是左閉右開 左閉右閉 第?種寫法&#xff0c;我們定義 target 是在?個在左閉右閉的區間?&#xff0c;也就是[left, right] &#xff08;這個很重要?常重要&#xff09;。 區間的定義這就決定了?分法的代碼應…

損失函數,及其優化方法

什么是損失函數&#xff1f;損失函數&#xff0c;也稱為代價函數&#xff0c;是一個用來??衡量機器學習模型預測結果與真實值之間差距??的函數。損失函數的優化方法有哪些&#xff0c;各自優缺點是什么&#xff0c;他們的應用范圍是什么&#xff1f;方法類別代表算法核心思…

pyqt+Python證件號智能校驗工具

目錄 一、引言 二、GUI界面設計 1.相關提示 2.效果演示 3.界面設計.py 三、主要程序詳解 1.導入相關模塊 2.初始化設置 3.校驗過程 四、總程序代碼 一、引言 在數字化轉型加速的背景下&#xff0c;證件信息核驗已成為金融、政務、安防等領域的剛需。傳統人工校驗存在…

主流技術棧 NestJS、TypeScript、Node.js版本使用統計

&#x1f4ca; 2024年主流技術棧版本使用統計&#x1f527; TypeScript 采用情況全球采用率: 38.5% 的開發者使用 TypeScript&#xff08;Stack Overflow 2024&#xff09;增長趨勢: 從 2017年的 12% 增長到 2024年的 35%&#xff08;JetBrains 調研&#xff09;TypeScript vs …

Techub News 與 TOKENPOST 達成戰略合作以推動中韓 Web3 資訊互通

Techub News 消息&#xff0c;香港 Web3 媒體 Techub News 與韓國區塊鏈媒體 TOKENPOST 達成戰略合作。TOKENPOST 將開設香港內容板塊&#xff0c;由 Techub News 提供本地化行業資訊&#xff1b;同時 Techub News 將推出韓國內容專欄&#xff0c;內容源由 TOKENPOST 支持。這一…

Java面試實戰系列【JVM篇】- JVM內存結構與運行時數據區詳解(私有區域)

文章目錄一、前言1.1 什么是JVM內存結構1.2 JVM內存結構與Java內存模型的區別1.3 為什么面試官愛問JVM內存結構二、JVM運行時數據區總覽2.1 運行時數據區域劃分2.2 線程私有區域 vs 線程共享區域三、線程私有區域詳解3.1 程序計數器&#xff08;PC Register&#xff09;3.1.1 定…

鴻蒙中使用極光推送

官方給出的步驟是對的&#xff0c;就是一時不知道從何下手&#xff0c;自己整了下&#xff0c;按照這個來就行 1.步驟 打開 APP 通知功能 1.先按照這個頁面進行配置SDK 集成指南 - 極光文檔&#xff0c;主要就是下載極光sdk&#xff0c;然后在AGC里開通推送服務&#xff0c;配…