ModelEngine agent RAG 插件机制全解析:plugins.json 配置、MCP 插件开发与预置插件覆写指南
人工智能大模型RAGAI 应用医疗健康数据分析【免费下载链接】agent该项目已停止维护请参考https://gitcode.com/ModelEngine/nexent项目。 致力于汇聚利用 ModelEngine 能力的创新应用开发和推广高质量的应用程序旨在创建一个强大的多智能体架构将各种功能整合为无缝的用户体验。项目地址https://gitcode.com/ModelEngine/agent点击查看免费下载本指南围绕ask_question_app/admin/conf/plugins.md展开深入讲解 ModelEngine agentask_question_app中基于 MCP 的插件注册机制如何通过修改plugins.json添加自定义插件、如何覆写预置插件以及固定流程插件与RAG 插件的划分规则。结合仓库源码你还能掌握插件从启动注册到文档解析、QA 生成、关键词标注的完整调用链并了解main_前缀命名、print禁用、路径顺序等关键约束。插件体系固定流程插件与 RAG 插件官方文档给出的核心规则只有一句话却定义了整套插件体系的分流逻辑除去部分预置插件名称为固定流程插件其它插件建议不要以main_开头注册后默认为 RAG 插件。这条规则的实现位于 consts.py 的ToolName枚举中。凡是 tool 名称命中该枚举的插件会被识别为固定流程插件fixed tool按名称精确匹配调用其他未被枚举收录的 tool 名称则统一归类为 RAG 插件参与多路召回枚举值ToolName实际 tool 名称插件类型用途RAGmain_rag固定流程插件RAG 检索入口多路召回并行QA_GENqa_gen固定流程插件基于切片批量生成 QA 对KEYWORDS_GENERATEkeywords_generate固定流程插件文本关键词提取QUESTION_GENERATEquestion_generate固定流程插件基于切片生成候选问题SMART_CHUNKsmart_chunk固定流程插件LLM 智能语义切片DOCX_CHUNKdocx_chunk固定流程插件docx 文档切片PDF_CHUNKpdf_chunk固定流程插件pdf 文档切片含版面/OCRTXT_CHUNKtxt_chunk固定流程插件txt、sql 等纯文本切片HTML_CHUNKhtml_chunk固定流程插件htm/html 切片EXCEL_CHUNKexcel_chunk固定流程插件xlsx 切片可转 HTMLMD_CHUNKmd_chunk固定流程插件md/markdown 切片JSON_CHUNKjson_chunk固定流程插件json 切片PPT_CHUNKppt_chunk固定流程插件ppt 切片含页面图片KB_MARK_KEYWORDkb_mark_keyword固定流程插件知识库业务关键词标注文档中建议不要以main_开头的提示正是为了避免与固定流程插件main_rag的命名空间产生冲突。plugins.json插件注册的唯一入口添加自定义插件的方式非常简单修改plugins.json将插件入口文件路径加入数组即可针对预置插件做覆写则通过定义相同插件名称实现。配置文件位于 ask_question_app/admin/conf/plugins.json默认内容如下[ {project_path}/plugins/qa_generate.py, {project_path}/plugins/keywords_generate.py, {project_path}/plugins/question_generate.py, {project_path}/plugins/smart_chunk.py, {project_path}/plugins/docx_chunk.py, {project_path}/plugins/pdf_chunk.py, {project_path}/plugins/txt_chunk.py, {project_path}/plugins/html_chunk.py, {project_path}/plugins/excel_chunk.py, {project_path}/plugins/md_chunk.py, {project_path}/plugins/json_chunk.py, {project_path}/plugins/ppt_chunk.py, {project_path}/plugins/kb_mark_keyword.py ]其中{project_path}是一个占位符。在 consts.py 中定义ROOT_PATH dirname(dirname(dirname(abspath(__file__)))) CONFIG_PATH join(ROOT_PATH, conf, plugins.json) PLUGIN_PARAMETER { project_path: ROOT_PATH }ROOT_PATH指向admin目录随后由 client_manage.py 的get_plugin_path完成格式化def get_plugin_path(path: str) - str: return path.format(**PLUGIN_PARAMETER)因此{project_path}/plugins/qa_generate.py最终会被解析为admin/plugins/qa_generate.py。配置文件在模块导入时即被读取PLUGIN_CONFIG json.load(file)所以新增插件后需要重启服务生效。插件加载与分类启动时的一次性注册插件的加载发生在服务启动阶段。在 admin.py 中settings.init_settings()之后会立即调用generate_plugins()。加载流程由 client_manage.py 的generate_plugin完成def generate_plugin(plugin_path: str): plugin PluginClient(get_plugin_path(plugin_path)) loop asyncio.new_event_loop() # 自管理异步事件循环 plugins.append((plugin, loop)) loop.run_until_complete(plugin.connect()) resp loop.run_until_complete(plugin.session.list_tools()) for tool in resp.tools: tool_name tool.name # 固定tool记录其它tool定义为RAG if is_string_in_enum(tool.name, ToolName): tools_map[tool_name] (plugin, loop, tool) else: rag_tools.append((plugin, loop, tool))每个插件通过 PluginClient 以MCP stdio 协议拉起独立子进程。PluginClient.connect_to_server会根据文件后缀选择启动器.py用python启动.js用node启动会话初始化超时为 20 秒。随后调用session.list_tools()枚举该插件暴露的全部 tooltool 名称命中ToolName枚举 → 登记进tools_map固定流程插件tool 名称未命中枚举 → 追加进rag_toolsRAG 插件多路召回候选。一个插件文件可以同时暴露多个 tool例如自定义插件若同时定义了smart_chunk和另一个业务 tool前者进tools_map后者进rag_tools。这就是覆写预置插件的机制基础——只要你的插件文件里注册了同名 tool如docx_chunk启动时它就会覆盖掉预置实现。exec_plugin固定调用与 RAG 多路并行所有业务代码都通过 exec_plugin 统一调用插件def exec_plugin(tool_name: ToolName, *args): # RAG时多路召回并行处理 if tool_name ToolName.RAG: futures [] with ThreadPoolExecutor(max_workersRAG_CONCURRENCY) as executor: for plugin, loop, tool in rag_tools: future executor.submit(run_async_task, loop, plugin, tool, *args) futures.append((future, tool.name)) results [] for future, name in futures: result future.result() setattr(result, tool_name, name) results.append(result) return results plugin, loop, tool tools_map[tool_name.value] asyncio.set_event_loop(loop) return loop.run_until_complete(plugin.exec(tool.name, *args))关键点RAG 插件多路并行调用ToolName.RAG时会遍历rag_tools中所有 RAG 插件用ThreadPoolExecutor并发执行最大并发数由 consts.py 的RAG_CONCURRENCY 5控制每个结果会被打上tool_name属性供上层区分召回来源。固定流程插件精确路由非 RAG 调用直接从tools_map[tool_name.value]取出对应的plugin, loop, tool三元组执行。每次调用都通过PluginClient.exec→session.call_tool(tool_name, tool_args)完成 MCP 远程调用。自定义插件开发以 FastMCP 编写一个工具服务从源码结构看每个插件本质上是一个FastMCP 服务端以 stdio 传输方式运行。以预置的 qa_generate.py 为例其骨架如下import json import logging import requests from mcp.server.fastmcp import FastMCP import __init__ # 确保把项目根目录加入 sys.path mcp FastMCP(qa_gen) mcp.tool(qa_gen) async def qa_gen(qa_url, payload): try: headers {Content-Type: application/json} for prompt in payload[prompts]: prompt[content] prompt[content].encode(utf-8).decode(unicode_escape) response requests.post(qa_url, datajson.dumps(payload), headersheaders) if response.status_code 200: data response.json() qas_list data.get(QAs, []) return qas_list except Exception as e: raise Exception(str(e)) # 该启动函数是必须的不能删除 if __name__ __main__: logging.debug(, __init__) mcp.run(transportstdio)开发自定义插件时需要遵守的约定必须import __init__每个插件文件都引入了 plugins/init.py其作用是把admin目录写入sys.path使插件能from api.db.services.llm_service import LLMBundle、from deepdoc.parser import PdfParser等。源码注释明确写着日志打印是确保__init__引用因此main块中的logging.debug(, __init__)不能删除。入口函数必须保留mcp.run(transportstdio)启动 MCP stdio 服务端由宿主进程拉起。入参编码约定跨进程传中文时调用方通常用encode(unicode_escape)插件内部先encode(utf-8).decode(unicode_escape)还原二进制文件则先base64.b64encode插件内base64.b64decode。所有预置插件均遵循这一约定。返回类型可以直接返回 list/dict/strMCP 会将其序列化为 tool 调用结果上层如 naive.py再通过item.text读取并用eval/json.loads还原。写入 plugins.json 并注意路径顺序在plugins.json数组末尾追加你的插件路径即可完成注册[ {project_path}/plugins/qa_generate.py, {project_path}/plugins/keywords_generate.py, ..., {project_path}/plugins/my_business_plugin.py ]文档特别强调自定义插件路径需要置于默认插件路径之前覆写才能生效。这是因为generate_plugins按数组顺序逐个连接并枚举 tool先注册的同名 tool 会占据tools_map中的键位后续同名 tool 因tools_map[tool_name] ...被覆盖。若你的插件定义了自己的docx_chunk以覆写预置实现务必把它放在plugins.json数组的开头。预置插件族切片、文本生成与业务标注文档切片插件chunk 系列切片类插件负责把原始文件解析成可向量化的文本块全部位于 ask_question_app/admin/plugins 目录底层复用deepdoc.parser中的解析器插件文件tool 名称底层解析器核心参数docx_chunk.pydocx_chunkDocxParser子类filename, binary, langpdf_chunk.pypdf_chunkPdfParser/PlainParserfilename, lang, binary, parser_config, from_page, to_pagetxt_chunk.pytxt_chunkTxtParserfilename, binary切片长度 128分隔符\n!?。html_chunk.pyhtml_chunkHtmlParserfilename, binaryexcel_chunk.pyexcel_chunkExcelParserbinary, html4excel为真时输出 HTML 表格md_chunk.pymd_chunkMarkdownParserfilename, binary, langchunk_token_num128json_chunk.pyjson_chunkJsonParserbinary切片长度 128ppt_chunk.pyppt_chunkPptParserfilename, binary, lang, from_page经 LibreOffice 转 PDF 提取页面图以调用最复杂的 pdf_chunk.py 为例它支持parser_config控制解析行为layout_recognize默认True为真时走完整PdfParser流程OCR → 版面分析 → 表格结构识别 → 文本合并为假时退化为PlainParser纯文本解析chunk_token_num默认128naive_merge的目标切片 token 数delimiter默认\n!?。切分时的句子边界分隔符。docx 解析另有细节继承自DocxParser的Docx类重写了get_picture会提取段落内嵌图片并做容错跳过无法识别的图片流表格则转成带colspan的 HTML随后通过tokenize_chunks_docx生成带content_with_weight、image等字段的切片字典。LLM 文本生成插件smart_chunk.pysmart_chunk智能语义切片。调用LLMBundle(tenant_id, LLMType.CHAT, llm_name)获取聊天模型用系统提示词要求模型按最小标题层级/问答成段/正文与目录分离规则切分段落之间用------分隔长文本先按page_length4500、tmp_length2300的滑动窗口split_content分批处理再经dup_remove去除跨批重复段落。生成参数为temperature0, top_p0.3, max_tokens5120。keywords_generate.pykeywords_generate关键词提取。复用 dialog_service.py 的keyword_extraction要求模型输出 topN 关键词、英文逗号分隔、仅输出关键词temperature0.2再经rag_tokenizer.tokenize生成important_kwd与important_tks。question_generate.pyquestion_generate候选问题生成。复用question_proposal要求问题不重叠、尽量覆盖正文、每行一个问题输出question_kwd与question_tks。qa_generate.pyqa_gen批量 QA 生成。将多个切片内容组装为 prompts 后 POST 到qa_url环境变量配置解析响应的QAs列表。业务自定义插件kb_mark_keywordkb_mark_keyword.py 是文档中预置插件可覆写最典型的业务场景知识库切片入库前的自定义关键词标注钩子。它接收chunks、task、es_mapping三个参数只有当task.kb_type命中KB_MARK_KEYWORD_LIST见 constant/constants.py时才执行标注逻辑示例实现会向 ES mapping 追加product_name的 keyword 字段并为每个 chunk 填充product_name属性最终返回更新后的es_mapping与chunks。插件的真实调用链从上传文档到入库插件不是孤立运行的它们在解析任务中被串成完整流水线。以 task_executor.py 的处理流程看build_chunks从 MinIO 读取文件二进制按parser_id选择解析器默认 naivenaive.py 的chunk按扩展名分发docx 走DOCX_CHUNK→ 追加SMART_CHUNK智能切片 →OCR识别图片文字txt/py/js 等源码类文本走TXT_CHUNK→SMART_CHUNKpdf 走PDF_CHUNKxlsx/md/html/json/ppt 各自路由切片向量化后、写入 ES 前调用KB_MARK_KEYWORD做业务标注并刷新 mappingtask_executor.py若配置了auto_questions则调用QA_GEN生成 QA 对并写入独立的 QA 向量索引task_executor.pyauto_keywords/ 候选问题分别由KEYWORDS_GENERATE、QUESTION_GENERATE完成。调用链中的切片结果类型由 plugin_types.py 的RetrievalResultid/title/content/source_url/metadata体现RAG 多路召回的返回结果集合则直接来自exec_plugin(ToolName.RAG)。三条必须遵守的注意事项原文档以注意事项收尾这三条在源码中都有对应依据插件中不要使用print输出print会向 MCP stdio 通道写入非协议数据污染与宿主进程的通信导致程序无法正确关闭。宿主通过 stdio 子进程方式管理插件生命周期见 client.py 的stdio_client任何标准输出都必须是合法的 MCP 协议帧。自定义插件路径须位于默认插件路径之前generate_plugins按plugins.json数组顺序依次注册同名 tool 后注册者覆盖先注册者要覆写预置插件必须把自定义插件文件放在数组靠前位置。受限 MCP 协议模式无法并行单个 MCP Server 仅支持一个 RAG 插件这是因为exec_plugin对 RAG 插件按一个插件 一个独立 MCP Server 子进程模型做ThreadPoolExecutor并发如果让一个插件文件暴露多个 RAG tool它们共享同一 stdio 会话无法并行执行反而拖慢多路召回。建议一个 RAG 插件只暴露一个 tool。总结plugins.jsonToolName枚举 exec_plugin构成了 ask_question_app 的插件体系闭环plugins.json决定加载哪些插件ToolName决定哪些是固定流程插件exec_plugin决定如何调用。想要扩展业务能力只需写一个 FastMCP 服务端文件、把路径加入plugins.json注意放在数组前部以便覆写、并在admin启动后生效想要接入 RAG 多路召回则确保插件 tool 名称不以main_开头、不落入ToolName枚举且单个插件只暴露一个 RAG tool。这套机制的配置文件与源码分别位于 conf/plugins.json、api/plugins 与 plugins 目录可作为二次开发的直接参考。赞分享人工智能大模型RAGAI 应用医疗健康数据分析【免费下载链接】agent该项目已停止维护请参考https://gitcode.com/ModelEngine/nexent项目。 致力于汇聚利用 ModelEngine 能力的创新应用开发和推广高质量的应用程序旨在创建一个强大的多智能体架构将各种功能整合为无缝的用户体验。项目地址https://gitcode.com/ModelEngine/agent点击查看免费下载相关推荐Electron Forge 插件系统全解析内置插件、配置方式与运行机制Electron Forge 插件系统全解析内置插件、配置方式与运行机制 Electron Forge 通过一套统一的插件体系来扩展其核心构建能力默认情况下开发工具桌面应用前端构建Hydra 插件配置指南在主配置中覆盖与扩展插件默认配置Hydra 插件配置指南在主配置中覆盖与扩展插件默认配置 本篇技术指南聚焦 Hydra 框架中插件的配置方法。Hydra 的所有插件Launcher、Swe开发工具后端CLIEOSIO Nodeos 插件机制全解析必选核心插件、可选功能插件与配置实战EOSIO Nodeos 插件机制全解析必选核心插件、可选功能插件与配置实战 Nodeos 是 EOSIO 区块链的核心节点程序其功能以插件plugin区块链上一篇如何用tsfresh从时间序列中自动提取关键特征完整指南下一篇Qwen2.5-Coder-32B-Instruct快速入门5分钟搭建你的AI编程助手创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

