Skip to content

客户端内部实现(类加载与配置装配) ​

插件的架构与生命周期契约(流水线与插入点、扫描根、双轨分流、启用/禁用与互斥、依赖门禁) 以及安全红线都已在知识卡片各自成页,本页不再重复:

主题卡片
流水线与插件插入点 · 扫描根 · 生命周期 · 双轨 · 启用禁用 · 依赖门禁运行架构与生命周期
12 种 type 的分工与选型类型总览与选型
安全红线 · 运行环境 · 私有依赖运行环境与安全红线
全部卡片插件开发文档

本页只讲客户端内部怎么把插件装起来:Python 类加载与配置装配。


1. Python 类加载 ​

对 asr / mt / tts / middleware / assistant / interpretation / tool:

  1. 解析 entrypoint 为 相对路径.py:ClassName(没有冒号时 ClassName = "Plugin")
  2. importlib 从文件加载模块
  3. 要求类继承 BasePlugin 子类
  4. cls(manifest) → initialize(config)
  5. 实例缓存;卸载时调 shutdown()

数据类(glossary / i18n / theme)不走这一步——它们只被当作数据挂载。 entrypoint 的完整规则见 目录结构与 mod.json。

外部插件(非内置)的 initialize() 跑在后台线程,宿主在真正需要前会等它收敛—— 所以 initialize 里阻塞几秒不会卡 UI,但也不要用它启动本地服务 (见 本地服务型引擎强制契约)。


2. 配置装配 ​

情况宿主怎么做详见
普通字段用 config_schema 渲染通用表单(工坊卡片内联 / 独立设置 Tab)config_schema 声明式表单
定制 UX(去获取 Key / 测试连接 / 双通道 Base URL)优先加载插件的 ui_extensions.settings_view QML;不会仅凭 schema 自动生成自定义设置页
持久化存进 QSettings plugins_config/<id>;Python 侧读 self._config,变更走 update_config配置与私有数据

3. 安全模型 ​

无沙箱:Python 插件与主程序同进程、同权限。数据类(theme / glossary / i18n)风险较低, 脚本类请审计后安装。完整红线(禁止运行时 pip、隐私、越权改配置等)见 运行环境与安全红线。

TransBox - 赋能全人类无界限跨语言交流