需先创建继承think\console\Command的AiPlugin.php作为入口基类,否则artisan无法识别;再通过正则或Ollama小模型为控制器方法自动生成PHPDoc注释;接着用NlpHandler.php解析自然语言指令并归一化映射;最后打包发布为vendor/yourname/ai-tools插件。

你想把日常重复的ThinkPHP开发任务(比如自动生成控制器、批量修改模型字段、导出接口文档)封装成一条命令就能运行的AI插件,而不是每次打开IDE手动敲代码、复制粘贴、反复调试。
准备插件运行环境
在项目根目录下执行 composer require thinkphp/skill,确保已安装 ThinkPHP 6.1+ 且支持命令行扩展。
创建 app/command/AiPlugin.php 文件,继承 think\console\Command,这是所有插件的入口基类。
这一步不能跳过——【缺少 Command 基类会导致 artisan 命令无法识别该类】,后续所有功能都依赖这个基础结构。
立即学习“PHP免费学习笔记(深入)”;
编写第一个AI插件:自动补全控制器方法注释
方法一:用正则匹配 + 预设模板
在 AiPlugin.php 的 execute() 方法里,读取当前控制器文件内容 → 用 preg_match_all('/public function (\w+)\(/', $content, $matches) 提取所有方法名 → 对每个方法名查 config/ai_comment.php 中预定义的用途描述 → 拼接 PHPDoc 字符串并插入到方法上方。
方法二:调用本地小模型(需提前部署 Ollama)
执行 exec("ollama run qwen:0.5b '用中文为ThinkPHP控制器方法".$method."生成简洁的@desc和@param注释,只返回PHPDoc,不要解释' 2>/dev/null", $output) → 取 $output[0] 作为注释块。
注意:若本地未运行 ollama serve,此方法会卡住 3 秒后返回空,建议先用 shell_exec('pgrep -f "ollama serve"') 做存活检测。
让插件响应自然语言指令
第一步:在 command 目录下新建 NlpHandler.php,定义 parse($input) 方法。
第二步:用关键词规则初步分类:if (stripos($input, '加个') !== false && stripos($input, '验证') !== false) return ['action' => 'add_validation', 'target' => 'model'];
第三步:对模糊表述做归一化,例如把“用户表”→“UserModel”,“后台接口”→“app\admin\controller\User”——这些映射关系必须预先写在 config/ai_mapping.php 里,否则无法定位真实类路径。
第四步:将归一化结果传给对应插件模块,例如 new ValidationInjector()->run($parsed);。
打包发布为可复用插件
删除 app/command/ 下所有测试用临时类,只保留 AiPlugin.php 和 NlpHandler.php。
在项目根目录执行 php think build:plugin ai-tools --author="YourName" --desc="ThinkPHP AI辅助开发套件"。
命令执行完成后,会在 vendor/yourname/ai-tools 下生成标准插件包,并自动注册服务提供者。



















