大模型應用編排工具Dify之插件探索

1.前言

? dify 1.x版本以后插件功能豐富了很多,推出的插件市場上有各式各樣的插件,比如 連接數據庫、連接大模型、搜索和 mcp服務等。其中,有一個比較大的改動,模型供應商不再內置,而是通過插件的形式提供。因此,如果是內網離線部署,則必須提前準備好插件的安裝包。

接下來,本文將從部署的角度對 dify的插件體系進行分析,總結項目落地時的經驗。

環境信息

? Dify-1.1.3, Dokcer-26, CentOS-7.9

2.插件原理分析

2.1 插件運行環境

聯網安裝插件十分簡單,打開插件市場,點擊安裝即可。

通過對比,發現 1.1.3版本的 dify比 0.8.3版本多了一個容器:docker-plugin_daemon

在線安裝插件時,查看 docker-plugin_daemon容器的日志發現會去下載很多依賴文件,因此插件的運行環境就是由這個容器提供和進行管理。

2.2 插件安裝文件

觀察到/app/storage/cwd/目錄存放著插件安裝后生成的文件,按提供廠商進行組織。

進入 docker-plugin_daemon-1容器的 /app/storage/cwd/langgenius/openai_api_compatible..目錄,可以看到下面的內容:

total 44
drwxrwxrwx 7 root root 4096 Apr 8 07:35 ./
drwxrwxrwx 15 root root 4096 Aug 12 09:04 …/
drwxrwxrwx 6 root root 4096 Apr 8 07:35 .venv/
-rwxrwxrwx 1 root root 574 Apr 8 07:31 README.md*
drwxrwxrwx 2 root root 4096 Apr 8 07:35 pycache/
drwxrwxrwx 2 root root 4096 Apr 8 07:31 _assets/
-rwxrwxrwx 1 root root 125 Apr 8 07:31 main.py*
-rwxrwxrwx 1 root root 664 Apr 8 07:31 manifest.yaml*
drwxrwxrwx 8 root root 4096 Apr 8 07:35 models/
drwxrwxrwx 3 root root 4096 Apr 8 07:35 provider/
-rwxrwxrwx 1 root root 37 Apr 8 07:31 requirements.txt*

上面內容來自插件:openai_api_compatible,這里面有兩個內容需要關注:

  • venv

    這個目錄存放的是運行該插件需要的 python虛擬環境,依賴的第三方包會在安裝插件下載到該虛擬環境。

    這樣設計使得每個插件都擁有單獨的依賴環境,能夠有效避免依賴包沖突。

  • requirements.txt

    這里面記錄了依賴的 python第三方包清單。

? 通過觀察插件安裝完成后生成的文件,可以知道插件的運行需要 python環境,在安裝時會為每個插件生成一個虛擬 python環境,各個插件依賴環境獨立,互不影響。

3.制作插件安裝包

3.1 官方途徑

? 通過官方插件市場下載的插件安裝包為 difypkg格式,是一個二進制文件,通常只有幾百kb。經過實測,在離線環境下安裝依然會聯網下載 python相關依賴,故此種方式無法實現真正的離線安裝插件

? 這個包比較小,并不是完整的安裝包,猜測應該是只有插件的依賴信息,比如 requirements.txt里包含的內容,在安裝插件時才會去下載依賴的第三方包。

3.2 第三方

官網途徑暫時走不通,發現有一個開源項目可以制作完整的插件安裝包,名字叫做:dify-plugin-repackaging。

下面是實操后,總結的步驟:

  1. 準備打包環境

    一臺能聯網、有 docker的 centos7.x服務器(虛擬機)。

  2. 下載項目源碼

    上傳源碼到打包環境并解壓

  3. 編譯打包項目為 docker鏡像

    進到解壓后的目錄執行下面的命令:

    docker build -t dify-plugin-repackaging .
    
  4. 獲取待制作插件的名稱、公司名和版本號

    打開 dify插件市場,搜索要制作的插件,按下面的方式獲取相關信息:

    在這里插入圖片描述

  5. 制作插件完整安裝包

    這里以 JSON 處理插件為例,使用下面的命令制作插件:

    docker run -v $(pwd):/app dify-plugin-repackaging ./plugin_repackaging.sh -p manylinux_2_17_x86_64 market langgenius json_process 0.0.2
    

    上面的命令中 langgenius是公司名json_process是插件英文名0.0.2是版本號

    制作成功后,會出現下面1個目錄和2個文件:

    在這里插入圖片描述

    其中這個 17M的文件 langgenius-json_process_0.0.2-offline.difypkg就是完整的插件安裝包。

