能将SOP文档直接转化为ThinkPHP后台可自动触发的AI调用插件。需四步:一梳理SOP为结构化技能描述并建表;二创建Skill类并规范注释;三用PHP、Service或API实现handle逻辑;四注册配置、中间件解析触发并返回JSON。

你想把公司内部的标准化操作流程(SOP)文档,比如“客户投诉处理六步法”或“新员工入职材料归档清单”,直接变成AI能理解、能调用、能在ThinkPHP后台自动触发执行的插件,而不是写一堆重复的if-else逻辑或手动复制粘贴提示词。
第一步:梳理SOP为结构化技能描述
打开你的SOP文档,逐条划出动作主体、输入条件、执行步骤、输出结果。例如“客服收到邮件→判断是否含‘投诉’关键词→提取客户手机号→查CRM系统→生成工单→发送短信通知”。这一步漏掉任一判断节点,后续就无法映射到代码分支。
将每个动作抽象成一个动宾短语,如“提取手机号”“查CRM接口”“生成工单记录”,这些就是未来Skill类里的方法名雏形。
用表格整理字段:技能名、触发关键词、必需参数、可选参数、失败重试次数。其中【触发关键词必须唯一且不可含空格】,比如用“complain_handle”而非“客户投诉处理”。
立即学习“PHP免费学习笔记(深入)”;
第二步:在ThinkPHP中创建Skill插件目录与基础类
在app目录下新建文件夹:app/Skill/ComplainHandleSkill.php。
写入基础类框架,继承think\Service,并声明use think\facade\Db、think\facade\Cache等实际会用到的门面类。类名必须与文件名严格一致,首字母大写,结尾带Skill后缀。
在类顶部添加注释,用@skill标注触发关键词,用@param标注每个参数的类型和含义,AI解析器靠这个生成调用签名——【缺少@param注释会导致参数传空或类型错乱】。
第三步:实现核心执行逻辑
方法一:纯PHP实现(适合已有业务逻辑复用)
在ComplainHandleSkill类中定义handle方法,接收数组参数,先校验手机号格式→调用Db::name('customer')->where('mobile', $mobile)->find()→用Db::name('ticket')->insert()写入工单→最后返回['status' => 'success', 'ticket_id' => $id]。
方法二:组合已有Service(适合解耦场景)
在handle中实例化app\Service\CustomerService和app\Service\TicketService,分别调用其getByMobile()和createFromComplain()方法。这样修改CRM查询逻辑时,只动CustomerService,不影响Skill本身。
方法三:调用外部API(适合对接钉钉/企微机器人)
用think\Http::post()请求钉钉群机器人Webhook,payload里填入格式化后的投诉摘要。注意设置timeout=5,避免AI等待超时中断流程。
第四步:注册Skill并绑定触发器
① 在config/skill.php中新增配置项:'complain_handle' => app\Skill\ComplainHandleSkill::class;
② 打开app/middleware/SkillInvoker.php中间件,在handle方法里解析用户输入文本,用strpos($input, 'complain_handle')粗筛,再用正则preg_match('/手机号[::\s]*(\d{11})/', $input, $m)提取参数;
③ 实例化对应Skill类,反射调用handle方法,捕获Throwable异常并返回统一错误结构['status' => 'error', 'message' => '查不到该手机号'];
④ 将结果JSON编码后直接echo,不经过任何模板渲染——AI只认纯JSON响应。



















