AI大模型流式回复聊天PHP源码是一款轻量级的Web聊天系统,支持与主流AI大模型的实时交互体验。该源码通过PHP后端与JavaScript前端结合,实现了流式回复的打字机效果,使用户在与AI对话时感受到更自然的交互体验。以下从技术实现、功能特点及使用方法等方面进行详细说明。


一、功能特点

1. 流式回复与打字机效果

传统聊天系统通常会在AI生成完整回复后一次性显示结果,而本源码通过流式接口(Stream API)实现逐字输出效果:

  • 后端处理:PHP脚本(chat.php)调用AI接口时,设置stream: true参数,接收分段返回的数据。
  • 前端展示:JavaScript通过Event Source(SSE)实时接收数据流,并逐字追加到页面中,模拟打字机动画。

2. 高度可定制性

  • API兼容性:源码基于OpenAI接口协议开发,开发者只需在chat.php中填写自己的API密钥,即可适配任意支持该协议的AI服务(如DeepSeek、通义千问等)。
  • 前端样式可替换:页面采用简单的HTML/CSS结构,开发者可根据需求修改style.css文件,调整颜色、字体、布局等视觉元素。

3. 轻量级与开源特性

  • 代码简洁:源码仅包含4个核心文件(style.cssindex.htmlscript.jschat.php),无需复杂依赖。
  • 无加密无授权:所有代码完全开源,允许二次开发与商业用途。
    在这里插入图片描述

二、技术实现

1. 后端逻辑(chat.php)

chat.php是程序的核心,负责与AI接口通信:

<?php
header('Content-Type: text/event-stream');
header('Cache-Control: no-cache');
header('Connection: keep-alive');

$apiKey = 'YOUR_API_KEY'; // 替换为自己的API密钥
$userMessage = $_POST['message'];

// 构造AI请求数据
$data = [
    'model' => 'deepseek-ai/DeepSeek-R1-Distill-Qwen-1.5B',
    'messages' => [
        ['role' => 'system', 'content' => 'You are a helpful assistant.'],
        ['role' => 'user', 'content' => $userMessage]
    ],
    'stream' => true
];

// 发送HTTP请求
$ch = curl_init('https://api.siliconflow.cn/v1/chat/completions');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
    'Content-Type: application/json',
    'Authorization: Bearer ' . $apiKey
]);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));

// 处理流式响应
curl_setopt($ch, CURLOPT_WRITEFUNCTION, function ($ch, $chunk) {
    echo "data: $chunk\n\n";
    ob_flush();
    flush();
    return strlen($chunk);
});

curl_exec($ch);
curl_close($ch);
  • 关键点
    • 通过header('Content-Type: text/event-stream')启用SSE协议,实现服务器向客户端的持续数据推送。
    • 使用curl_setopt配置流式响应处理函数,将AI的每段输出实时返回给前端。

2. 前端交互(script.js)

JavaScript代码通过Event Source与后端建立连接,并动态更新页面内容:

const chatForm = document.getElementById('chat-form');
const chatBox = document.getElementById('chat-box');

chatForm.addEventListener('submit', async (e) => {
    e.preventDefault();
    const userMessage = document.getElementById('user-input').value;

    // 显示用户消息
    chatBox.innerHTML += `<div class="user-message">${userMessage}</div>`;
    
    // 发起AI请求
    const response = await fetch('chat.php', {
        method: 'POST',
        headers: { 'Content-Type': 'application/json' },
        body: JSON.stringify({ message: userMessage })
    });

    // 处理流式回复
    const reader = response.body.getReader();
    let result = '';
    while (true) {
        const { done, value } = await reader.read();
        if (done) break;
        result += new TextDecoder().decode(value);
        chatBox.innerHTML += `<div class="ai-message">${result}</div>`;
    }
});
  • 实现效果
    • 用户输入内容后,前端立即显示消息,并通过fetch向后端发送请求。
    • 后端返回的流式数据通过getReader()逐块读取,并动态拼接至页面,形成打字机效果。

三、使用方法

1. 部署步骤

  1. 上传文件:将源码文件(style.cssindex.htmlscript.jschat.php)上传至服务器目录。
  2. 配置API密钥
    • chat.php中找到$apiKey = 'YOUR_API_KEY';,替换为实际的API密钥(需从支持OpenAI协议的服务商获取)。
  3. 访问页面:通过浏览器打开index.html,即可开始与AI对话。

2. 前端样式优化

  • 修改主题色:在style.css中调整.ai-message.user-message的背景色与字体颜色。
  • 响应式设计:添加媒体查询规则,确保移动端显示效果良好。

四、注意事项

  1. API密钥安全
    • 避免在公共仓库中直接提交密钥,建议通过环境变量或配置文件管理。
  2. 错误处理
    • chat.php中增加异常捕获逻辑(如网络错误、API限流),并向前端返回友好的提示信息。
  3. 性能优化
    • 对高并发场景,可引入Redis缓存用户请求,或使用异步队列处理AI任务。

源码下载

AI大模型流式回复聊天PHP源码

Logo

欢迎加入DeepSeek 技术社区。在这里,你可以找到志同道合的朋友,共同探索AI技术的奥秘。

更多推荐