发布时间:2026/8/13 12:53:32
个人AI助手插件开发实战:从零打造天气/翻译/待办三个实用插件 本文是"个人AI助手平台"系列第五篇。建议先阅读前四篇了解基础架构后再看本文。一、为什么需要插件前面的文章里我们搭好了架构、部署上了云、打通了四个IM通道。但一个只会聊天的 AI 助手太单薄了——用户问"明天会下雨吗",你需要查询天气;用户说"帮我记下这条待办",你需要持久化存储。插件的价值:能力扩展:让 AI 能查天气、做翻译、管理待办——不再是一个只会聊天的花瓶热加载:新增能力不用重启服务,开发者写好插件、丢进插件目录就生效社区生态:参照 VS Code 插件市场模式,任何人都可以贡献插件本文带你从零写出三个完整可运行的插件,并掌握插件开发范式。二、插件规范(Plugin Specification)先定义插件接口——所有插件必须遵守的契约:// plugin-spec.tsexportinterfacePluginManifest{/** 插件唯一标识,如 "weather" */id:string;/** 显示名称 */name:string;/** 版本号 */version:string;/** 作者 */author:string;/** 一句话描述 */description:string;/** 所需权限 */permissions:string[];/** 触发关键词,如 ["天气", "weather"] */triggers:string[];}exportinterfacePluginContext{/** 用户ID */userId:string;/** 所属群聊ID */channelId?:string;/** 插件数据存储路径(持久化用) */dataDir:string;/** 日志函数 */logger:PluginLogger;/** 发送消息到当前通道 */sendMessage:(text:string)=Promisevoid;}exportinterfacePluginLogger{info:(msg:string)=void;warn:(msg:string)=void;error:(msg:string,err?:Error)=void;}/** * 插件基类——所有插件必须继承 */exportabstractclassBasePlugin{abstractreadonlymanifest:PluginManifest;/** * 初始化(插件加载时调用一次) */abstractonInit(ctx:PluginContext):Promisevoid;/** * 收到消息时调用 * @returns true 表示已处理该消息(不再向下传递) */abstractonMessage(message:string,ctx:PluginContext):Promise{handled:boolean;reply?:string};/** * 卸载插件时调用(清理资源) */abstractonDestroy():Promisevoid;}三、插件管理器(动态加载)插件管理器负责扫描插件目录、加载、卸载、热更新:// plugin-manager.tsimport*asfsfrom'fs';import*aspathfrom'path';import{BasePlugin,PluginContext,PluginManifest}from'./plugin-spec';interfaceLoadedPlugin{instance:BasePlugin;manifest:PluginManifest;filePath:string;lastModified:number;}exportclassPluginManager{privateplugins:Mapstring,LoadedPlugin=newMap();privatectx:PluginContext;privatehotWatchInterval:NodeJS.Timeout|null=null;constructor(ctx:PluginContext,privatepluginsDir:string){this.ctx=ctx;}/** * 启动:扫描并加载所有插件、启动热监听 */asyncstart():Promisevoid{awaitthis.loadAll();this.startHotWatch();this.ctx.logger.info(`插件管理器已启动,加载${this.plugins.size}个插件`);}/** * 停止:卸载所有插件 */asyncstop():Promisevoid{if(this.hotWatchInterval)clearInterval(this.hotWatchInterval);for(const[id,loaded]ofthis.plugins){awaitloaded.instance.onDestroy();this.ctx.logger.info(`插件${id}已卸载`);}this.plugins.clear();}/** * 处理消息——遍历所有插件,第一个处理的生效 */asynchandleMessage(message:string):Promisestring|null{for(const[id,loaded]ofthis.plugins){try{constresult=awaitloaded.instance.onMessage(message,this.ctx);if(result.handledresult.reply){this.ctx.logger.info(`插件 [${id}] 处理了消息`);returnresult.reply;}}catch(err){this.ctx.logger.error(`插件 [${id}] 处理消息出错`,errasError);}}returnnull;// 无插件处理}/** * 扫描并加载所有插件 */privateasyncloadAll():Promisevoid{if(!fs.existsSync(this.pluginsDir)){fs.mkdirSync(this.pluginsDir,{recursive:true});return;}constfiles=fs.readdirSync(this.pluginsDir);for(constfileoffiles){if(file.endsWith('.js')||file.endsWith('.ts')){awaitthis.loadPlugin(path.join(this.pluginsDir,file));}}}/** * 加载单个插件 */privateasyncloadPlugin(filePath:string):Promisevoid{try{// 清除 require 缓存以支持热更新constresolvedPath=require.resolve(filePath);deleterequire.cache[resolvedPath];constPluginClass=require(filePath).default;constinstance:BasePlugin=newPluginClass();constmanifest=instance.manifest;if(this.plugins.has(manifest.id)){this.ctx.logger.warn(`插件${manifest.id}已存在,跳过重复加载`);return;}awaitinstance.onInit(this.ctx);conststats=fs.statSync(filePath);this.plugins.set(manifest.id,{instance,manifest,filePath,lastModified:stats.mtimeMs,});this.ctx.logger.info(`插件 [${manifest.id}] v${manifest.version}加载成功`);}catch(err){this.ctx.logger.error(`加载插件失败:${filePath}`,errasError);}}/** * 启动热监听:每 3 秒检查插件文件是否变化 */privatestartHotWatch():void{this.hotWatchInterval=setInterval(async()={for(const[id,loaded]ofthis.plugins){try{conststats=fs.statSync(loaded.filePath);if(stats.mtimeMsloaded.lastModified){this.ctx.logger.info(`检测到插件 [${id}] 文件变化,热更新中...`);awaitloaded.instance.onDestroy();this.plugins.delete(id);awaitthis.loadPlugin(loaded.filePath);}}catch(err){// 文件可能被删除,忽略}}},3000);}/** * 获取已加载插件列表 */getLoadedPlugins():PluginManifest[]{returnArray.from(this.plugins.values()).map(p=p.manifest);}}四、实战一:天气查询插件4.1 设计思路触发词:天气、weather、会下雨、多少度依赖:调用公开天气 API(Open-Meteo,免费无需 Key)返回格式:城市名 + 温度 + 天气状况 + 穿衣建议4.2 完整代码

