初步嘗試AI應用開發平臺——Dify的本地部署和應用開發

隨著大語言模型LLM和相關應用的流行,在本地部署并構建知識庫,結合企業的行業經驗或個人的知識積累進行定制化開發,是LLM的一個重點發展方向,在此方向上也涌現出了眾多軟件框架和工具集,Dify就是其中廣受關注的一款,今天我們就來近距離了解下它。

Dify介紹

簡單說,Dify 是一款開源的大語言模型(LLM)應用開發平臺,融合了后端即服務(Backend as Service)和LLM運維服務(LLMOps)的理念,旨在簡化和加速生成式 AI 應用的創建和部署。
Dify 的名稱來源于 “Define + Modify”。“Define” 代表著對 AI 應用進行定義,包括明確其功能、目標、應用場景等方面;“Modify” 則表示持續改進,體現了 Dify 平臺支持開發者根據實際需求和反饋,不斷優化和調整 AI 應用的特點。這兩個詞結合起來,傳達出了 Dify 平臺的核心理念,即幫助開發者定義并不斷完善自己的 AI 應用。

Dify安裝

我們先把Dify在本地安裝運行起來。
安裝Dify的最簡單方式是借助Docker。官方已經做好了編排文件,只要將Dify源碼下載下來,然后運行Docker編排命令就可以了。關于基礎的linux系統環境和軟件工具,如Git,Docker等,可以自行上網查詢其安裝方式,也可以參考我之前的文章:
Docker+Ollama+RAGFlow本地部署DeepSeek R1并構建本地知識庫
這里就不再贅述。
在linux命令行中,先進入自己創建好的本地工作目錄,執行如下命令下載Dify源碼:

$ git clone https://gitee.com/dify_ai/dify.git

然后進到dify/docker目錄,執行如下命令:

$ docker compose up -d

命令運行過程中顯示了如下三段信息:
第一段

WARN[0000] The "DB_USERNAME" variable is not set. Defaulting to a blank string.
WARN[0000] The "DB_DATABASE" variable is not set. Defaulting to a blank string.
WARN[0000] The "DB_PASSWORD" variable is not set. Defaulting to a blank string.
WARN[0000] The "DB_USERNAME" variable is not set. Defaulting to a blank string.
WARN[0000] The "DB_PASSWORD" variable is not set. Defaulting to a blank string.
WARN[0000] The "DB_DATABASE" variable is not set. Defaulting to a blank string.
WARN[0000] The "DB_PASSWORD" variable is not set. Defaulting to a blank string.
WARN[0000] The "DB_DATABASE" variable is not set. Defaulting to a blank string.
WARN[0000] The "DB_USERNAME" variable is not set. Defaulting to a blank string.
WARN[0000] The "DB_USERNAME" variable is not set. Defaulting to a blank string.
WARN[0000] The "DB_DATABASE" variable is not set. Defaulting to a blank string.
WARN[0000] The "DB_PASSWORD" variable is not set. Defaulting to a blank string.
WARN[0000] The "CERTBOT_EMAIL" variable is not set. Defaulting to a blank string.
WARN[0000] The "CERTBOT_DOMAIN" variable is not set. Defaulting to a blank string.

這顯然是一段告警,表示初始的數據庫字段未設置。注意到docker目錄下有個readme.md文件,打開它,情況就一目了然。Dify已將所有的環境變量設置都集中到了配置文件.env中,并提供了一個樣板文件.env.example,里面已經有了必要的初始化參數配置,我們只需復制樣板文件就行,復制后也可以根據實際情況略加修訂。

第二段

[+] Running 79/79? plugin_daemon Pulled                                                                                          123.2s? web Pulled                                                                                                    216.7s? weaviate Pulled                                                                                                98.6s? sandbox Pulled                                                                                                208.7s? db Pulled                                                                                                     146.3s? redis Pulled                                                                                                  209.9s? nginx Pulled                                                                                                  180.0s? api Pulled                                                                                                    198.8s? ssrf_proxy Pulled                                                                                              42.6s? worker Pulled                                                                                                 198.8s

這是在拉取Dify依賴的軟件包,顯示了其中的幾大關鍵組件及其所消耗的時間。

第三段

