順序完全指南:基于 FIT 框架的 category 與 level 兩級(jí)加載機(jī)制)
人工智能大模型AI 應(yīng)用后端AI AgentRAG流程編排微服務(wù)【免費(fèi)下載鏈接】fit-frameworkFIT: 企業(yè)級(jí)AI開發(fā)框架提供多語言函數(shù)引擎FIT、流式編排引擎WaterFlow及Java生態(tài)的LangChain替代方案FEL。原生/Spring雙模運(yùn)行支持插件熱插拔與智能聚散部署無縫統(tǒng)一大模型與業(yè)務(wù)系統(tǒng)。項(xiàng)目地址https://gitcode.com/ModelEngine/fit-framework點(diǎn)擊查看免費(fèi)下載導(dǎo)讀本文檔系統(tǒng)講解 FELFIT Extension for LLM插件在 FIT 框架中的啟動(dòng)順序機(jī)制。當(dāng)應(yīng)用以 JAR 包方式運(yùn)行時(shí)FIT 框架會(huì)依據(jù)插件的category類別與level等級(jí)兩個(gè)維度以確定性的先后順序加載插件從而保證工具倉(cāng)庫(kù)、工具發(fā)現(xiàn)器、模型集成等組件按正確依賴關(guān)系就緒。讀完本文你將掌握 FEL 全部 9 個(gè)插件的加載層級(jí)與先后次序、category/level 的配置語法與默認(rèn)值、以及插件間啟動(dòng)依賴背后的源碼實(shí)現(xiàn)原理能夠據(jù)此合理規(guī)劃自定義插件的啟動(dòng)優(yōu)先級(jí)。一、兩級(jí)排序機(jī)制category → levelFEL 插件與 FIT 內(nèi)置插件共用同一套啟動(dòng)順序規(guī)則。FIT 框架對(duì)插件執(zhí)行兩級(jí)排序第一級(jí)按 category 排序第二級(jí)在同一 category 內(nèi)按 level 數(shù)值排序。1.1 啟動(dòng)規(guī)則規(guī)則說明category 優(yōu)先級(jí)categorySYSTEM (id1)的插件先于categoryUSER (id2)的插件加載level 優(yōu)先級(jí)相同 category 內(nèi)level 數(shù)值越小啟動(dòng)優(yōu)先級(jí)越高同級(jí)順序相同 category 和相同 level 的插件加載順序不確定1.2 默認(rèn)值未指定 category 時(shí)默認(rèn)為categoryUSER未指定 level 時(shí)默認(rèn)為level4。1.3 源碼依據(jù)category 的兩個(gè)枚舉值在 FIT 核心 API 中定義于 PluginCategory.javapublic enum PluginCategory implements CodeableEnumPluginCategory { SYSTEM(1, system), USER(2, user); ... }其中SYSTEM的 id 為 1、USER的 id 為 2這正是“SYSTEM 先于 USER 加載”這一規(guī)則的底層來源。SYSTEM類別通常承載框架級(jí)基礎(chǔ)設(shè)施HTTP 服務(wù)、序列化、工具鏈路而USER類別則承載面向業(yè)務(wù)的功能插件二者解耦后用戶插件在啟動(dòng)時(shí)即可安全使用系統(tǒng)插件提供的 Bean 與服務(wù)。二、整體啟動(dòng)流程圖29 個(gè)插件的兩級(jí)啟動(dòng)順序當(dāng)前build/plugins目錄共統(tǒng)計(jì)29 個(gè)插件其中 FEL 插件 9 個(gè)本文檔詳細(xì)說明FIT 內(nèi)置插件 20 個(gè)詳見 FIT插件啟動(dòng)順序說明.md。整體啟動(dòng)順序如下插件啟動(dòng)順序29個(gè)插件 │ ├─ 階段1: SYSTEM 插件啟動(dòng) │ │ │ ├─ Level 4 (21個(gè)) │ │ ├─ FIT 內(nèi)置插件 (20個(gè)詳見FIT文檔) │ │ └─ fel-tool-repository-simple │ │ │ ├─ Level 5 (5個(gè)) │ │ ├─ fel-tool-discoverer │ │ ├─ fel-tool-executor │ │ ├─ fel-tool-factory-repository │ │ ├─ fel-tool-mcp-client │ │ └─ fel-tool-mcp-server │ │ │ └─ Level 7 (1個(gè)) │ └─ fel-model-openai-plugin │ └─ 階段2: USER 插件啟動(dòng) ├─ Level 1 (1個(gè)) │ └─ fel-tokenizer-hanlp-plugin │ └─ Level 4 (1個(gè)) └─ fel-langchain-runnable從圖中可以清晰看出兩個(gè)關(guān)鍵設(shè)計(jì)意圖SYSTEM 插件整體先于 USER 插件工具鏈相關(guān)插件全部屬于 SYSTEM 類別它們構(gòu)成了 FEL 工具能力的“地基”同一 category 內(nèi)按 level 從小到大FIT 內(nèi)置插件與工具倉(cāng)庫(kù)Level 4最先就緒隨后是工具發(fā)現(xiàn)/執(zhí)行/工廠/MCP 相關(guān)插件Level 5模型集成插件Level 7最后啟動(dòng)USER 類別中分詞器Level 1先于 LangChain 運(yùn)行時(shí)Level 4。三、FEL 插件清單詳解以下按啟動(dòng)階段逐一說明 9 個(gè) FEL 插件的啟動(dòng)層級(jí)、職責(zé)與其源碼位置。3.1 階段1SYSTEM 插件categorySYSTEM, level41 個(gè)插件名稱說明fel-tool-repository-simple工具倉(cāng)庫(kù)簡(jiǎn)單實(shí)現(xiàn)該插件是工具鏈的數(shù)據(jù)存儲(chǔ)層。核心實(shí)現(xiàn)為 SimpleToolRepository.java通過Component注冊(cè)為ToolRepository與ToolChangedObserverRegistryaddTool(ToolInfoEntity tool)將工具寫入ConcurrentHashMap緩存并向所有已注冊(cè)的ToolChangedObserver廣播工具添加事件deleteTool(namespace, toolName)移除工具并廣播工具移除事件getTool/listTool按 namespace 查詢與列舉工具。作為 Level 4 插件它與 20 個(gè) FIT 內(nèi)置插件處于同一層級(jí)意味著工具倉(cāng)庫(kù)在工具發(fā)現(xiàn)器啟動(dòng)之前就已經(jīng)就緒。categorySYSTEM, level55 個(gè)插件名稱說明fel-tool-discoverer工具發(fā)現(xiàn)器fel-tool-executor工具執(zhí)行器fel-tool-factory-repository工具工廠倉(cāng)庫(kù)fel-tool-mcp-clientMCP 客戶端fel-tool-mcp-serverMCP 服務(wù)端這 5 個(gè)插件構(gòu)成 FEL 工具能力的中樞鏈路各自職責(zé)如下fel-tool-discoverer核心實(shí)現(xiàn)為 DefaultToolDiscoverer.java實(shí)現(xiàn)PluginStartedObserver與PluginStoppingObserver。當(dāng)任意插件啟動(dòng)時(shí)它會(huì)掃描該插件內(nèi)符合ToolSchema.TOOL_MANIFEST約定的工具清單資源解析后調(diào)用toolRepository.addTool(...)將工具裝配進(jìn)倉(cāng)庫(kù)插件停止時(shí)則執(zhí)行反向卸載。此外它還通過Value(${tool.max-num})讀取插件內(nèi)最大工具數(shù)量限制。fel-tool-executor核心實(shí)現(xiàn)為 DefaultToolExecutor.java實(shí)現(xiàn)ToolExecuteService是工具的執(zhí)行入口負(fù)責(zé)從工具倉(cāng)庫(kù)取出工具信息、經(jīng)工具工廠創(chuàng)建可執(zhí)行實(shí)例并完成調(diào)用。fel-tool-factory-repository核心實(shí)現(xiàn)為 DefaultToolFactoryRepository.java實(shí)現(xiàn)ToolFactoryRepository以工具類型type為鍵維護(hù)ToolFactory注冊(cè)表供執(zhí)行器按類型查找對(duì)應(yīng)的工廠。fel-tool-mcp-clientMCP 客戶端插件核心實(shí)現(xiàn)為 DefaultMcpClient.java 與DefaultMcpClientFactory通過io.modelcontextprotocol.sdk:mcp版本 0.17.1接入 MCPModel Context Protocol客戶端能力使 FEL 能夠調(diào)用外部 MCP 服務(wù)器提供的工具。fel-tool-mcp-serverMCP 服務(wù)端插件核心實(shí)現(xiàn)位于 tool-mcp-server同時(shí)提供基于 SSE 與 Streamable 兩種傳輸方式的服務(wù)器實(shí)例詳見其 README.md將 FEL 工具系統(tǒng)暴露為 MCP 服務(wù)供外部 MCP 客戶端發(fā)現(xiàn)與調(diào)用。categorySYSTEM, level71 個(gè)插件名稱說明fel-model-openai-pluginOpenAI 模型集成這是 FEL 的模型接入插件位于 fel-community/model-openai核心實(shí)現(xiàn)為 OpenAiModel.java。它實(shí)現(xiàn)ChatModel、EmbedModel、ImageModel、RerankModel等 FEL 核心模型接口通過fit-http-classic、fit-http-protocol、fit-security等 FIT 服務(wù)完成對(duì) OpenAI 兼容 API 的調(diào)用是 FEL 應(yīng)用接入大模型的“最后一公里”。為什么 Level 7模型插件依賴 HTTP 客戶端、安全、序列化等 FIT 基礎(chǔ)服務(wù)這些服務(wù)由 Level 4 的內(nèi)置插件提供因此將其安排在 SYSTEM 類別內(nèi)較高的 level確保底層能力全部就緒后才加載模型集成。3.2 階段2USER 插件categoryUSER, level11 個(gè)插件名稱說明fel-tokenizer-hanlp-pluginHanLP 分詞器該插件位于 fel-community/tokenizer-hanlp核心實(shí)現(xiàn)為 HanlpTokenizer.java通過Component注冊(cè)為 FEL 的Tokenizer實(shí)現(xiàn)基于 HanLP 分詞器提供countToken等文本 token 計(jì)數(shù)能力。作為 USER 類別中 level 最低的插件它在所有用戶插件中最先啟動(dòng)保證后續(xù)用戶插件在做上下文長(zhǎng)度計(jì)算時(shí)可直接使用。categoryUSER, level41 個(gè)插件名稱說明fel-langchain-runnableLangChain 運(yùn)行時(shí)支持該插件位于 fel-langchain-runnable核心實(shí)現(xiàn)為 LangChainRunnableServiceImpl.java聲明Fitable(modelengine.fel.plugin.langchain.runnable.invoke)通過BrokerClient按 taskId 路由并遠(yuǎn)程調(diào)用指定 fitableId 的算子為 LangChain Runnable 提供跨進(jìn)程的調(diào)用適配。注意fel-langchain-runnable的 POM 中未顯式聲明 category 與 level因此其實(shí)際生效的配置正是默認(rèn)值categoryUSER、level4見 pom.xml這恰好驗(yàn)證了第一節(jié)中的默認(rèn)值規(guī)則。四、插件依賴關(guān)系FEL 插件之間存在明確的啟動(dòng)期依賴文檔中記錄的依賴如下依賴方插件被依賴插件依賴說明fel-tool-discoverer(Level 5)fel-tool-repository-simple(Level 4)在onPluginStarted()回調(diào)時(shí)調(diào)用addTool()方法這一依賴在源碼層面清晰可見DefaultToolDiscoverer的構(gòu)造器強(qiáng)依賴ToolRepository接口見 DefaultToolDiscoverer.java而SimpleToolRepository正是該接口在 Level 4 階段的實(shí)現(xiàn)。若工具倉(cāng)庫(kù)未先啟動(dòng)工具發(fā)現(xiàn)器將無法完成工具裝配。這正是“工具倉(cāng)庫(kù) Level 4 → 工具發(fā)現(xiàn)器 Level 5”層級(jí)設(shè)計(jì)的根本原因。五、category 與 level 的配置方式fit-build-maven-plugin每個(gè) FEL 插件在構(gòu)建為插件 JAR 時(shí)通過 Maven 構(gòu)建插件fit-build-maven-plugin的configuration聲明其啟動(dòng)類別與等級(jí)。以fel-tool-repository-simple為例見 pom.xmlplugin groupIdorg.fitframework/groupId artifactIdfit-build-maven-plugin/artifactId version${fit.version}/version configuration categorysystem/category level4/level /configuration executions execution idbuild-plugin/id goals goalbuild-plugin/goal /goals /execution execution idpackage-plugin/id goals goalpackage-plugin/goal /goals /execution /executions /plugin各 FEL 插件的實(shí)際配置值可在其 POM 中逐一核實(shí)插件categorylevel配置文件fel-tool-repository-simplesystem4pom.xmlfel-tool-discoverersystem5pom.xmlfel-tool-executorsystem5pom.xmlfel-tool-factory-repositorysystem5pom.xmlfel-tool-mcp-clientsystem5pom.xmlfel-tool-mcp-serversystem5pom.xmlfel-model-openai-pluginsystem7pom.xmlfel-tokenizer-hanlp-pluginuser1pom.xmlfel-langchain-runnable未聲明默認(rèn) user未聲明默認(rèn) 4pom.xml此外所有插件在package或install階段通過maven-antrun-plugin將構(gòu)建產(chǎn)物復(fù)制到build/plugins/目錄例如 tool-repository-simple/pom.xml 中的copy ... todir../../../../../build/plugins/最終由 FIT 框架在啟動(dòng)時(shí)按該目錄中的插件清單統(tǒng)一加載。自定義插件如何選擇 category 與 level提供基礎(chǔ)設(shè)施、且被其他插件依賴的插件應(yīng)聲明為categorysystem并選擇一個(gè)小于其依賴方 level 的數(shù)值如level4面向業(yè)務(wù)功能、依賴框架能力即可的插件保持默認(rèn)categoryuser并按業(yè)務(wù)需要指定 level數(shù)值越小越早啟動(dòng)同一 category 與 level 的插件之間不存在順序保證若兩個(gè)插件存在啟動(dòng)期依賴必須通過調(diào)整 level 顯式表達(dá)先后關(guān)系而不能依賴同級(jí)插件的加載順序。六、與 FIT 內(nèi)置插件的關(guān)系build/plugins中的另外 20 個(gè) FIT 內(nèi)置插件全部配置為categorySYSTEM, level4它們?cè)?FEL 插件啟動(dòng)前提供 HTTP 服務(wù)、序列化、驗(yàn)證、服務(wù)發(fā)現(xiàn)、日志等框架級(jí)能力。FEL 插件尤其是fel-model-openai-plugin在依賴層面直接引用了fit-http-classic、fit-http-protocol、fit-security等 FIT 服務(wù)這些服務(wù)正是由內(nèi)置插件承載的具體清單與說明參見 FIT插件啟動(dòng)順序說明.md。一個(gè)值得注意的細(xì)節(jié)是FIT 內(nèi)置插件與fel-tool-repository-simple同屬SYSTEM Level 4但文檔明確指出——相同 category 與 level 的插件之間加載順序不確定因此表格中的序號(hào)僅用于標(biāo)識(shí)不代表實(shí)際加載順序。在設(shè)計(jì)依賴時(shí)不應(yīng)假設(shè)同層級(jí)插件之間的先后關(guān)系。七、常見問題與排錯(cuò)建議插件啟動(dòng)后發(fā)現(xiàn)工具未注冊(cè)優(yōu)先檢查fel-tool-discovererLevel 5是否在fel-tool-repository-simpleLevel 4之后加載以及插件內(nèi)是否包含符合ToolSchema.TOOL_MANIFEST約定的工具清單資源自定義插件需要訪問模型服務(wù)但啟動(dòng)過早模型集成插件位于SYSTEM Level 7依賴它的插件應(yīng)聲明為categoryuser且 level 大于其依賴對(duì)象或至少確保不早于依賴方同 level 插件間存在隱式依賴由于同級(jí)順序不確定應(yīng)立即通過調(diào)整 level 顯式化依賴關(guān)系否則可能在部分環(huán)境下出現(xiàn)偶發(fā)啟動(dòng)失敗想確認(rèn)插件實(shí)際生效的 category/level查看該插件 POM 中fit-build-maven-plugin的configuration若未聲明則對(duì)應(yīng)默認(rèn)值USER與4fel-langchain-runnable即為此例。八、總結(jié)FEL 插件的啟動(dòng)順序由categorySYSTEM → USER與 level從小到大兩級(jí)排序共同決定工具倉(cāng)庫(kù)Level 4→ 工具發(fā)現(xiàn)/執(zhí)行/工廠/MCPLevel 5→ 模型集成Level 7構(gòu)成了 SYSTEM 階段的清晰鏈路分詞器Level 1與 LangChain 運(yùn)行時(shí)Level 4則在 USER 階段完成收尾。理解這一機(jī)制是正確設(shè)計(jì)自定義 FEL 插件啟動(dòng)優(yōu)先級(jí)、避免啟動(dòng)期依賴問題的前提配置入口統(tǒng)一為 POM 中fit-build-maven-plugin的category與level兩個(gè)參數(shù)未配置時(shí)分別默認(rèn)USER與4。贊分享人工智能大模型AI 應(yīng)用后端AI AgentRAG流程編排微服務(wù)【免費(fèi)下載鏈接】fit-frameworkFIT: 企業(yè)級(jí)AI開發(fā)框架提供多語言函數(shù)引擎FIT、流式編排引擎WaterFlow及Java生態(tài)的LangChain替代方案FEL。原生/Spring雙模運(yùn)行支持插件熱插拔與智能聚散部署無縫統(tǒng)一大模型與業(yè)務(wù)系統(tǒng)。項(xiàng)目地址https://gitcode.com/ModelEngine/fit-framework點(diǎn)擊查看免費(fèi)下載相關(guān)推薦leetcode-rust中的5個(gè)核心算法技巧提升你的Rust編程能力leetcode rust中的5個(gè)核心算法技巧提升你的Rust編程能力 在競(jìng)爭(zhēng)激烈的編程世界中掌握高效算法是提升Rust編程能力的關(guān)鍵。leetcode r示例工程FIT 框架 FEL 工具調(diào)用機(jī)制實(shí)戰(zhàn)從 Pattern 委托到插件化工具編排FIT 框架 FEL 工具調(diào)用機(jī)制實(shí)戰(zhàn)從 Pattern 委托到插件化工具編排 導(dǎo)讀 本文聚焦 FIT 框架中 FELFramework for Engin人工智能大模型AI 應(yīng)用后端AI AgentRAG流程編排微服務(wù)FIT 框架 FEL 實(shí)戰(zhàn)基于 fel-flow 流程編排搭建 Native RAG 檢索增強(qiáng)應(yīng)用FIT 框架 FEL 實(shí)戰(zhàn)基于 fel flow 流程編排搭建 Native RAG 檢索增強(qiáng)應(yīng)用 本文以 examples/fel example/05 r人工智能大模型AI 應(yīng)用后端AI AgentRAG流程編排微服務(wù)創(chuàng)作聲明:本文部分內(nèi)容由AI輔助生成(AIGC),僅供參考