相关新闻

2026/8/13 13:53:51

基于卡尔曼滤波的人脸跟踪

前言: 卡尔曼滤波,古老而神秘。在数据处理的世界里,我们早已拥有诸多优秀的算法:低通滤波、高通滤波、半径滤波、K近邻滤波、均值滤波……它们各司其职,稳健可靠。然而,唯有卡尔曼滤波,仿佛是在…

2026/8/13 13:53:51

Axure RP 11汉化完整指南:10分钟让3259条界面词条全部变中文

Axure RP 11汉化完整指南:10分钟让3259条界面词条全部变中文 【免费下载链接】axure-cn Chinese language file for Axure RP. Axure RP 简体中文语言包。支持 Axure 11、10、9。不定期更新。 项目地址: https://gitcode.com/gh_mirrors/ax/axure-cn 如果你正…

2026/8/13 13:53:51

Android16 连接ARC,遥控器调节音量,ARC会静音一下再有声音

由于在HdmiCecController中有添加自定义的逻辑,先查看相关log分析一下。可以看到,在发送了Volume up之后立刻又发送了Volume mute,而我们实际操作只按了一下音量加,不符合我们的操作,这里往上追了一下,发现…

2026/8/13 13:53:51

工业通信设备在企业能碳管理系统中的关键作用

1. 企业能碳管理系统的通信需求解析 在双碳目标背景下,企业能碳管理系统正成为生产运营的"神经中枢"。这类系统需要实时采集分布在厂区各处的电表、燃气表、蒸汽流量计等计量设备数据,监测范围往往覆盖数万平方米的厂区。普通商用通信设备在这…

2026/8/13 13:53:51

毕业前夜的救星:南京大学学位论文LaTeX模板速通上手指南

毕业前夜的救星:南京大学学位论文LaTeX模板速通上手指南 【免费下载链接】njuthesis-nju-thesis-template 南京大学学位论文(本科/硕士/博士),毕业论文LaTeX模板 项目地址: https://gitcode.com/gh_mirrors/nj/njuthesis-nju-thesis-template 南京…

2026/8/13 13:48:51

智能体技能框架:从原子化设计到工程化落地的开发实践

1. 项目概述:为什么我们需要为智能体构建“技能框架”?最近和几个做AI应用落地的朋友聊天,大家不约而同地提到了同一个痛点:智能体(Agent)的开发,太“散装”了。今天用LangChain搭一个客服机器人…

2026/8/12 10:37:12

如何快速生成中国车牌图片:Python开源工具完整指南

如何快速生成中国车牌图片:Python开源工具完整指南 【免费下载链接】chinese_license_plate_generator 中国车牌生成器 项目地址: https://gitcode.com/gh_mirrors/ch/chinese_license_plate_generator 中国车牌生成器是一个基于Python的开源项目&#xff0c…

2026/8/12 5:35:25

当 LLM 遇见大文档:主流开源项目如何处理上下文超限

从 Agentic Loop 到 Repo Map,七种策略与六类陷阱引言:128K vs 10MB 的硬冲突 2026 年的 LLM 上下文窗口已达到 128K ~ 1M token(≈ 0.5MB ~ 4MB 文本),但 LLM 想要处理的真实数据规模远远超过这个量级:真实…

2026/8/13 0:02:21

Prefix Cache

Prefix Cache(前缀缓存) 是大模型推理引擎(如 vLLM、SGLang、TensorRT-LLM)中用于跨请求复用已计算 KV Cache 的核心内存与计算优化技术。 它的核心目的在于:彻底消除重复 Prompt 的 Prefill 阶段计算,将首…

2026/8/13 0:02:21

VSCode插件精选:从AI补全到代码规范,打造高效开发环境

1. 项目概述:为什么说插件是VSCode的灵魂?如果你和我一样,每天有超过8小时的时间是在VSCode里度过的,那你肯定明白,一个顺手的开发环境有多重要。VSCode本身已经足够优秀了,但真正让它从“好用的编辑器”蜕…

2026/8/13 0:02:21

如何快速完成文件批量重命名:FreeReNamer终极指南

如何快速完成文件批量重命名:FreeReNamer终极指南 【免费下载链接】FreeReNamer 功能强大又易用的文件批量重命名软件 项目地址: https://gitcode.com/gh_mirrors/fr/FreeReNamer 你是否曾经面对成百上千个杂乱无章的文件感到头疼?传统的手动重命…

2026/8/10 11:20:30

实测才敢推 AI论文网站 2026最新测评与推荐

2026年真正好用的AI论文网站,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。一、综…

2026/8/11 17:06:59

2026必备!AI论文网站测评:最新推荐与深度对比

2026年真正好用的AI论文网站,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。 一、…

2026/8/11 3:05:11

摆脱论文困扰!盘点2026年全网爆红的的AI论文写作工具

一天写完毕业论文在2026年已不再是天方夜谭。2026年最炸裂、实测能大幅提速的AI论文写作工具,覆盖选题构思、文献整理、内容生成、格式排版等核心场景,真正帮你高效搞定论文难题。 一、全流程王者:一站式搞定论文全链路(一天定稿首…