博客 / 詳情

返回

工作流引擎技術方案<初版>

現流行AI工作流引擎技術方案與實現方式調研

n8n

前端技術棧

  1. 核心流程圖庫:Vue Flow
  2. 圖形佈局引擎:Dagre
  3. 拖拽功能:Vuedraggable

    n8n 的流程圖繪製技術棧是:

    Vue Flow(核心) + Dagre(佈局) + Vuedraggable(拖拽) + Vue 3 Composition API(架構)

後端技術棧

後端代碼模塊化梳理:https://www.processon.com/v/685b72107dbaf842a9ee9b54?cid=685b...

數據庫梳理:https://www.processon.com/v/685ba3a83a444c5346fb296c?cid=685b...

核心組件:

  • WorkflowService:流程 CRUD 操作
  • ActiveWorkflowManager:流程激活/停用管理
  • WorkflowRunner:流程執行管理
  • NodeTypes:節點類型管理

數據庫支持:

  • SQLite(開發環境)
  • PostgreSQL(生產環境推薦)
  • MySQL/MariaDB(生產環境支持)

技術特點:

  • 基於 TypeORM 的 ORM 框架
  • Repository 模式數據訪問
  • 事件驅動的架構設計
  • 依賴注入的模塊化設計
  • 事務管理確保數據一致性

n8n與BPMN引擎對比

Dify

前端技術棧

後端技術棧

後端代碼模塊梳理:https://www.processon.com/v/685b966e74aa236c0c49b6b1?cid=685b...

核心需求分析

  1. 可視化流程繪製界面 (Frontend):用户能夠通過拖拽節點、連接線、配置節點屬性來設計工作流程。
  2. 流程定義與存儲 (Backend/Persistence):將繪製的流程圖轉化為可執行的定義(如JSON、XML或DSL),並持久化存儲。
  3. 流程引擎 (Backend Core):能夠解析流程定義,驅動流程實例的執行,管理流程狀態、任務分配、條件判斷、併發、循環等複雜邏輯。
  4. 任務執行與集成 (Backend/Integration):流程中的節點能夠觸發具體的業務邏輯,例如:

    • 調用知識庫的API(查詢、創建、更新知識)
    • 觸發外部服務(發送通知、調用其他微服務)
    • 執行自定義代碼片段
    • 涉及人工審批/任務
  5. 流程實例管理與監控 (Backend/Frontend):能夠查看流程實例的運行狀態、歷史記錄、異常信息。
  6. 用户和權限管理:與Spring Boot知識庫系統的用户體系集成。

技術選型方案

1. 前端可視化流程繪製(核心難點之一)

這是實現“繪製”功能的關鍵,需要一個強大的流程圖庫。

  • 推薦方案:基於成熟的圖繪製庫 + 自定義開發

    • bpmn.js / dmn.js / cmmn-js (Camunda生態): 如果你後端計劃使用Camunda或Flowable,那麼前端直接使用它們的配套庫是最自然的選擇。它們提供了非常專業的BPMN 2.0、DMN、CMMN繪圖能力,功能強大且符合標準。

      • 優點:高度專業,功能完善,符合行業標準,與後端Camunda/Flowable無縫集成。
      • 缺點:學習曲線可能較陡峭,主要圍繞BPMN標準,如果你的流程並非嚴格的BPMN,可能需要自定義擴展。
    • GoJS / JointJS / mxGraph (draw.io): 強大的通用圖形庫,提供了豐富的功能(拖拽、連線、節點、縮放等)。你需要在此基礎上自行構建流程節點、屬性面板和交互邏輯。

      • 優點:高度靈活,可定製性強,不綁定特定後端或標準。
      • 缺點:開發量大,需要從零開始設計節點類型、屬性配置、數據結構與後端流程定義的映射關係。
    • X6 (AntV / G6): 阿里巴巴AntV團隊的圖可視化引擎,專注於流程圖、腦圖、拓撲圖等。提供了豐富的組件和交互。

      • 優點:國產,社區活躍,文檔豐富,性能良好,更適合國內開發習慣。
      • 缺點:仍需大量自定義開發以實現流程編排的特定功能。
    • ProFlow (Ant Design Pro): 如果你的前端使用React和Ant Design,ProFlow提供了一個開箱即用的流程圖組件,可以大大減少開發量。

      • 優點:基於React,快速構建,與Ant Design生態集成。
      • 缺點:通用性不如GoJS等,可能在深度定製上有限制。
  • 數據格式選擇:前端繪製的流程圖需要轉換為後端能夠識別和執行的數據格式。

    • BPMN XML:如果使用Camunda/Flowable,這是標準格式。
    • JSON Schema:自定義的JSON結構,可以靈活定義節點類型、屬性和連接關係,適合自研或簡化流程模型。Dify和n8n很可能使用自定義的JSON格式。
