MCP Agent 工程框架Dify初探

目錄

  • 引言
  • 一、Dify是什么
  • 二、為什么使用Dify
  • 三、使用Dify要怎么做
    • 1、聊天助手
    • 2、Agent
      • 2.1 Function calling(函數調用)和 ReAct 兩種推理模式的區別
        • 2.1.1 技術本質與工作流程對比
        • 2.1.2 優缺點對比
        • 2.1.3 適用場景與選擇依據
      • 2.2 LangChain 的 Agent 實現原理?同時融合了 Function Calling 和 ReAct 兩種模式?
        • 2.2.1 核心機制:ReAct 框架?
        • 2.2.2 ?Function Calling 的作用?
        • 2.2.3 LangChain 的靈活實現
        • 2.2.4 技術流程對比
    • 3、應用工具箱
    • 4、工作流
    • 5、工具 - MCP Server工具
      • 5.1 集成 MCP 工具
      • 5.2 在應用中使用 MCP 工具

引言

在《OpenAI Agent調用MCP Server案例分析》一文,小馬介紹了支持MCP的框架,其中Dify目前備受青睞。對于企業來說,早期一般會沉淀一系列的AI應用,然后如何把這些應用的能力能串聯到一起這是一個很值得探討的話題。而Dify正是這樣的一個框架,它兼容MCP,這樣已經落地的應用都可以封裝成一個MCP Server以工具的形式提供給AI LLM決策調用。就像積木一樣,把原本需要分別各自獨立實現一個成果的零件分別拆開工具化,這些工具作為基礎顆粒模塊就可以再自由拼裝出N種不同的成果。

本文小馬就對Dify進行初探,整理總結,聚焦剖析,以一個初學者的視角進入Dify的世界,幫助大家對Dify有初步的理解。尤其對于正在打算了解Dify框架或者正在進行Agent工程框架選型的同學具有參考意義。

閱讀本文之前默認讀者已經對基本的AI技術棧概念知識有所了解。

在這里插入圖片描述

一、Dify是什么

首先我們來到Dify官方文檔。

Dify 是一款開源的大語言模型(LLM)應用開發平臺。它融合了后端即服務(Backend as Service)和 LLMOps 的理念,使開發者可以快速搭建生產級的生成式 AI 應用。即使你是非技術人員,也能參與到 AI 應用的定義和數據運營過程中。

這里面最后一句的概念很重要,“即使你是非技術人員,也能參與到 AI 應用的定義和數據運營過程中。

想要git倉庫源碼的同學可以移步這里傳送門。但源碼不是今天本文的重點。

二、為什么使用Dify

為什么使用 Dify?

你或許可以把 LangChain 這類的開發庫(Library)想象為有著錘子、釘子的工具箱。與之相比,Dify 提供了更接近生產需要的完整方案,Dify 好比是一套腳手架,并且經過了精良的工程設計和軟件測試。
重要的是,Dify 是開源的,它由一個專業的全職團隊和社區共同打造。你可以基于任何模型自部署類似 Assistants API 和 GPTs 的能力,在靈活和安全的基礎上,同時保持對數據的完全控制。

這一點也正是呼應了上一段的“即使你是非技術人員,也能參與到 AI 應用的定義和數據運營過程中。”,它已經工程化了,直接可以傻瓜式操作。

三、使用Dify要怎么做

這才是一個龐大的重點話題。
我們先站在非研發人員的角度來討論這個話題,我們可以如何使用它。先來看幾組概念。

在 Dify 中,一個“應用”是指基于 GPT 等大語言模型構建的實際場景應用。通過創建應用,你可以將智能 AI技術應用于特定的需求。它既包含了開發 AI 應用的工程范式,也包含了具體的交付物。 簡而言之,一個應用為開發者交付了:

**封裝友好的API,可由后端或前端應用直接調用,通過 Token 鑒權; **
開箱即用、美觀且托管的WebApp,你可以 WebApp 的模板進行二次開發;
一套包含提示詞工程、上下文管理、日志分析和標注的易用界面;

