Paraz
Paraz
0%
📖
51分钟
👆 顶部

PHP老网站AI集成具体落地方案

Paraz-zz Paraz-zz
| 2026-05-18 10:57:05 94 阅读 0 评论 14 分钟阅读
PHP老网站AI集成具体落地方案

本方案核心定位: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. 准备阶段(1-2天):大模型API申请、PHP环境适配、工具类封装;
  2. 场景开发阶段(7-14天):按优先级开发AI功能(1个场景3-5天);
  3. 测试阶段(2-3天):功能测试、兼容性测试、API调用稳定性测试;
  4. 上线运维阶段(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个元素:

  1. 选项区:内容类型(文章/产品/摘要)、字数、语气、行业(下拉选择);
  2. 按钮:“AI生成内容”(点击调用上面的接口);
  3. 内容回显:生成成功后,自动填充到内容编辑器(如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的工具类逻辑,新增图像处理方法,核心步骤:

  1. 申请阿里云图像识别API(开通抠图、图像标签服务,获取API Key和Secret);
  2. 在AI工具类中新增imageProcess方法,调用阿里云API;
  3. 在老站图片上传接口中,新增“AI处理”选项,用户上传图片后,可选择AI抠图/打标签;
  4. 处理返回结果,将抠图后的图片保存到老站服务器,标签自动写入图片表(用于SEO)。

场景4:AI数据智能(适配后台管理,提升运营效率)

1. 功能目标

在老站后台报表页面,新增AI数据分析功能:自动生成数据报表(如用户增长、订单趋势)、异常数据预警(如订单突降、用户流失)、运营建议(基于数据给出优化方向)。

2. 技术实现

  1. 从老站数据库中提取核心数据(用户、订单、流量等),整理成结构化数据(JSON格式);
  2. 调用AI API,将结构化数据作为Prompt参数,让AI生成分析报告和预警信息;
  3. 在后台报表页面,新增“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 环境配置(必做,避免调用失败)

  1. PHP环境:升级至PHP8.0+,开启curl、openssl扩展(用于调用API);
  2. 安装依赖:使用Composer安装GuzzleHttp(用于发送HTTP请求),命令:composer require guzzlehttp/guzzle:^7.0;
  3. 服务器配置:开放外网访问权限(允许PHP调用第三方API),关闭防火墙拦截;
  4. 超时设置:将PHP的max_execution_time设置为30秒以上(避免API调用超时)。

四、部署与运维(保障稳定运行)

4.1 部署步骤

  1. 代码部署:将封装的AI工具类、新增的控制器、前端代码,上传到老站服务器(覆盖对应目录);
  2. 数据库部署:新增知识库表(场景2),导入知识库内容;
  3. API Key配置:将申请的API Key、Secret,配置到AI工具类中(建议放在配置文件,避免硬编码);
  4. 测试验证:分别测试每个AI功能,确认API调用正常、内容生成/问答准确、图片处理成功;
  5. 正式上线:测试通过后,对外开放AI功能,同步告知后台运营人员使用方法。

4.2 运维监控(降低故障风险)

  1. 日志记录:在AI工具类中新增日志记录,记录API调用情况(成功/失败、调用时间、消耗tokens),便于排查问题;
  2. 异常监控:设置API调用失败告警(如连续3次调用失败,发送邮件/短信给管理员);
  3. 成本监控:定期查看API调用账单,设置消费上限(如每月500元),避免超支;
  4. 定期优化:根据用户使用反馈,优化Prompt(提升AI生成内容质量)、更新知识库(补充新问题)。

五、成本预算(按每月使用量估算)

核心成本为API调用费,无其他额外成本,以下为中小站(日均100次文本调用、50次图片调用)的预算参考:

  1. 文本生成(通义千问):日均100次,每次500tokens → 日均消耗:100×0.005=0.5元 → 月预算:15元;
  2. 图像处理(阿里云):日均50张(抠图+标签) → 日均消耗:50×(0.1+0.02)=6元 → 月预算:180元;
  3. 敏感词过滤(阿里云):日均100次 → 日均消耗:0.1元 → 月预算:3元;
  4. 总计:月预算约200元(可根据实际使用量调整,初期可控制在100元以内)。

六、避坑指南(重点注意)

  1. 不要硬编码API Key:将API Key、Secret放在PHP配置文件中,权限设置为只读,避免泄露;
  2. 避免API滥用:给前端请求添加频率限制(如每分钟最多调用5次),防止恶意调用导致成本飙升;
  3. 做好异常处理:API调用失败时,给出友好提示(如“系统繁忙,请稍后再试”),避免影响用户体验;
  4. 不依赖单一AI服务:可同时对接2个大模型API(如通义千问+DeepSeek),当一个服务故障时,自动切换到另一个;
  5. 无需升级PHP框架:老站用ThinkPHP5、Laravel5等旧框架,无需升级,只需确保PHP版本≥7.4,即可正常调用API。

七、总结与后续扩展

本方案核心是“低侵入、低成本、快落地”,无需重构老站,仅通过“接口对接+功能嵌入”,即可让PHP老站实现AI升级,优先落地“AI内容生成+智能客服”2个场景,1-2周即可完成,能快速提升后台效率和用户体验。

后续扩展方向:

  1. 接入向量数据库(如Milvus),优化知识库匹配精度,支持语义搜索;
  2. 新增AI SEO优化功能,自动生成网站地图、优化页面标题/描述;
  3. 对接企业微信/钉钉,将AI客服消息同步到办公软件,方便人工转接。


网友评论

暂无评论,来发表第一条评论吧

分享文章

相关树洞

暂无相关树洞内容