2. 後端流程引擎(核心驅動力)

這是實現“編排”和“自動化”效果的核心。Spring Boot應用需要集成一個流程引擎來管理流程的生命週期。

  • 推薦方案1:嵌入式BPMN引擎 (Camunda / Flowable)

    • Camunda BPM:

      • 優點:

        • 成熟穩定:企業級,功能強大,經過廣泛驗證。
        • 標準支持:原生支持BPMN 2.0、CMMN、DMN,符合行業標準。
        • 易於集成Spring Boot:Camunda提供了camunda-bpm-spring-boot-starter,可以非常方便地將流程引擎嵌入到Spring Boot應用中,自動配置數據源、REST API等。
        • 可視化工具:配套的Camunda Modeler和Web Apps(Cockpit, Tasklist)提供強大的管理和監控能力。
        • 活躍社區與文檔:豐富的資料和社區支持。
      • 缺點:可能略重,如果你的流程非常簡單,BPMN標準可能顯得有些複雜。但考慮到要實現“複雜流程”和“自動化”,它的強大是值得的。
      • 實現思路:

        1. 在Maven/Gradle中引入Camunda Spring Boot Starter依賴。
        2. 流程定義文件(.bpmn)放在src/main/resources/processes目錄下。
        3. 通過RuntimeService, TaskService等Camunda API與流程進行交互。
        4. 實現JavaDelegate來執行業務邏輯(如調用知識庫服務)。
        5. 前端使用bpmn.js進行繪製,然後將BPMN XML提交給Spring Boot後端進行部署。
    • Flowable:

      • 優點:與Camunda類似,都是Activiti的分支,輕量級,性能好,也很好地支持Spring Boot集成。在某些方面可能比Camunda更輕量級一些。
      • 缺點:功能上略遜於Camunda,但對多數場景已足夠。
      • 實現思路:與Camunda類似。
  • 推薦方案2:自研輕量級引擎 (JSON/DSL解析)

    • 優點:

      • 極致靈活:完全按照自己的需求定義流程模型和執行邏輯。
      • 輕量級:只包含你需要的功能,沒有額外負擔。
    • 缺點:

      • 開發量巨大:需要自行實現狀態機、任務調度、事件處理、併發控制、錯誤重試、持久化、版本管理等核心功能,難度極高,且容易出現bug。
      • 缺乏標準與生態:沒有成熟的可視化工具和通用集成方案。
      • 維護成本高:需要長期投入維護和功能迭代。
    • 適合場景:除非你的流程需求非常特殊且簡單,或者你有足夠的開發資源和時間,否則不推薦自研核心引擎。Dify和n8n雖然是“自研”,但它們是專門為此而生的產品,投入了大量精力。
  • 推薦方案3:混合模式 (適用於AI原生流程)

    • 核心邏輯:使用Spring Boot業務邏輯處理,將複雜決策和AI能力通過OpenAPI/REST API暴露。
    • 流程編排:使用一個更高級的編排器來調用這些API。

      • Dify (如果可以嵌入或作為獨立服務): 如果Dify的後端服務可以作為獨立組件運行並通過API與你的知識庫系統交互,那麼可以考慮使用它來專門處理AI相關的流程。
      • LangChain / Semantic Kernel: 如果流程更多是基於LLM的Agentic工作流,可以在Spring Boot中集成LangChain4j (Java版本) 或Semantic Kernel (Java版本)。它們提供了Agent、工具調用、RAG等能力,可以用來構建AI驅動的複雜邏輯。

        • 優點:深度融合AI能力,構建Agentic工作流更方便。
        • 缺點:不適用於傳統的業務流程(如審批、定時任務),更側重於LLM的編排。