4.離線安裝插件

經過第3步制作完成的安裝包無法直接安裝,需要調整 dify配置,并重啟對應服務。

具體步驟如下:

  1. 修改 env中的配置

    cd dify-1.1.3/docker
    cp .env.example .env
    vim .env# 修改下面的參數
    FORCE_VERIFYING_SIGNATURE=false
    PLUGIN_MAX_PACKAGE_SIZE=524288000
    NGINX_CLIENT_MAX_BODY_SIZE=1024M
    

    這里主要目的是放寬 nginx對于上傳安裝包的大小限制,否則會出現下面的 nginx報錯:

    413 Request Entity Too Large

  2. 重啟 dify服務

    docker compose down
    docker compose up -d
    
  3. 使用本地插件功能離線安裝插件

    如下,按照提示上傳剛剛制作好的插件包即可:

    在這里插入圖片描述

5.總結

? 本文主要從部署的角度分析了 1.1.3版本的 dify插件安裝包制作、文件組織方式和運行環境,這里有一個良好的設計值得我們借鑒:為每個插件單獨準備一個 python虛擬環境,各個插件之間互不影響。同時,也得吐槽下官方下載的插件包無法直接離線部署。

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

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

相關文章

ubuntu2204安裝搜狗拼音輸入法

安裝必要的軟件包 sudo apt update sudo apt install fcitx5 fcitx5-chinese-addons fcitx5-config-qt fcitx5-configtool -y安裝搜狗拼音 下載最新 .deb 包(官方地址:https://pinyin.sogou.com/linux/),安裝: sudo dp…

三,設計模式-抽象工廠模式

目的 在 工廠模式 中,當需要創建新的產品時,則額外需要創建新的工廠,這種模式是對產品制造方法的抽象化,如果產品種類變多,則工廠數目變多,則代碼規模會越來越大,且不同的產品類的生成依賴不同…

Vue3響應式編程核心:ref與reactive全方位對比

在Vue3的Composition API中,ref和reactive是構建響應式數據的核心工具。許多開發者對它們的選擇存在困惑:何時用ref的.value?何時用reactive的直接訪問?為何解構會丟失響應性?本文從原理、場景到實戰陷阱,為…

Redis實戰-緩存的解決方案(一)

1.什么是緩存緩存就是數據交換的緩存區,是存儲數據的臨時區域,讀寫性能高。瀏覽器會有緩存,tomcat服務器也會有緩存,數據庫也會有緩存,CPU也會有緩存,磁盤也會有緩存,所以說緩存是無處不在的并且…

CI/CD企業案例詳解

7.持續集成持續交付企業示例 為了讓容器構建鏡像可以持續集成并自動上傳到harbor倉庫,業務主機通過持續交付自動從倉庫中下載鏡像最近版本并實現業務更新7.1 在jenkins中添加registry節點 7.1.1 在業務節點中安裝docker和java環境并配置其可以從倉庫中下載鏡像 # 新…

C++ 入門核心知識

一、C 課程概述與發展歷史1. 發展歷程:從 C 語言擴展到標準化C 的起源可追溯至 1979 年,由貝爾實驗室的 Bjarne Stroustrup 主導開發。當時他為解決大型項目開發中 C 語言在可維護性和擴展性上的不足,在 C 語言基礎上引入了面向對象編程特性。…

labelme數據標注保姆級教程:從安裝到格式轉換全流程,附常見問題避坑指南(含視頻講解)

引言:為什么選擇labelme? 在人工智能和機器學習領域,高質量的標注數據是訓練優秀模型的基礎。而 labelme作為一款開源、跨平臺的圖像標注工具,憑借其強大的功能和易用性,成為了數據標注領域的熱門選擇。 它支持多種標…

人工智能-python-深度學習-自動微分

自動微分:基礎概念與應用 自動微分(Autograd)是現代深度學習框架(如PyTorch、TensorFlow)中的一個核心功能。它通過構建計算圖并在計算圖上自動計算梯度,簡化了反向傳播算法的實現。以下是自動微分的基本概…

k8s原理及操作

簡介 kubernetes的本質是一組服務器集群,它可以在集群的每個節點上運行特定的程序,來對節點中的容器 進行管理。目的是實現資源管理的自動化,主要提供了如下的主要功能: 自我修復:一旦某一個容器崩潰,能夠在…

理解音頻響度:LUFS 標準及其計算實現

LUFS 及其重要性 1.1、什么是 LUFS? LUFS(Loudness Units relative to Full Scale)是音頻工程中用于測量感知響度的標準單位。它已成為廣播、流媒體和音樂制作領域的行業標準,用于確保不同音頻內容具有一致的響度水平。 LUFS 是 I…

【在ubuntu下使用vscode打開c++的make項目及編譯調試】

在ubuntu下使用vscode打開c的make項目及編譯調試第一步:安裝必要的軟件第二步:示例項目準備1. 創建C源文件: main.cpp2. 創建頭文件: utils.h3. 創建實現文件: utils.cpp第三步:使用 VS Code 打開項目第四步…

3-2.Python 函數 - None(None 概述、None 應用場景)

一、None 概述在 Python 中,None 是一個特殊的常量,用于表示空值或無值None 是 Python 中唯一的一個 NoneType 類型的實例二、None 應用場景 1、定義變量 None 常用于初始化變量,表示該變量暫時不需要有具體值 name Noneprint(name) print(t…

js獲取html元素并設置高度為100vh-鍵盤高度

獲取HTML元素并設置高度為(100vh - 鍵盤高度) 我將設計一個頁面,展示如何獲取HTML元素并動態設置其高度為視口高度減去鍵盤高度,這在移動設備上特別有用,可以避免鍵盤遮擋內容。 設計思路 創建一個帶有輸入框的界面,模擬鍵盤彈…

基于SpringBoot的校園博客管理系統

🔗 目錄 一. 前言 ??二. 前端框架、后端框架以及存儲框架使用情況說明 ??三. 核心技術 ????1. ?Java開發語言 ????2. ?MyBatis ????3. ?Mysql ????4. ?Vue ????5. ?部署項目 ??四. 演示效果 ????1. 管理員功能模塊 ??????…

Nginx + Certbot配置 HTTPS / SSL 證書

前提條件: 1.已有域名 2.Nginx 已安裝并正在運行,且有對應的 Server 配置 3.防火墻開放 80 和 443 端口 安裝 EPEL 倉庫: sudo yum install epel-release -y安裝 Snapd sudo yum install snapd -y啟用并啟動 Snapd Socket sudo systemctl ena…

圖結構使用 Louvain 社區檢測算法進行分組

圖結構使用 Louvain 社區檢測算法進行分組 flyfish Louvain 算法是一種基于模塊度最大化的社區檢測算法,核心目標是在復雜網絡中找到“內部連接緊密、外部連接稀疏”的社區結構。它的優勢在于高效性(可處理百萬級節點的大規模網絡)和近似最優…

layui.formSelects自定義多選組件在layer.open中使用、獲取、復現

layui.formSelects自定義多選組件在layer.open中使用、獲取、復現 引入css和js //<th:block th:include"include :: layui-formSelects-css"/> <link th:href"{/ajax/libs/layui-formSelects/formSelects-v4.css}" rel"stylesheet"/>…

基于SpringBoot的社團管理系統【2026最新】

作者&#xff1a;計算機學姐 開發技術&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等&#xff0c;“文末源碼”。 專欄推薦&#xff1a;前后端分離項目源碼、SpringBoot項目源碼、Vue項目源碼、SSM項目源碼、微信小程序源碼 精品專欄&#xff1a;…

運行node18報錯

又碰到一個奇葩的問題&#xff0c;報錯如下> tigermes.vue30.1.0 serve > vue-cli-service serveBrowserslist: caniuse-lite is outdated. Please run:npx update-browserslist-dblatestWhy you should do it regularly: https://github.com/browserslist/update-db#rea…

Python第三方庫IPFS-API使用詳解:構建去中心化應用的完整指南

目錄 Python第三方庫IPFS-API使用詳解&#xff1a;構建去中心化應用的完整指南 引言&#xff1a;IPFS與去中心化存儲的革命 星際文件系統&#xff08;IPFS&#xff0c;InterPlanetary File System&#xff09;是一種革命性的點對點超媒體協議&#xff0c;旨在創建持久且分布式的…