第一个插件:apply(ctx) 与三种形态
审计依据 ·
与教程及官方事故复盘 0001 的描述一致。 查看本节审计记录
写出最小插件,理解 ctx 的作用,并避开 default export 丢 inject 的坑。
源码安装完成;会 TypeScript 基础。
- 插件导出
name与apply(ctx);框架加载时调用 apply,ctx 既是注册入口也是资源账本。 - 三种形态:函数、对象、Service 子类;大多数插件用函数形式,需要提供服务时用类形式。
- 对象形态不要再写
export default apply:Loader 会取 default 裸函数,命名空间上的 inject 会整个丢失(官方复盘 0001)。 - 本地开发时插件路径必须是绝对路径;相对路径不会被 Loader 按预期解析。
- apply 里不要做长时间阻塞;重活应注册成工具或后台任务。
写一个 hello-plugin,加载时打印日志;再改成对象形态并声明 inject: ['tools'],用 dump-config 或日志确认 inject 没有丢。
跟着做
从已完成安装和构建的官方源码目录开始。这个插件只输出加载日志,不依赖模型或 API Key。
- 在源码根目录创建 scratch-plugin/src 目录。
- 将下面的完整模块保存为 scratch-plugin/src/study-plugin.ts。
- 接着按 3.2 的配置加载它;仅保存文件不会自动加载插件。
export const name = 'study-plugin'
export function apply() {
console.log('[study-plugin] ready')
}
预期结果
完成 3.2 的加载后,终端出现 [study-plugin] ready。当前示例没有注册工具,工具列表不增加条目。
没有得到预期结果?
- 没有日志:先检查是否传入 3.2 的 patch 文件。
- 模块无法解析:确认文件名与配置中的绝对路径一致。
- 只有文件保存成功:继续完成加载步骤,再判断插件是否工作。
文档对照: · 官方示例与说明。示例未在你的环境或真实模型端点运行。