PrismLauncher 构建配置解析:vcpkg Triplet 覆盖机制与 static-release 跨平台依赖管理

PrismLauncher 构建配置解析:vcpkg Triplet 覆盖机制与 static-release 跨平台依赖管理

桌面应用 【免费下载链接】PrismLauncher A custom launcher for Minecraft that allows you to easily manage multiple installations of Minecraft at once (Fork of MultiMC) 项目地址: https://gitcode.com/gh_mirrors/pr/PrismLauncher 点击查看 免费下载 导…

2026/10/14 2:16:21 阅读更多 →
Grafana二次开发实战:自定义面板插件与数据源适配

Grafana二次开发实战:自定义面板插件与数据源适配

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/14 2:15:21 阅读更多 →
MapWinGis 编译与投影转换实战:从 msvc 工具集到 ocx 注册

MapWinGis 编译与投影转换实战:从 msvc 工具集到 ocx 注册

简介:这份资源包面向使用 Visual Studio 2019(MSVC)开发环境的 GIS 程序员,提供 MapWinGis 开源地理信息系统框架运行与编译所需的全部第三方组件,解决在 Windows 平台搭建 GIS 应用时依赖库缺失、版本不匹配的问题。包…

2026/10/14 2:15:21 阅读更多 →

最新新闻