我的建議:對於Spring Boot集成和實現類似“釘釘流程自動化”的通用流程編排,強烈推薦使用 Camunda BPM 作為後端流程引擎。

3. 數據持久化
  • 選擇:流程引擎通常需要數據庫來存儲流程定義、流程實例狀態、歷史數據、任務信息等。
  • Camunda/Flowable:支持主流關係型數據庫,如 MySQL, PostgreSQL, Oracle, SQL Server。你可以直接使用知識庫系統已有的數據庫,或者為流程引擎單獨配置一個數據庫。
4. 與Spring Boot知識庫系統集成
  • Service Tasks / Delegates:在BPMN流程中,你可以定義“服務任務”(Service Task),它會調用Spring Boot應用中的Java類(實現JavaDelegate接口)。在這些Delegate中,你可以注入Spring Bean,直接調用知識庫系統的Service層或Repository層,執行:

    • 知識的創建、查詢、更新、刪除。
    • 用户權限判斷。
    • 發送通知(郵件、短信、釘釘Webhook)。
    • 調用外部API。
  • User Tasks / 任務管理:對於需要人工處理的任務(如知識審批),流程引擎會創建“用户任務”(User Task)。

    • 前端展示:你需要開發一個前端頁面來查詢並展示用户的待辦任務列表,以及任務詳情和處理表單。
    • 後端API:Spring Boot提供API供前端查詢任務(通過Camunda REST API或自定義Service),處理任務(完成、駁回等)。
  • 事件監聽器:流程引擎提供了豐富的事件(如流程啓動、任務完成、流程結束等),你可以註冊監聽器,在這些事件發生時觸發知識庫系統的特定邏輯。
  • REST API:Camunda自帶一套REST API,可以直接通過HTTP請求啓動流程、查詢任務、完成任務等。你的Spring Boot Controller可以直接調用這些API,或者封裝自己的業務API來調用Camunda服務。
5. 部署與擴展性
  • 單體應用:最簡單的部署方式,流程引擎和知識庫系統打包在一個Spring Boot Jar中。
  • 微服務:如果你的知識庫系統已經是微服務架構,可以將流程引擎作為一個獨立的微服務(workflow-service),通過HTTP/消息隊列與知識庫的其他微服務交互。這種情況下,Spring Boot集成Camunda也是非常合適的。

    • Camunda 8 (Zeebe):如果你對雲原生、高吞吐量、事件驅動的微服務編排有需求,可以考慮Camunda 8 (Zeebe)。它是一個獨立的、可擴展的微服務,通過gRPC與客户端交互。但這會引入額外的運維複雜性。

實施步驟概要

  1. 確定前端技術棧:根據你的前端框架(React, Vue, Angular)和對BPMN標準遵守程度的考量,選擇合適的繪圖庫(如bpmn.jsX6+自定義)。
  2. 集成後端流程引擎:

    • 在Spring Boot項目中添加Camunda BPM Spring Boot Starter依賴。
    • 配置數據庫連接。
    • 創建一個簡單的BPMN流程(例如,一個知識審批流程:發起 -> 審批 -> 發佈/駁回)。
  3. 設計流程與業務邏輯映射:

    • 將知識庫中的具體業務操作映射為BPMN中的服務任務。
    • 為人工審批等操作設計用户任務。
  4. 實現JavaDelegate和Service:

    • 編寫JavaDelegate類,在其中注入知識庫的業務Service,執行CRUD操作、調用通知服務等。
    • 編寫Controller/Service層,封裝啓動流程、查詢待辦、完成任務的API。
  5. 構建前端界面:

    • 流程設計器:集成前端繪圖庫,實現流程的繪製、保存(將BPMN XML提交給後端)。
    • 流程列表/詳情:展示已部署的流程定義。
    • 待辦任務列表:查詢並展示當前用户的待辦任務。
    • 任務處理表單:根據任務類型動態生成表單,供用户完成任務。
    • 流程實例監控:展示正在運行的流程實例及其當前狀態、歷史。
  6. 測試與部署:全面測試流程的各個環節,確保業務邏輯和流程執行的正確性。
user avatar rc5uf6xy 頭像 shenge 頭像 mysteryjack 頭像
3 位用戶收藏了這個故事!

發佈 評論

Some HTML is okay.