你可以任選其中之一或全部,來支撐你的 AI 應用開發。

小馬特別喜歡其中的第一條,是不是意味著這個框架不僅提供了工程應用的搭建和Agent編排,同時還能提供API的調用服務。這對于企業來說既解決了工程應用的問題同時也具備了提供API服務的增值能力。

在這里插入圖片描述

你可以通過 3 種方式在 Dify 的工作室內創建應用

基于應用模板創建(新手推薦)
創建一個空白應用
通過 DSL 文件(本地/在線)創建應用

Dify 中提供了五種應用類型

聊天助手:基于 LLM 構建對話式交互的助手
文本生成應用:面向文本生成類任務的助手,例如撰寫故事、文本分類、翻譯等
Agent:能夠分解任務、推理思考、調用工具的對話式智能助手
對話流:適用于定義等復雜流程的多輪對話場景,具有記憶功能的應用編排方式
工作流:適用于自動化、批處理等單輪生成類任務的場景的應用編排方式

上面這幾種類型看起來似乎沒啥區別,我們自己來詳細整理下這幾個應用類型的不同。

應用類型對比區別
聊天助手聊天式;多輪對話;上下文保存-持續;AI 開場白-支持;情景舉例-聊天;對話型應用的編排支持:對話前提示詞,變量,上下文,開場白和下一步問題建議;
文本生成應用表單+結果式;一問一答;上下文保存-當次;AI 開場白-不支持;情景舉例-翻譯、判斷、索引;
Agent智能助手(Agent Assistant),利用大語言模型的推理能力,能夠自主對復雜的人類任務進行目標規劃、任務拆解、工具調用、過程迭代,并在沒有人類干預的情況下完成任務;Agent應用的編排提示詞->你可以在“提示詞”中編寫智能助手的指令,為了能夠達到更優的預期效果,你可以在指令中明確它的任務目標、工作流程、資源和限制等。添加工具->在“上下文”中,你可以添加智能助手可以用于查詢的知識庫工具,這將幫助它獲取外部背景知識。在“工具”中,你可以添加需要使用的工具。工具可以擴展 LLM 的能力,比如聯網搜索、科學計算或繪制圖片,賦予并增強了 LLM 連接外部世界的能力。配置Agent->在 Dify 上為智能助手提供了 Function calling(函數調用)和 ReAct 兩種推理模式。已支持 Function Call 的模型系列如 gpt-3.5/gpt-4 擁有效果更佳、更穩定的表現,尚未支持 Function calling 的模型系列,我們支持了 ReAct 推理框架實現類似的效果;
對話流
工作流工作流通過將復雜的任務分解成較小的步驟(節點)降低系統復雜度,減少了對提示詞技術和模型推理能力的依賴,提高了 LLM 應用面向復雜任務的性能,提升了系統的可解釋性、穩定性和容錯性。Dify 工作流分為兩種類型:Chatflow面向對話類情景和Workflow面向自動化和批處理情景 ;

接下來小馬就重點挑幾個和小馬業務有關的應用類型來進一步展開剖析。

1、聊天助手

對話型應用采用一問一答模式與用戶持續對話。對話型應用的編排支持:對話前提示詞,變量,上下文,開場白和下一步問題建議

這倒是蠻適合客戶服務和智能問答場景的,如下還可以自己添加附屬功能。
在這里插入圖片描述
有一個不足如下:
聊天助手類型應用不支持添加第三方工具,你可以在 Agent 類型應用內添加第三方工具。
怎么理解這句話呢?就是聊天應用類型只支持上下文這里的知識庫(數據集或文件上傳),你如果要自己添加一些第三方工具,如Google搜索引擎則不支持,需要自己使用Agent類型去實現。
(因此這里的聊天助手類型應用小馬認為可拓展性還是有待斟酌的,選擇的時候應慎重考慮自己的業務場景是否能匹配滿足,長遠考慮如果不行應直接選擇可拓展性強的Agent類型)
在這里插入圖片描述

2、Agent

這是小馬重點關注的重中之重。
在上面的對比區別表格中,我們可以看到大致分為了幾個步驟。