容器内nvidia-smi报Unknown Error的排查与根治

容器内nvidia-smi报Unknown Error的排查与根治

凌晨两点半,工作群里弹出一条消息:某个长期跑的容器,前一秒还好好的,后一秒容器里的nvidia-smi直接报Failed to initialize NVML: Unknown Error。宿主机上执行nvidia-smi一切正常,新建一个临时容器也能正常看到卡&…

2026/10/14 3:03:31 阅读更多 →
年会抽奖九宫格+转盘小程序:动画与随机逻辑避坑指南

年会抽奖九宫格+转盘小程序:动画与随机逻辑避坑指南

简介:一份面向企业年会场景的抽奖小程序资源,包含九宫格抽取幸运者和转盘抽奖两个页面,无需数据库,所有数据以静态方式配置,可直接用于年会“抽人发红包”环节。规则设计完整:先用九宫格抽出一名免红包幸运…

2026/10/14 3:03:31 阅读更多 →
DeepEMD:用可微分推土机距离破解小样本图像分类难题

DeepEMD:用可微分推土机距离破解小样本图像分类难题

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/14 3:03:31 阅读更多 →
FFT傅立叶变换股价周期分析:从频谱原理到量化回测实战

FFT傅立叶变换股价周期分析:从频谱原理到量化回测实战

