本方案核心定位:PHP作为AI调度中枢,无需开发/训练AI模型,通过调用国内主流大模型API(通义千问、DeepSeek、讯飞星火等),快速为老PHP网站(ThinkPHP/Laravel/帝国CMS等)新增AI功能,兼顾低成本、快落地、高适配,适配中小企业、CMS内容站、电商老站等常见场景,全程无需重构老站核心代码,仅做“接口对接+功能嵌入”。
适用前提:PHP版本≥7.4(建议升级至8.0+,兼容性更好);老站已具备基础数据库(MySQL)、可正常访问外网;具备基础PHP开发能力(能写接口、调用第三方API);预算可控(日均几元起)。
一、方案总览(核心逻辑+实施周期)
1.1 核心逻辑
PHP老站 → 封装AI调用工具类(统一请求、异常处理) → 对接大模型API(优先选国内,无需科学上网) → 结合老站业务场景(内容、客服、数据等) → 嵌入前端页面/后台管理 → 测试上线 → 运维监控。
核心优势:不改动老站原有业务逻辑,低侵入式改造;开发周期短(1-2周可落地1-2个核心场景);成本低(按API调用量计费,起步成本低);适配所有PHP老站架构。
1.2 实施周期(总周期14-21天,可按需拆分)
- 准备阶段(1-2天):大模型API申请、PHP环境适配、工具类封装;
- 场景开发阶段(7-14天):按优先级开发AI功能(1个场景3-5天);
- 测试阶段(2-3天):功能测试、兼容性测试、API调用稳定性测试;
- 上线运维阶段(1-2天):部署上线、监控告警配置。
二、核心场景落地(优先选2个场景切入,性价比最高)
优先选择“开发成本低、用户感知强、能直接提升效率/转化”的场景,以下4个场景可直接复用代码,无需额外开发复杂逻辑,适配绝大多数PHP老站。
场景1:AI内容生成(适配CMS、资讯站、电商产品页,最易落地)
1. 功能目标
在老站后台新增“AI内容生成”按钮,支持:自动生成文章/新闻/公告、产品详情页文案、内容摘要、SEO标题/关键词;支持自定义字数、语气(正式/口语/专业)、行业适配(如电商、教育、制造)。
2. 技术实现(以ThinkPHP8为例,Laravel可直接复用逻辑)
(1)大模型选择
优先选「通义千问API」(阿里云旗下,稳定性高、中文适配好、价格低),申请地址:阿里云通义千问开放平台,申请步骤:注册账号 → 开通API服务 → 获取API Key和Secret(免费额度足够测试,正式使用按调用量计费)。
(2)封装AI调用工具类(核心代码,可直接复制)
在ThinkPHP的extend目录下新建Ai/ApiClient.php,统一处理API请求、签名、异常:
<?php
namespace Ai;
use GuzzleHttp\Client;
use think\Exception;
class ApiClient
{
// 通义千问API地址(固定)
private $apiUrl = 'https://dashscope.aliyuncs.com/api/v1/services/aigc/text-generation/generation';
// 自己申请的API Key
private $apiKey = '你的通义千问API Key';
// 核心调用方法:生成内容
public function generateContent($prompt, $maxTokens = 1000, $temperature = 0.7)
{
try {
$client = new Client(['timeout' => 30]);
$response = $client->post($this->apiUrl, [
'headers' => [
'Content-Type' => 'application/json',
'Authorization' => 'Bearer ' . $this->apiKey
],
'json' => [
'model' => 'qwen-max', // 通义千问基础模型,足够日常内容生成
'input' => [
'prompt' => $prompt
],
'parameters' => [
'max_tokens' => $maxTokens, // 最大生成字数
'temperature' => $temperature, // 随机性(0-1,越小越严谨)
'top_p' => 0.9
]
]
]);
$result = json_decode($response->getBody()->getContents(), true);
// 处理返回结果,提取生成的内容
if (isset($result['output']['text'])) {
return ['code' => 200, 'data' => $result['output']['text']];
} else {
return ['code' => 400, 'msg' => $result['error']['message'] ?? '内容生成失败'];
}
} catch (Exception $e) {
return ['code' => 500, 'msg' => 'API调用异常:' . $e->getMessage()];
}
}
}
?>
(3)后台接口开发(对接前端按钮)
在admin模块新建控制器AiContentController.php,写接口用于接收前端请求,调用工具类生成内容:
<?php
namespace app\admin\controller;
use app\common\controller\AdminBase;
use Ai\ApiClient;
use think\facade\Request;
class AiContentController extends AdminBase
{
// AI生成内容接口
public function generate()
{
$params = Request::post();
// 接收前端传参:内容类型、字数、语气、行业
$type = $params['type'] ?? 'article'; // article=文章,product=产品文案,summary=摘要
$length = $params['length'] ?? 500;
$tone = $params['tone'] ?? '正式';
$industry = $params['industry'] ?? '通用';
$keyword = $params['keyword'] ?? ''; // 核心关键词
// 构建Prompt(关键:让AI生成符合需求的内容)
$prompt = $this->buildPrompt($type, $length, $tone, $industry, $keyword);
// 调用AI工具类
$aiClient = new ApiClient();
$result = $aiClient->generateContent($prompt, $length);
return json($result);
}
// 构建Prompt(可根据需求修改,优化生成效果)
private function buildPrompt($type, $length, $tone, $industry, $keyword)
{
switch ($type) {
case 'article':
return "作为{$industry}行业的专业作者,以{$tone}语气,围绕关键词【{$keyword}】,撰写一篇{$length}字左右的文章,结构清晰、逻辑连贯,符合SEO优化,无冗余内容,语言流畅。";
case 'product':
return "作为{$industry}行业的产品文案师,以{$tone}语气,围绕关键词【{$keyword}】,撰写一段{$length}字左右的产品详情文案,突出产品优势、使用场景,吸引用户购买,语言简洁有感染力。";
case 'summary':
return "作为专业编辑,以{$tone}语气,围绕关键词【{$keyword}】,撰写一段{$length}字左右的内容摘要,提炼核心信息,不添加额外内容,简洁明了。";
default:
return "以{$tone}语气,围绕关键词【{$keyword}】,撰写一段{$length}字左右的{$industry}行业内容,语言流畅、逻辑清晰。";
}
}
}
?>
(4)前端嵌入(低侵入式,无需重构)
在老站后台的“文章添加/编辑”“产品添加/编辑”页面,新增3个元素:
- 选项区:内容类型(文章/产品/摘要)、字数、语气、行业(下拉选择);
- 按钮:“AI生成内容”(点击调用上面的接口);
- 内容回显:生成成功后,自动填充到内容编辑器(如UEditor、KindEditor),支持手动修改。
前端JS核心代码(jQuery示例,可适配老站前端):
// 点击AI生成按钮
$("#ai-generate-btn").click(function() {
var type = $("#content-type").val();
var length = $("#content-length").val();
var tone = $("#content-tone").val();
var industry = $("#content-industry").val();
var keyword = $("#content-keyword").val();
// 校验参数
if (!keyword) {
alert("请输入核心关键词");
return;
}
// 加载状态
$(this).text("生成中...").prop("disabled", true);
// 调用后台接口
$.post("/admin/ai-content/generate", {
type: type,
length: length,
tone: tone,
industry: industry,
keyword: keyword
}, function(res) {
$("#ai-generate-btn").text("AI生成内容").prop("disabled", false);
if (res.code == 200) {
// 填充到编辑器(根据老站编辑器类型调整)
UE.getEditor('content').setContent(res.data);
} else {
alert(res.msg);
}
}, "json");
});
(5)优化点
1. 增加缓存:将生成的内容缓存到Redis(有效期1小时),避免重复调用API,降低成本;
2. 内容过滤:调用AI后,新增敏感词过滤(可对接阿里云内容安全API),避免违规内容;
3. 批量生成:支持批量输入关键词,一次性生成多篇内容,提升后台效率。
场景2:智能客服/企业知识库问答(适配所有老站,提升用户体验)
1. 功能目标
在老站前端(底部/右侧)新增“智能客服”悬浮窗,用户输入问题后,AI自动匹配企业知识库(老站已有的FAQ、产品说明、联系方式等),给出精准回答;无法回答时,自动转接人工客服(对接老站现有客服系统)。
2. 技术实现(复用场景1的AI工具类,新增知识库对接)
(1)知识库准备(无需额外数据库,复用老站现有数据)
从老站数据库中提取核心知识,整理成“问题-答案”格式,示例(可存在MySQL表中,表结构如下):
-- 企业知识库表(可新增到老站数据库) CREATE TABLE `ai_knowledge` ( `id` int(11) NOT NULL AUTO_INCREMENT, `question` varchar(255) NOT NULL COMMENT '用户常见问题', `answer` text NOT NULL COMMENT '对应答案', `category` varchar(50) NOT NULL COMMENT '分类(产品/售后/联系方式)', `sort` int(11) DEFAULT 0 COMMENT '排序', PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='企业知识库';
批量导入老站现有FAQ、产品说明等内容,比如:
问题:你们的产品支持哪些系统? 答案:本产品支持Windows10及以上、MacOS12及以上系统,PHP版本需≥7.4。
(2)核心逻辑:先匹配知识库,再调用AI
用户提问 → PHP查询知识库(模糊匹配问题) → 匹配到(相似度≥80%),直接返回答案 → 未匹配到,调用AI生成回答(结合知识库内容,避免答非所问) → 返回给用户。
(3)接口开发(新增客服问答接口)
在admin模块新建AiServiceController.php,新增问答接口:
<?php
namespace app\admin\controller;
use app\common\controller\AdminBase;
use Ai\ApiClient;
use app\common\model\AiKnowledge;
use think\facade\Request;
class AiServiceController extends AdminBase
{
// 智能客服问答接口
public function chat()
{
$question = Request::post('question', '');
if (empty($question)) {
return json(['code' => 400, 'msg' => '请输入您的问题']);
}
// 1. 模糊匹配知识库(相似度计算,简单版)
$knowledgeModel = new AiKnowledge();
$knowledgeList = $knowledgeModel->select();
$matchAnswer = '';
$maxSimilarity = 0;
foreach ($knowledgeList as $item) {
// 计算问题与知识库问题的相似度(简单版:字符匹配率)
$similarity = $this->calculateSimilarity($question, $item['question']);
if ($similarity >= 0.8 && $similarity > $maxSimilarity) {
$maxSimilarity = $similarity;
$matchAnswer = $item['answer'];
}
}
// 2. 匹配到知识库,直接返回
if (!empty($matchAnswer)) {
return json([
'code' => 200,
'data' => [
'answer' => $matchAnswer,
'type' => 'knowledge' // 标记为知识库答案
]
]);
}
// 3. 未匹配到,调用AI生成回答(结合知识库内容)
$aiClient = new ApiClient();
// 构建Prompt,让AI结合知识库回答
$knowledgeText = $this->getKnowledgeText();
$prompt = "你是企业智能客服,仅根据以下企业知识库内容回答用户问题,不要添加额外内容,无法回答时请回复'抱歉,暂未找到相关答案,请联系人工客服(电话:XXX-XXXXXXX)'。知识库内容:{$knowledgeText}。用户问题:{$question}";
$result = $aiClient->generateContent($prompt, 500, 0.5); // 随机性降低,更严谨
if ($result['code'] == 200) {
return json([
'code' => 200,
'data' => [
'answer' => $result['data'],
'type' => 'ai' // 标记为AI生成答案
]
]);
} else {
return json(['code' => 500, 'msg' => '问答失败,请稍后再试']);
}
}
// 计算字符串相似度(简单版,可优化为余弦相似度)
private function calculateSimilarity($str1, $str2)
{
$str1 = strtolower(trim($str1));
$str2 = strtolower(trim($str2));
$len1 = strlen($str1);
$len2 = strlen($str2);
$common = 0;
for ($i = 0; $i < $len1; $i++) {
if (strpos($str2, $str1[$i]) !== false) {
$common++;
}
}
return $common / max($len1, $len2);
}
// 获取知识库所有内容,拼接成文本
private function getKnowledgeText()
{
$knowledgeModel = new AiKnowledge();
$list = $knowledgeModel->select();
$text = '';
foreach ($list as $item) {
$text .= "问题:{$item['question']},答案:{$item['answer']};";
}
return $text;
}
}
?>
(4)前端悬浮窗嵌入(无需改动老站整体布局)
1. 引入悬浮窗HTML(放在老站公共模板footer.htm底部):
<!-- 智能客服悬浮窗 -->
<div class="ai-service">
<div class="ai-service-btn" id="ai-service-btn">智能客服</div>
<div class="ai-service-panel" id="ai-service-panel" style="display: none;">
<div class="ai-service-header">智能客服<span id="close-service">×</span></div>
<div class="ai-service-chat" id="ai-chat-content">
<div class="ai-chat-item ai">您好!我是智能客服,请问有什么可以帮您?</div>
</div>
<div class="ai-service-input">
<input type="text" id="chat-question" placeholder="请输入您的问题...">
<button id="send-question">发送</button>
</div>
</div>
</div>
<!-- 简单样式,可适配老站风格 -->
<style>
.ai-service { position: fixed; right: 30px; bottom: 80px; z-index: 9999; }
.ai-service-btn { width: 100px; height: 40px; line-height: 40px; text-align: center; background: #007bff; color: #fff; border-radius: 20px; cursor: pointer; }
.ai-service-panel { width: 350px; height: 450px; border: 1px solid #eee; border-radius: 10px; background: #fff; margin-top: 10px; overflow: hidden; }
.ai-service-header { height: 40px; line-height: 40px; padding: 0 15px; background: #007bff; color: #fff; position: relative; }
#close-service { position: absolute; right: 15px; cursor: pointer; }
.ai-service-chat { height: 360px; overflow-y: auto; padding: 10px; }
.ai-chat-item { margin-bottom: 10px; padding: 8px 12px; border-radius: 8px; max-width: 80%; }
.ai { background: #f5f5f5; float: left; }
.user { background: #007bff; color: #fff; float: right; }
.ai-service-input { height: 50px; display: flex; border-top: 1px solid #eee; }
.ai-service-input input { flex: 1; padding: 0 10px; border: none; outline: none; }
.ai-service-input button { width: 80px; background: #007bff; color: #fff; border: none; cursor: pointer; }
</style>
2. 前端JS(对接问答接口,实现聊天交互):
// 显示/隐藏客服面板
$("#ai-service-btn").click(function() {
$("#ai-service-panel").toggle();
});
$("#close-service").click(function() {
$("#ai-service-panel").hide();
});
// 发送问题
$("#send-question").click(function() {
var question = $("#chat-question").val().trim();
if (!question) {
alert("请输入您的问题");
return;
}
// 清空输入框,添加用户消息
$("#chat-question").val('');
$("#ai-chat-content").append(`<div class="ai-chat-item user">${question}</div>`);
// 滚动到底部
$("#ai-chat-content").scrollTop($("#ai-chat-content")[0].scrollHeight);
// 调用后台接口
$.post("/admin/ai-service/chat", {question: question}, function(res) {
if (res.code == 200) {
var answer = res.data.answer;
$("#ai-chat-content").append(`<div class="ai-chat-item ai">${answer}</div>`);
$("#ai-chat-content").scrollTop($("#ai-chat-content")[0].scrollHeight);
} else {
$("#ai-chat-content").append(`<div class="ai-chat-item ai">${res.msg}</div>`);
}
}, "json");
});
// 回车发送
$("#chat-question").keydown(function(e) {
if (e.keyCode == 13) {
$("#send-question").click();
}
});
场景3:AI图像处理(适配电商、内容站,提升内容质感)
1. 功能目标
在老站后台“图片上传”功能中,新增AI图像处理功能:图片自动抠图(去除背景)、自动打标签(用于SEO)、自动压缩(保持清晰度)、海报生成(根据产品图片+文案生成海报)。
2. 技术实现
选择「阿里云图像识别API」(适配PHP,文档清晰,价格低),对接抠图、标签生成接口,复用场景1的工具类逻辑,新增图像处理方法,核心步骤:
- 申请阿里云图像识别API(开通抠图、图像标签服务,获取API Key和Secret);
- 在AI工具类中新增imageProcess方法,调用阿里云API;
- 在老站图片上传接口中,新增“AI处理”选项,用户上传图片后,可选择AI抠图/打标签;
- 处理返回结果,将抠图后的图片保存到老站服务器,标签自动写入图片表(用于SEO)。
场景4:AI数据智能(适配后台管理,提升运营效率)
1. 功能目标
在老站后台报表页面,新增AI数据分析功能:自动生成数据报表(如用户增长、订单趋势)、异常数据预警(如订单突降、用户流失)、运营建议(基于数据给出优化方向)。
2. 技术实现
- 从老站数据库中提取核心数据(用户、订单、流量等),整理成结构化数据(JSON格式);
- 调用AI API,将结构化数据作为Prompt参数,让AI生成分析报告和预警信息;
- 在后台报表页面,新增“AI分析”按钮,点击后显示AI生成的报告,支持导出。
三、技术选型与环境配置(避坑重点)
3.1 技术选型(优先选国内服务,无需科学上网)
功能模块
推荐服务
优势
成本
文本生成(内容、问答)
通义千问API
中文适配好、稳定性高、免费额度足
0.01元/千tokens(1000字左右),免费额度100万tokens
图像处理(抠图、标签)
阿里云图像识别API
文档清晰、PHP适配好、处理速度快
抠图:0.1元/张;标签:0.02元/张
敏感词过滤
阿里云内容安全API
覆盖全面、响应快
0.001元/条,免费额度10万条
缓存(降低API成本)
Redis
轻量、适配PHP、部署简单
云服务器自带,无需额外成本
3.2 环境配置(必做,避免调用失败)
- PHP环境:升级至PHP8.0+,开启curl、openssl扩展(用于调用API);
- 安装依赖:使用Composer安装GuzzleHttp(用于发送HTTP请求),命令:composer require guzzlehttp/guzzle:^7.0;
- 服务器配置:开放外网访问权限(允许PHP调用第三方API),关闭防火墙拦截;
- 超时设置:将PHP的max_execution_time设置为30秒以上(避免API调用超时)。
四、部署与运维(保障稳定运行)
4.1 部署步骤
- 代码部署:将封装的AI工具类、新增的控制器、前端代码,上传到老站服务器(覆盖对应目录);
- 数据库部署:新增知识库表(场景2),导入知识库内容;
- API Key配置:将申请的API Key、Secret,配置到AI工具类中(建议放在配置文件,避免硬编码);
- 测试验证:分别测试每个AI功能,确认API调用正常、内容生成/问答准确、图片处理成功;
- 正式上线:测试通过后,对外开放AI功能,同步告知后台运营人员使用方法。
4.2 运维监控(降低故障风险)
- 日志记录:在AI工具类中新增日志记录,记录API调用情况(成功/失败、调用时间、消耗tokens),便于排查问题;
- 异常监控:设置API调用失败告警(如连续3次调用失败,发送邮件/短信给管理员);
- 成本监控:定期查看API调用账单,设置消费上限(如每月500元),避免超支;
- 定期优化:根据用户使用反馈,优化Prompt(提升AI生成内容质量)、更新知识库(补充新问题)。
五、成本预算(按每月使用量估算)
核心成本为API调用费,无其他额外成本,以下为中小站(日均100次文本调用、50次图片调用)的预算参考:
- 文本生成(通义千问):日均100次,每次500tokens → 日均消耗:100×0.005=0.5元 → 月预算:15元;
- 图像处理(阿里云):日均50张(抠图+标签) → 日均消耗:50×(0.1+0.02)=6元 → 月预算:180元;
- 敏感词过滤(阿里云):日均100次 → 日均消耗:0.1元 → 月预算:3元;
- 总计:月预算约200元(可根据实际使用量调整,初期可控制在100元以内)。
六、避坑指南(重点注意)
- 不要硬编码API Key:将API Key、Secret放在PHP配置文件中,权限设置为只读,避免泄露;
- 避免API滥用:给前端请求添加频率限制(如每分钟最多调用5次),防止恶意调用导致成本飙升;
- 做好异常处理:API调用失败时,给出友好提示(如“系统繁忙,请稍后再试”),避免影响用户体验;
- 不依赖单一AI服务:可同时对接2个大模型API(如通义千问+DeepSeek),当一个服务故障时,自动切换到另一个;
- 无需升级PHP框架:老站用ThinkPHP5、Laravel5等旧框架,无需升级,只需确保PHP版本≥7.4,即可正常调用API。
七、总结与后续扩展
本方案核心是“低侵入、低成本、快落地”,无需重构老站,仅通过“接口对接+功能嵌入”,即可让PHP老站实现AI升级,优先落地“AI内容生成+智能客服”2个场景,1-2周即可完成,能快速提升后台效率和用户体验。
后续扩展方向:
- 接入向量数据库(如Milvus),优化知识库匹配精度,支持语义搜索;
- 新增AI SEO优化功能,自动生成网站地图、优化页面标题/描述;
- 对接企业微信/钉钉,将AI客服消息同步到办公软件,方便人工转接。
相关树洞
暂无相关树洞内容
暂无评论,来发表第一条评论吧