Agent應用的編排:選擇模型->編輯提示詞->添加工具->配置Agent

選擇智能助手的推理模型智能助手的任務完成能力取決于模型推理能力,我們建議在使用智能助手時選擇推理能力更強的模型系列如 gpt-4 以獲得更穩定的任務完成效果。

在這里插入圖片描述
你可以在“提示詞”中編寫智能助手的指令,為了能夠達到更優的預期效果,你可以在指令中明確它的任務目標、工作流程、資源和限制等
在這里插入圖片描述
在“上下文”中,你可以添加智能助手可以用于查詢的知識庫工具,這將幫助它獲取外部背景知識。
在“工具”中,你可以添加需要使用的工具。工具可以擴展 LLM 的能力,比如聯網搜索、科學計算或繪制圖片,賦予并增強了 LLM 連接外部世界的能力(這里就是上面聊天助手應用類型所提到的它不能支持在上下文中添加第三方工具的部分)。Dify 提供了兩種工具類型:第一方工具和自定義工具。

(小馬插播一下:根據經驗,從這一點來看,幾乎可以判定 聊天助手應用類型 的技術實現使用的是類似langchain的RAG架構,而 Agent應用類型 的技術實現使用的是類似langchain的Agent核心組件模塊。是Agent與非Agent思想架構的區別。《LangChain與Agent實現》)

你可以直接使用 Dify 生態提供的第一方內置工具,或者輕松導入自定義的 API 工具(目前支持 OpenAPI / Swagger 和 OpenAI Plugin 規范)。

“工具”功能允許用戶借助外部能力,在 Dify 上創建出更加強大的 AI 應用。例如你可以為智能助理型應用(Agent)編排合適的工具,它可以通過任務推理、步驟拆解、調用工具完成復雜任務。
另外工具也可以方便將你的應用與其他系統或服務連接,與外部環境交互。例如代碼執行、對專屬信息源的訪問等。你只需要在對話框中談及需要調用的某個工具的名字,即可自動調用該工具。

在這里插入圖片描述

在這里插入圖片描述

下一步我們配置Agent。官方是這么說的。

在 Dify 上為智能助手提供了 Function calling(函數調用)和 ReAct 兩種推理模式已支持 Function Call 的模型系列如 gpt-3.5/gpt-4 擁有效果更佳、更穩定的表現,尚未支持 Function calling 的模型系列,我們支持了 ReAct 推理框架實現類似的效果。
在 Agent 配置中,你可以修改助手的迭代次數限制。

小馬認為這段話似乎理解起來有點歧義,Function calling和ReAct并不是兩個平行的概念吧?要實現一個完整的推理循環的Agent,必須是需要ReAct 的吧。而模型是否支持Function calling應該只是會影響其中Action環節的穩定性。這兩種模型的選擇并不是解決模型是否兼容Function calling的問題,而應該是解決是否需要ReAct推理的選擇。 于是小馬也進行了進一步的探索驗證。

2.1 Function calling(函數調用)和 ReAct 兩種推理模式的區別

這里提到了兩種推理模式,我們從以下兩張官方的案例圖多少可以看出兩種推理模式的不同(放大看嗷)。
在這里插入圖片描述
在這里插入圖片描述

Function calling(函數調用)和 ReAct(Reasoning + Acting)是構建AI智能體的兩種核心推理模式,它們在機制、適用場景和設計哲學上存在顯著差異。核心區別在于:Function calling 針對結構化工具調用,強調高效執行;而 ReAct 通過迭代推理和行動循環處理復雜問題,注重適應性和可解釋性。

2.1.1 技術本質與工作流程對比

Function calling?
技術本質?:一種結構化輸出協議,模型將用戶意圖映射到預定義函數或工具(如API調用),直接輸出標準化格式(如JSON),實現機器間通信。
工作流程?:單次請求完成決策:模型識別意圖 → 選擇工具 → 提取參數 → 執行并返回結果,無需多步迭代。