先说一句大家可能不太爱听的话:把傅立叶变换用在股价预测上,市场上九成的人都觉得这是“花架子”,但真正用好了的人,都把它当成一种周期量化的辅助工具,而不是一台印钞机。我自己在量化分析这条路上摸索了几年&#xf…

2026/10/14 3:03:31 阅读更多 →
CLRC663 Pin-to-Pin替代实战:硬件迁移与固件适配全解析

CLRC663 Pin-to-Pin替代实战:硬件迁移与固件适配全解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/14 3:03:31 阅读更多 →
Apache Mesos 0.18.0 发布:隔离策略重构为 Containerizer / Isolator API 的技术解读

Apache Mesos 0.18.0 发布:隔离策略重构为 Containerizer / Isolator API 的技术解读

云原生 【免费下载链接】mesos Apache Mesos 项目地址: https://gitcode.com/gh_mirrors/mesos2/mesos 点击查看 免费下载 Apache Mesos 0.18.0 是一次以架构演进为核心的里程碑版本:它将此前"单一隔离策略"的实现重构为 Containerizer API&a…

2026/10/14 3:02:31 阅读更多 →

日新闻

AnyPS5通用适配层设计:兼容性与性能的工程取舍

AnyPS5通用适配层设计:兼容性与性能的工程取舍

1. 从"AnyPS5"这个名字说起:它到底想解决什么问题第一次看到"AnyPS5"这个标题,我脑子里冒出来的第一个念头是:这大概率是一个围绕"跨平台运行"或者"通用适配"做文章的项目。名字里的"Any"…

2026/10/14 0:00:41 阅读更多 →
Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

1. 项目概述:Flutter跨平台二手交易应用开发作为一名长期从事移动应用开发的工程师,我最近完成了一个基于Flutter框架的二手物品交易平台项目。这个项目最吸引我的地方在于它完美结合了Flutter的跨平台优势与HarmonyOS的生态特性,实现了"…

2026/10/14 0:00:41 阅读更多 →
DFS算法解决飞机降落调度问题实战

DFS算法解决飞机降落调度问题实战

1. 项目背景与核心思路飞机降落问题是一个经典的调度优化场景,也是算法竞赛和面试中的高频题目。这个题目要求我们合理安排多架飞机的降落顺序和时间,确保所有飞机都能安全着陆而不发生冲突。在实际航空管制中,这类问题直接关系到飞行安全和机…

2026/10/14 0:00:41 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/13 2:54:56 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/13 16:22:04 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/13 1:58:08 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 22:01:27 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 14:57:39 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 18:11:17 阅读更多 →