[+] Running 12/12? Network docker_default             Created                                                                      0.1s? Network docker_ssrf_proxy_network  Created                                                                      0.0s? Container docker-ssrf_proxy-1      Started                                                                     10.6s? Container docker-web-1             Started                                                                     10.4s? Container docker-weaviate-1        Started                                                                     10.6s? Container docker-db-1              Healthy                                                                     16.0s? Container docker-sandbox-1         Started                                                                     10.4s? Container docker-redis-1           Started                                                                     10.4s? Container docker-plugin_daemon-1   Started                                                                      7.7s? Container docker-worker-1          Started                                                                      7.6s? Container docker-api-1             Started                                                                      7.7s? Container docker-nginx-1           Started                                                                      8.4s

這是把幾大組件直接啟動起來了,也就是說,這一個命令就完成了Dify的部署和運行,是不是太簡單?!
總結一下,安裝和運行Dify只需要執行下面的幾條命令:

$ git clone https://gitee.com/dify_ai/dify.git
$ cd dify/docker
$ cp .env.example .env
$ docker compose up -d

完成以上步驟之后,打開瀏覽器,輸入本地服務器地址(如http://192.168.1.229,默認端口號是80),就會出現Dify平臺的登錄界面。首次運行時需要設置管理員賬號,輸入賬號名、郵箱地址和密碼,提交完成后再以該賬號登錄(跟前面參考文章中的Open-WebUI的配置機制一樣),出現的首頁就長這個樣:
在這里插入圖片描述

Dify的配置

首頁顯示“工作室”的內容,從首頁界面就能發現:Dify主要是用來創建和管理LLM應用的。應用分為五大類型,分別是:聊天助手(chat)、智能體(agent-chat)、文本生成(completion)、對話流(advanced-chat)、工作流(workflow)。可以按五大類型分類,分別羅列已經創建的應用。當然,我的實際環境中一個都還沒有,在創建應用之前,需要先配置一下LLM模型!
點擊頁面頂端右側的賬號圖標,出現一個下拉菜單,點擊“設置”按鈕,出現如下設置界面:
在這里插入圖片描述
默認顯示的是成員配置,點擊左側“模型供應商”菜單,出現模型供應商安裝界面:
在這里插入圖片描述
第一次進入時,會提示“尚未安裝模型供應商”、“系統模型尚未完全配置”等信息。下面的待安裝模型供應商列表顯示了國內外各大知名供應商,包括OpenAI、Gemini、深度求索、通義千問、硅基流動等等。安裝模型供應商的作用,實際上是安裝訪問各個供應商的模型API接口的插件(這里的模型供應商就是插件)。在安裝插件之后,還要進一步配置我們在各供應商服務平臺上注冊的賬號和API Key,這一步的目的就是建立起訪問LLM模型的通道。
對于本地部署LLM模型的情況,根據運行LLM模型的方式提供相應的本地API接口即可。典型地,對于以Ollama方式運行的LLM模型,我們首先就要安裝Ollama模型供應商(插件)。在待安裝模型供應商列表中找到Ollama,點擊“安裝”按鈕,
在這里插入圖片描述
在出現的確認界面上繼續點擊“安裝”按鈕,等待安裝過程完成。
在這里插入圖片描述
安裝需要一定的時間,在安裝的過程中,可以點擊瀏覽器的刷新按鈕,或者也可以先瀏覽下其他的頁面,直到頁面頂端右側(“插件”菜單的左邊)的下載圖標消失,就表示安裝完成。
在這里插入圖片描述
再次回到模型供應商的設置界面,可以看到Ollama已經出現在模型列表中(如果還是沒有,可以再重新安裝一遍,有時會出現安裝失敗的情況)。
在這里插入圖片描述
點擊Ollama組合框右下角的“添加模型”按鈕,添加我們將要調用的LLM模型。因為Ollama可以同時部署多種不同類型和規模的LLM模型(關于用Ollama部署LLM模型的方法步驟,也可以參考我上面鏈接的文章),所以這里需要告訴Dify我們會使用哪些模型。在“添加模型”的界面上,按實際情況填寫模型參數,如果有不清楚的地方,可以在命令行執行“ollama show model-name”命令(注意將其中的model-name改成實際的模型名稱),然后將對應字段填入。下面是我的實例參數值:
在這里插入圖片描述
填好參數以后,點擊“保存”按鈕,這個模型就會被設置生效并保存,然后出現在模型列表中。
在這里插入圖片描述
添加了至少一個LLM模型之后,就可以繼續設置系統模型了。點擊“系統模型設置”按鈕,彈出如下的標簽頁:
在這里插入圖片描述
由于我目前只添加了一個deepseek-r1:1.5b模型,它只能用于推理,所以目前也只能設置“系統推理模型”,點擊該配置項的下拉框,剛添加的deepseek-r1:1.5b就出現在下拉列表中了,選中它,然后點擊“保存”按鈕。完成之后,刷新頁面,再次進入模型供應商設置頁面就不會再有“尚未安裝模型供應商”、“系統模型尚未完全配置”等提示了,已經添加的模型會顯示在模型列表中,可以點擊“配置”按鈕對這些已經添加的LLM模型調整參數。
在這里插入圖片描述
除了模型配置外,也可以在配置界面上設置Dify平臺的默認語言和系統時區參數:在這里插入圖片描述
也可以添加其他成員賬號,供團隊成員訪問:
在這里插入圖片描述
至此,最基礎的Dify配置就完成了。至于“數據來源”和“API擴展"兩項,暫且可以不管它,等后續需要更豐富的功能時再來研究。

創建應用

下面我就來嘗試創建第一個應用。

回到首頁,點擊左上角的“創建空白應用”菜單,彈出創建應用界面:
在這里插入圖片描述首先選擇五大類型中的某一種,右邊會展示該類型應用的基本樣式。

也可以在首頁點擊左上角的“從應用模板創建”菜單,就會彈出各種應用模板的列表:
在這里插入圖片描述
模板按“用途”進行了分類,每個模板的下面以文字標明了其所屬的類型。

我就選擇創建一個“聊天助手”類型的空白應用,填入應用名稱和簡要描述,然后點擊“創建”按鈕,出現了如下的應用“定義”界面:
在這里插入圖片描述
這里我們就很容易理解“定義”這個詞在Dify平臺中的含義了。開發LLM應用確實就是個定義過程,定義的對象包括模型(前面已經演示,模型也是定義出來)、提示詞、變量、知識庫、元數據過濾規則等。定義界面上可以方便地進行即時的調試和預覽。

來嘗試一把。先選定LLM模型,并設定模型參數。我們目前只添加了一個deepseek-r1模型,所以就選定它了。對于模型參數,如果不清楚它有什么作用,可以點擊參數旁邊的小問號查看參數解釋,如果還不清楚就上網搜索或者直接問AI助手。
在這里插入圖片描述
然后填入提示詞,其他字段暫且留空。完成這兩步之后,就可以在“和機器人聊天”的輸入框中輸入問題,點擊箭頭符號確認輸入,我們指定的deepseek模型就開始推理思考了(速度取決于咱們的硬件資源),最后給出了很詳細的回答。
在這里插入圖片描述
以上推理過程都是在本地完成的。如果對這個“定義”和回答還滿意,我們就可以發布這個應用了。可以當它是AI應用,也可以當它是個機器人,它就是基于LLM大模型,在我們的明確定義之下,形成的一個有特定功能,面向特定方面提供服務的應用程序。點擊“發布”按鈕,然后點擊“發布更新”,發布過程就完成了。再點擊“運行”菜單,彈出一個新的應用界面:
在這里插入圖片描述
點擊“嵌入網站”菜單(“發布”按鈕下的子菜單),彈出一段HTML代碼,直接復制,可以將它粘貼到咱們自己的網站中,咱們的網站就有了AI聊天助手功能。
還可以通過API的方式來訪問這個應用,點擊“訪問API”菜單(“發布”按鈕下的子菜單),就會彈出一個頁面,顯示詳細的使用指南,教你如何在程序中編碼來調用API,以及如何處理輸入和輸出信息等,指導信息很具體很詳細。

保存應用

創建了第一個AI應用之后,在Dify首頁的應用列表中就可以看到它了。
在這里插入圖片描述
進一步思考一個問題:我們定義(開發)的這些AI應用,它們的本體到底是什么呢? 我們怎么保存它,怎么傳輸給別人并和別人交流,怎么記錄我們對應用的改進歷史?像我們平常開發的其他軟件一樣,這個程序的“代碼”在哪里呢?對于這個問題,我們需要理解一個新概念——DSL。Dify是一個AI應用定義平臺,它對AI應用的具體定義,存儲在一個DSL文件中。把鼠標放到上圖的“測試應用”圖標上,圖標右下角出現一個省略符號,點擊它,出現一個操作菜單,其中有一個“導出DSL”的子菜單,點擊它,瀏覽器就會自動下載(由Dify生成)一個名為“測試應用.yml”的文件。
在這里插入圖片描述
所以DSL文件的格式其實是yml,用文本編輯器打開它,看看它的內容:

app:description: 第一個dify機器人icon: 🤖icon_background: '#FFEAD5'mode: chatname: 測試應用use_icon_as_answer_icon: false
dependencies:
- current_identifier: nulltype: marketplacevalue:marketplace_plugin_unique_identifier: langgenius/ollama:0.0.6@7d66a960a68cafdcdf5589fdf5d01a995533f956853c69c54eddcf797006fa37
kind: app
model_config:agent_mode:enabled: falsemax_iteration: 5strategy: function_calltools: []annotation_reply:enabled: falsechat_prompt_config: {}completion_prompt_config: {}dataset_configs:datasets:datasets: []reranking_enable: falseretrieval_model: multipletop_k: 4dataset_query_variable: ''external_data_tools: []file_upload:allowed_file_extensions:- .JPG- .JPEG- .PNG- .GIF- .WEBP- .SVG- .MP4- .MOV- .MPEG- .WEBMallowed_file_types: []allowed_file_upload_methods:- remote_url- local_fileenabled: falseimage:detail: highenabled: falsenumber_limits: 3transfer_methods:- remote_url- local_filenumber_limits: 3model:completion_params:stop: []mode: chatname: deepseek-r1:1.5bprovider: langgenius/ollama/ollamamore_like_this:enabled: falseopening_statement: ''pre_prompt: '#角色:你是一位經驗豐富的出國留學顧問#功能:1)你通曉出國留學相關的各種知識,包括全世界各個國家的排名前10的大學和全世界排名前100名的大學的情況,包括它們的歷史、突出專業、師資隊伍、學術地位、招生政策、教學制度、留學費用、申請流程等等;2)你熟悉國內有留學需求群體的特點,了解改革開放依賴國內留學政策及其變遷,了解實際留學人員的學習過程情況和畢業后工作發展情況,熟悉當前留學市場客戶的心理特征和期望,熟悉留學市場的當前狀況和未來趨勢;3)你能結合留學需求人員和留學市場的國際國內行情,為客戶提供最合適的留學方案,并耐心回答客戶問題,完成留學申請過程的輔導以及后續跟蹤服務。#限制:1)要求實事求是,基于確定的事實、歷史記錄和數據來回答客戶問題;對于趨勢分析、未來預測等要求基于有科學依據且廣受認可的分析方法來進行,對其結果要明確標定,方便客戶識別你的回答內容是客觀事實還是分析判斷;2)要求友好理性,對客戶的任何問題,要友善地回答,以幫助客戶充分理解具體情況并能進一步作出最優決策為宗旨,對客戶問題及相關背景進行理性分析,然后組織語言,簡明清晰地回答問題;不允許出現任何沒有根據或者不友好的回答;3)要求合理合法,回答內容必須合乎相關國家的法律法規以及社會風俗習慣。'prompt_type: simpleretriever_resource:enabled: truesensitive_word_avoidance:configs: []enabled: falsetype: ''speech_to_text:enabled: falsesuggested_questions: []suggested_questions_after_answer:enabled: falsetext_to_speech:enabled: falselanguage: ''voice: ''user_input_form: []
version: 0.3.0

這就是我們前面所有定義的內容。一個AI應用,是以Dify平臺服務為基礎的一系列屬性值的組合,Dify根據這些屬性來修飾和調用LLM模型,并為用戶呈現LLM推理的結果,對外表現為獨立的AI應用。基于用戶的各種定義,同一個Dify平臺,可以同時為用戶呈現多種不同的AI應用服務。

有了上面的DSL文件,我們就可以在不同的地方傳遞、共享、重現我們定義的AI應用,也可以用Git等配置管理軟件進行歷史版本記錄和團隊合作開發。在Dify首頁上創建AI應用時,有個“導入DSL文件”的子菜單,其中的DSL文件就來源于此。
在這里插入圖片描述

確實是好方便啊!

總結

至此,我們就簡單但完整地體驗了一下Dify的安裝部署和使用。這個過程讓我想起了之前使用字節跳動的“扣子”平臺的經歷,可以回顧我之前寫的系列文章。相比較而言,Dify已經是一個成熟產品,一個軟件平臺,一個可在本地部署的AI應用定制開發平臺,更準確地說,Dify是一款開發AI應用的工具軟件。它也支持工作流的定義,支持知識庫的應用,功能已經很強大。“扣子”平臺還在開發和完善之中,它的功能跟Dify有很多重疊,但它的目標可能更遠大,背景實力更強。“扣子”是一個在線平臺,是字節跳動公司的一種生意模式,它將開發者聚集到這個網絡平臺上,支持在線開發AI應用的功能,同時與其他在線資源,比如各大LLM模型服務器、AI應用市場、抖音發布平臺、豆包APP等結合起來,成為字節跳動公司搶占AI軟件市場的一把利器!

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

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

相關文章

高階數據結構——哈希表的實現

目錄 1.概念引入 2.哈希的概念: 2.1 什么叫映射? 2.2 直接定址法 2.3 哈希沖突(哈希碰撞) 2.4 負載因子 2.5 哈希函數 2.5.1 除法散列法(除留余數法) 2.5.2 乘法散列法(了解&#xff09…

7.安卓逆向2-frida hook技術-介紹

免責聲明:內容僅供學習參考,請合法利用知識,禁止進行違法犯罪活動! 內容參考于:圖靈Python學院 工具下載: 鏈接:https://pan.baidu.com/s/1bb8NhJc9eTuLzQr39lF55Q?pwdzy89 提取碼&#xff1…

DB-GPT擴展自定義Agent配置說明

簡介 文章主要介紹了如何擴展一個自定義Agent,這里是用官方提供的總結摘要的Agent做了個示例,先給大家看下顯示效果 代碼目錄 博主將代碼放在core目錄了,后續經過對源碼的解讀感覺放在dbgpt_serve.agent.agents.expand目錄下可能更合適&…

Android 架構演進之路:從 MVC 到 MVI,擁抱單向數據流的革命

在移動應用開發的世界里,架構模式的演進從未停歇。從早期的 MVC 到后來的 MVP、MVVM,每一次變革都在嘗試解決前一代架構的痛點。而今天,我們將探討一種全新的架構模式 ——MVI(Model-View-Intent),它借鑒了…

【YOLOv8-pose部署至RK3588】模型訓練→轉換RKNN→開發板部署

已在GitHub開源與本博客同步的YOLOv8_RK3588_object_pose 項目,地址:https://github.com/A7bert777/YOLOv8_RK3588_object_pose 詳細使用教程,可參考README.md或參考本博客第六章 模型部署 文章目錄 一、項目回顧二、文件梳理三、YOLOv8-pose…

集成30+辦公功能的實用工具

軟件介紹 本文介紹的軟件是千峰辦公助手。 軟件功能概述與開發目的 千峰辦公助手集成了自動任務、系統工具、文件工具、PDF工具、OCR圖文識別、文字處理、電子表格七個模塊,擁有30余項實用功能。作者開發該軟件的目的是解決常見辦公痛點,把機械操作交…

IDEA啟動報錯:Cannot invoke “org.flowable.common.engine.impl.persistence.ent

1.問題 項目啟動報錯信息 java.lang.NullPointerException: Cannot invoke "org.flowable.common.engine.impl.persistence.ent 2.問題解析 出現這個問題是在項目中集成了Flowable或Activiti工作流,開啟自動創建工作流創建的表,因為不同環境的數據…

網絡安全--PHP第三天

今天學習文件上傳的相關知識 上傳的前端頁面如下 upload.html <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"&g…

【愚公系列】《生產線數字化設計與仿真》004-顏色分類站仿真(基礎概念)

??【技術大咖愚公搬代碼:全棧專家的成長之路,你關注的寶藏博主在這里!】?? ??開發者圈持續輸出高質量干貨的"愚公精神"踐行者——全網百萬開發者都在追更的頂級技術博主! ?? 江湖人稱"愚公搬代碼",用七年如一日的精神深耕技術領域,以"…

基于 uni-app + <movable-view>拖拽實現的標簽排序-適用于微信小程序、H5等多端

在實際業務中&#xff0c;我們經常遇到「標簽排序」或「菜單調整」的場景。微信小程序原生的 movable-view 為我們提供了一個簡單、高效的拖拽能力&#xff0c;結合 Vue3 uni-app 的組合&#xff0c;我們可以實現一個體驗良好的標簽管理界面。 核心組件&#xff1a;<movab…

一些較好的學習方法

1、網上有一些非常經典的電路&#xff0c;而且有很多視頻博主做了詳細的講解。 2、有一部分拆解的UP主&#xff0c;拆解后會還原該器件的原理圖&#xff0c;并一步步做講解。 3、有兩本書&#xff0c;數電、模電&#xff0c;這兩本書中的內容很多都值得學習。 5、某寶上賣的…

《1.1_4計算機網絡的分類|精講篇|附X-mind思維導圖》

網絡相關知識 按使用范圍分類 公用網 由電信部門或其他提供通信服務的經營部門組建、管理和控制&#xff0c;向全社會提供服務的網絡。 專用網 由某個單位或部門組建、僅供本單位或部門內部使用的網絡。 按傳輸介質分類 有線網絡 如&#xff1a;雙絞線、同軸電纜、光纖…

Git 和 GitHub 學習指南本地 Git 配置、基礎命令、GitHub 上傳流程、企業開發中 Git 的使用流程、以及如何將代碼部署到生產服務器

Windows 上 Git 安裝與配置 下載安裝&#xff1a;訪問 Git 官方網站下載適用于 Windows 的安裝程序。運行安裝包時會出現許可協議、安裝目錄、組件選擇等界面&#xff08;如下圖&#xff09;。在“Select Components”頁面建議勾選 Git Bash Here 等選項&#xff0c;以便在資源…

航空航天領域對滾珠絲桿的精度要求有多高?

航空航天領域對滾珠絲桿的精度要求非常高&#xff0c;尤其是飛行器、火箭和衛星等載具的導航和定位系統都需要高精度的滾珠絲桿&#xff0c;以確保高精度的位置控制和穩定的導航性能。那么&#xff0c;航空航天領域對滾珠絲桿的精度要求有多高&#xff1f; 1、定位精度&#xf…

技術篇-2.5.Matlab應用場景及開發工具安裝

Matlab 在數學建模和數值分析等領域具有無可替代的地位。它幾乎涵蓋所有常見數學算法的內置函數庫&#xff0c;使得從數據預處理、方程求解到優化算法的實現&#xff0c;無需編寫大量底層代碼即可快速完成&#xff1b;同時&#xff0c;Matlab 強大的可視化能力&#xff0c;可以…

Vtk概覽1

vtk環境搭建 見&#xff08;VTK開發環境配置(Visual Studio C)-詳細圖文教程-CSDN博客&#xff09; 在學習vtk圖形圖像進階的第二章時&#xff0c;通過vs2022建的控制臺程序&#xff0c;編寫運行示例2.1 發現 不顯示圖像。 #include <iostream> #include<vtkRenderW…

【數據集】基于ubESTARFM法的100m 地溫LST數據集(澳大利亞)

目錄 數據概述一、輸入數據與處理二、融合算法1. ESTARFM(Enhanced STARFM)2. ubESTARFM(Unbiased ESTARFM)代碼實現數據下載參考根據論文《Generating daily 100 m resolution land surface temperature estimates continentally using an unbiased spatiotemporal fusion…

Lucide:一款精美的開源矢量圖標庫,前端圖標新選擇

名人說:博觀而約取,厚積而薄發。——蘇軾《稼說送張琥》 創作者:Code_流蘇(CSDN)(一個喜歡古詩詞和編程的Coder??) 目錄 一、前言:為何選擇 Lucide?二、Lucide 是什么?1. 基本介紹2. Lucide vs Feather三、如何在項目中使用 Lucide?1. 安裝圖標包(以 React 為例)2…

BeanUtil和BeanUtils有什么區別

BeanUtil 和 BeanUtils 是兩個常見的工具類&#xff0c;通常用于 Java 開發中處理對象之間的屬性復制或轉換。它們的功能可能看起來相似&#xff0c;但實際上它們來自不同的庫&#xff0c;并且在實現細節和使用方式上存在一些差異。 以下是它們的主要區別&#xff1a; 1. 來源…

【CF】Day66——Edu 168.D + CF 853 (Div. 2).C (樹 + 二分 + 貪心 | 組合數學)

D. Maximize the Root 題目&#xff1a; 思路&#xff1a; 樹上二分&#xff0c;中下題 我們可以發現如果 x 可以&#xff0c;那么 x - 1 肯定也可以&#xff0c;所以可以直接二分答案 具體的&#xff0c;我們每次二分能增加的值 mid &#xff0c;如果 a[i] < mid&#xf…