ReAct?
技術本質?:一種認知行為框架,模擬人類推理-行動循環,模型通過自然語言描述思考過程,結合外部工具交互逐步推進任務。
工作流程?:迭代循環:思考推理(Reason)→ 行動調用工具(Act)→ 觀察結果(Observe)→ 調整策略直至解決問題。

2.1.2 優缺點對比

Function calling?
優點?:
執行效率高:適用于簡單任務,響應速度快、。
結構化輸出:便于下游處理(如數據檢索或API集成)。
缺點?:
靈活性低:處理模糊意圖或多步任務時易出錯(如參數提取失敗)。
可解釋性弱:決策過程在模型內部(黑盒),用戶難跟蹤。

ReAct?
優點?:
靈活性強:適應開放世界問題,能動態調整策略(如根據工具輸出修改計算邏輯)。
可解釋性高:推理步驟顯式呈現(白盒),便于調試和信任。
缺點?:
執行成本高:多步循環增加時間和資源消耗。
依賴模型能力:部分基礎模型不支持自然語言指令解析。

2.1.3 適用場景與選擇依據

Function calling?
適合意圖明確、結構化任務,例如:
實時數據查詢(如股票價格或天氣檢索)。
自動化工具調用(如數學計算或API交互)。

ReAct?
適合復雜、多步驟問題,例如:
動態調整方案(如折扣計算中根據觀測值修改公式)。
開放環境決策(如目標導向的任務規劃)。

實踐中,兩者常結合使用(如混合架構),以平衡效率與適應性。選擇時優先考慮任務復雜度:Function calling 用于高效執行,ReAct 用于復雜推理。

2.2 LangChain 的 Agent 實現原理?同時融合了 Function Calling 和 ReAct 兩種模式?

這是本文的一則題外話,但是既然氣氛都到這里了還是一起整理了。

LangChain 的 Agent 實現原理?同時融合了 Function Calling 和 ReAct 兩種模式?,具體取決于底層使用的 LLM 和 Agent 類型。

2.2.1 核心機制:ReAct 框架?

ReAct(Reasoning + Acting)? 是 Agent 的?基礎推理邏輯?

Thought?:LLM 分析問題并制定計劃。
Action?:選擇要調用的工具(如搜索、計算器)。
Action Input?:提供工具所需的參數。
Observation?:獲取工具執行結果。
循環直到得出最終答案(Final Answer)。

ReAct 是通用模式?:無論是否顯式使用 Function CallingLangChain Agent 的交互流程都遵循此循環。

2.2.2 ?Function Calling 的作用?

優化 Action 步驟?:

傳統 ReAct 依賴 LLM 輸出結構化文本(如 Action: 工具名),易出錯。
Function Calling 允許 【LLM ?直接輸出】結構化 JSON?(工具名 + 參數),提高可靠性。

例如:OpenAI 的 gpt-3.5-turbo 支持 tools 參數,可返回:

{"tool_calls": [{"name": "search","arguments": {"query": "LangChain 工作原理"}}]
}

非必需但高度兼容?:
若 LLM 支持 Function Calling(如 OpenAI、Anthropic),LangChain 優先使用它以提升穩定性。
若不支持(如開源模型),Agent 仍可通過文本解析實現 ReAct。

2.2.3 LangChain 的靈活實現

不同 Agent 類型適配不同模式?:

Agent 類型使用場景典型模式
ZERO_SHOT_REACT_DESCRIPTION通用任務(默認)ReAct(文本解析)
OPENAI_FUNCTIONS適配 OpenAI Function Calling?Function Calling?
STRUCTURED_CHAT_ZERO_SHOT復雜多工具場景?ReAct + 結構化輸出

底層統一性?:
所有 Agent 均遵循 ReAct 的循環決策流程。
Function Calling 僅替代了其中的 ?Action 生成步驟?(從文本 → JSON)。

2.2.4 技術流程對比

傳統 ReAct(無 Function Calling)?

LLM 輸出: Thought: 我需要搜索天氣信息。Action: searchAction Input: {"query": "北京今日天氣"}
→ LangChain 解析文本,調用工具

Function Calling 優化版?

