Yii2接入OpenAI构建智能内容生成模块,核心是封装SDK为应用组件、结合i18n实现多语言提示词注入、模块化隔离配置、生成结果经缓存与人工审核双保险后入库。

Yii2接入OpenAI构建智能内容生成模块,核心在于打通框架生命周期与外部AI服务的稳定调用链路,同时兼顾安全性、可维护性和多语言内容适配能力。不依赖复杂中间件,用原生组件就能实现高可用文本生成服务。
配置OpenAI客户端并封装为Yii2组件
避免在控制器中硬编码API调用逻辑,推荐将OpenAI SDK封装为Yii2应用级组件。在config/web.php中注册:
- 安装官方SDK:
composer require openai-php/client - 在
components中添加:'openai' => [<br> 'class' => 'app\components\OpenAIClient',<br> 'apiKey' => getenv('OPENAI_API_KEY'),<br> 'model' => 'gpt-3.5-turbo'<br>], -
app\components\OpenAIClient继承yii\base\Component,内部使用OpenAI\Client实例,统一处理异常、超时和重试
设计支持多语言的内容生成动作
利用Yii2的i18n机制,让同一提示词模板自动适配目标语言。例如生成产品描述时,提示结构为:
统一LLM网关 - 一个API对接70+AI模型,使用单一API密钥即可调用GPT、Claude、Gemini、Qwen、Deepseek、Grok等主流模型。
"请用{language}撰写一段200字以内关于{product_name}的营销文案,语气专业简洁"- {language}由
Yii::$app->language动态注入,如zh-CN或en-US - 后端调用前先校验
Yii::$app->i18n->getLanguage()是否在白名单内,防止非法语言参数穿透
模块化集成与参数隔离
将AI生成功能封装为独立模块(如ai-content),避免污染主应用配置。关键实践包括:
- 模块根目录下定义
Module.php,声明public $params = [];,并在init()中加载config/params.php - 参数文件只包含AI相关配置:
'max_tokens' => 512, 'temperature' => 0.7, 'enable_cache' => true - 控制器中通过
$this->module->params['max_tokens']安全访问,杜绝Undefined array key错误
生成结果入库与审核闭环
生成内容不能直出,需经缓存+审核双保险:
- 调用OpenAI返回后,先存入MySQL临时表
ai_generated_drafts,含字段:prompt、raw_output、status(pending/approved/rejected) - 后台提供审核列表页,支持人工编辑、一键发布或驳回;发布时自动写入正式内容表,并关联原文ID与语言标识
- 启用Redis缓存已审核内容,键名为
ai:content:{md5(prompt)}:{lang},TTL设为24小时,降低重复调用成本

