LLM 輸出(JSON): {"tool_calls": [{"name": "search","arguments": {"query": "北京今日天氣"}}]}
→ LangChain 直接執行工具

結論
ReAct 是核心框架?:定義 Agent 的推理循環(Thought → Action → Observation)。
Function Calling 是優化手段?:在支持的 LLM 上替代文本解析,提升 Action 生成的準確性和效率。
LangChain 同時支持兩者?:根據 LLM 能力和 Agent 配置動態選擇模式。本質上是通過 Function Calling 增強的 ReAct 實現。?

3、應用工具箱

在 工作室 — 應用編排 內點擊 添加功能,打開應用工具箱
應用工具箱為 Dify 的應用提供了不同的附加功能:
在這里插入圖片描述
Dify這里的應用工具箱似乎是一個功能附屬插件的概念,而不是MCP中的工具的概念。

4、工作流

小馬認為AI的工作流和傳統普通工作流的區別主要在于,有LLM參與的工作流可以讓決策更加智能同時AI的能力也將被串聯在工作流中。如下的幾個LLM節點的任務能力。(這似乎和Agent還是有概念區別的,雖有相關,但一個側重流程一個側重智能決策。同時我們也可以看到節點中已包含著工具、Agent、LLM等,從結構上也有子集關系。

在這里插入圖片描述

在這里插入圖片描述

LLM 節點是 Chatflow/Workflow 的核心節點。該節點能夠利用大語言模型的對話/生成/分類/處理等能力,根據給定的提示詞處理廣泛的任務類型,并能夠在工作流的不同環節使用。

  • 意圖識別,在客服對話情景中,對用戶問題進行意圖識別和分類,導向下游不同的流程。
  • 文本生成,在文章生成情景中,作為內容生成的節點,根據主題、關鍵詞生成符合的文本內容。
  • 內容分類,在郵件批處理情景中,對郵件的類型進行自動化分類,如咨詢/投訴/垃圾郵件。
  • 文本轉換,在文本翻譯情景中,將用戶提供的文本內容翻譯成指定語言。
  • 代碼生成,在輔助編程情景中,根據用戶的要求生成指定的業務代碼,編寫測試用例。
  • RAG,在知識庫問答情景中,將檢索到的相關知識和用戶問題重新組織回復問題。
  • 圖片理解,使用 vision 能力的多模態模型,能對圖像內的信息進行理解和問答。

選擇合適的模型,編寫提示詞,你可以在 Chatflow/Workflow 中構建出強大、可靠的解決方案。

5、工具 - MCP Server工具

這是一個很重要的點,也是小馬最關心的點之一。特別在MCP火爆的今天,不支持就會落伍。《模型上下文協議(Model Context Protocol,MCP)初見概念篇》

添加MCP Server 到Dify。還不知道如何實現一個MCP Server的也可以參考這里《編寫第一個MCP Server之Hello world》。
在這里插入圖片描述

5.1 集成 MCP 工具

你可以在 Dify 的 Agent 和 Workflow 應用中,直接集成來自外部 MCP 服務器的工具。除了使用 Dify 內置插件外,還可以接入 MCP 生態系統中的第三方服務,持續擴展你的應用功能。

5.2 在應用中使用 MCP 工具

當服務器配置完成后,其下的工具會出現在應用構建時的工具選擇區:
?
Agent 應用
在 Agent 配置界面,與內置工具并列顯示 MCP 工具。
工具按服務器分組,例如:“Notion MCP ? 創建頁面”、“Linear MCP ? 創建任務”等。
可一鍵”添加全部”,快速啟用該服務器下的所有工具。
?
Workflow 應用
構建 Workflow 時,MCP 工具以可選節點類型出現。
每個工具節點都會指明歸屬服務器,便于定位和排查問題。
參數較為復雜的工具會自動生成 JSON 格式的結構化輸入界面。
?
Workflows 中的 Agent 節點
在 Workflow 的 Agent 節點中,也可靈活選擇 MCP 工具進行配置,使用方式與獨立 Agent 一致。

至此,MCP的Agent 工程框架 Dify初探 就告一段落了,歡迎交流。

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

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

相關文章

無人機光伏巡檢漏檢率↓78%!陌訊多模態融合算法實戰解析

原創聲明本文為原創技術解析,核心技術參數與架構設計引用自《陌訊技術白皮書》,轉載請注明來源。一、行業痛點:無人機光伏巡檢的 "識別困境"光伏電站的大規模鋪設推動了無人機巡檢的普及,但實際作業中仍面臨三大技術瓶頸…

機動車占道識別準確率提升 29%:陌訊動態輪廓感知算法實戰解析

原創聲明本文為原創技術解析,核心技術參數與架構設計引用自《陌訊技術白皮書》,禁止未經授權的轉載與改編。一、行業痛點:機動車占道治理的技術瓶頸城市交通監控中,機動車占用應急車道、公交車道等違規行為已成為影響通行效率與交…

UNet改進(29):記憶增強注意力機制在UNet中的創新應用-原理、實現與性能提升

記憶增強注意力機制概述 記憶增強注意力是一種結合了外部記憶模塊的注意力機制,它使神經網絡能夠存儲和檢索長期知識,而不僅僅是依賴當前的輸入特征。這種機制特別適合需要保持長期依賴關系的任務,如醫學圖像分割,其中模型需要記住不同樣本中出現的常見模式。 核心組件 記…

使用Python開發Ditto剪貼板數據導出工具

前言在日常工作中,我們經常需要處理大量的剪貼板數據。Ditto作為一款優秀的剪貼板管理軟件,幫助我們保存了豐富的歷史記錄。但有時我們需要將這些數據導出進行進一步分析或備份,而Ditto本身并沒有提供直觀的批量導出功能。C:\pythoncode\new\…

【人工智能】提示詞設計原則:簡潔性、明確性、具體性如何平衡?

提示詞設計原則:簡潔性、明確性、具體性如何平衡?1. 提示詞設計三大原則的核心內涵1.1 簡潔性1.1.1 定義用最少的文字傳遞核心信息,避免冗余和不必要的描述。比如 “寫 3 個春天的成語” 比 “我想讓你寫出來 3 個和春天有關系的成語詞語” 更…

JS的作用域

文章目錄一、為什么需要作用域?二、什么是 JS 作用域?2.1 什么是詞法作用域和動態作用域?1. 詞法作用域(Lexical Scpoe)2. 動態作用域2.2 JS 的作用域2.3 JS 作用域的分類1. 全局作用域2. 模塊作用域3. 函數作用域4. 塊…

OLTP,OLAP,HTAP是什么,數據庫該怎么選

目錄 OLTP(Online Transaction Processing)聯機事務處理 OLAP(Online Analytical Processing)聯機分析處理 非實時OLAP 實時OLAP HTAP(Hybrid Transactional/Analytical Processing) OLAP 和 OLTP 數…

【前端】CSS Flexbox布局示例介紹

CSS Flexbox(彈性盒子)簡介 Flexbox 是一種一維布局模型,用于高效處理元素在容器內的空間分配、對齊和排序。它通過父容器(flex container)和子元素(flex items)的配合實現靈活響應式布局。核心…

Vue3核心語法基礎

一、為什么要學 Composition API?在以前我們寫代碼用Vue2寫:export default {data() {return { count: 0, msg: hello }},methods: {add() { this.count }},computed: {double() { return this.count * 2 }} }很明顯 一個功能被拆成三塊:data…

FSMC的配置和應用

一、FSMC 簡介與工作原理FSMC(Flexible Static Memory Controller)是 STM32 微控制器中用于與外部靜態存儲器(如 SRAM、PSRAM、NOR Flash、LCD 等)進行通信的一個外設模塊。1、支持的設備類型:SRAM / PSRAMNOR FlashNA…

Linux I/O 系統調用完整對比分析

Linux I/O 系統調用完整對比分析 1. 概述 Linux 提供了豐富的 I/O 系統調用&#xff0c;每種都有其特定的用途和優勢。本文將詳細分析這些系統調用的特點、使用場景和性能特征。 2. 系統調用詳細對比 2.1 基本讀寫函數 pread/pwrite #include <unistd.h>// 位置指定…

TiDB集群部署

架構&#xff1a; tidb–3臺&#xff0c;pd–3臺&#xff0c;tikv–3臺 8c16g200g 1x2.2x.2x7.124 1x2.2x.2x7.148 1x2.2x.2x7.87 1x2.2x.2x7.93 1x2.2x.2x7.127 1x2.2x.2x7.104 pd-3臺 4c8g100g 1x2.2x.2x7.143 1x2.2x.2x7.132 1x2.2x.2x7.91 1、下載安裝包 #注&#xff1a;我…

C#中對于List的多種排序方式

在 C# 中給 List<AI> 排序&#xff0c;只要 明確排序規則&#xff08;比如按某個字段、某幾個字段、或外部規則&#xff09;&#xff0c;就能用下面幾種常見寫法。下面全部基于這個示例類&#xff1a;public class AI {public int country; // 國家編號public int pr…

Spring框架中Bean的生命周期:源碼解析與最佳實踐

第1章&#xff1a;Spring Bean生命周期概述1.1 什么是Spring Bean生命周期&#xff1f;定義&#xff1a;Spring Bean生命周期是指從Bean的創建、初始化、使用到銷毀的完整過程&#xff0c;由Spring容器嚴格管理 。核心思想是Spring容器通過IoC&#xff08;控制反轉&#xff09;…

【51單片機6位數碼管密碼鎖】2022-10-15

緣由六位密碼器設計連接LED-嵌入式-CSDN問答 矩陣51單片機密碼鎖,回復:https://bbs.csdn.net/topics/392713242_智者知已應修善業的博客-CSDN博客 #include "REG52.h" unsigned char code smgduan[]{0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x…

?我的第一個開源項目:躍動的心

還是一個編程初學者時&#xff0c;我懷著激動的心情完成了人生第一個開源項目——一個用HTML5 Canvas制作的動態跳動愛心效果。這個項目雖然簡單&#xff0c;卻讓我深刻體會到了開源分享的快樂和技術創造的魅力。 壹、項目靈感 這個項目的靈感來源于瀏覽網頁時&#xff0c;被各…

技術演進中的開發沉思-53 DELPHI VCL系列:windows的消息(下):TApplication窗體

今天我們梳理下關于TApplication的窗體消息下半部分的內容。前面也說過&#xff0c;在 Delphi 的世界里&#xff0c;TApplication 就像一位經驗豐富的總工程師&#xff0c;而主窗體則是它傾注心血打造的核心建筑。如果你第一次在實驗室里敲出 Delphi 代碼時&#xff0c;屏幕上彈…

cesium FBO(四)自定義相機渲染到Canvas(離屏渲染)

前面幾節的例子是將Cesium默認的相機渲染到紋理&#xff08;RTT&#xff09;或Canvas&#xff0c;這片文章講解如何將自定義的一個camera的畫面渲染到Canvas上&#xff0c;有了前面幾篇的基礎了&#xff0c;也能將自定義的畫面渲染紋理、也可以灰度處理&#xff0c;原理是一樣的…

雙機并聯無功環流抑制虛擬阻抗VSG控制【simulink仿真模型實現】

雙機并聯虛擬同步發電機&#xff08;VSG&#xff09;系統中&#xff0c;因線路阻抗不匹配及參數差異&#xff0c;易引發無功環流。本方案在傳統VSG控制基礎上&#xff0c;引入自適應虛擬阻抗環節。其核心在于&#xff1a;實時檢測兩機間無功環流分量&#xff0c;據此動態調節各…

python測試總結

測試題的基礎知識點總結 1.循環求和 for循環步長&#xff08;range(2,101,2)&#xff09; while循環條件判斷&#xff08;i%20&#xff09; 生成器表達式&#xff08;sum(i for i in range )&#xff09; 所以&#xff1a;sum(range(1,101,2))&#xff08;奇數和&#xff09;和…