AI大模型流式回复聊天PHP源码
摘要: 《AI大模型流式回复聊天PHP源码》是一款轻量级开源Web聊天系统,支持与主流AI模型的实时交互。通过PHP后端对接AI流式API(如DeepSeek、OpenAI协议服务),结合前端SSE技术实现逐字输出的打字机效果,提升对话体验。系统核心仅需4个文件(HTML/CSS/JS/PHP),具备高度可定制性:开发者可替换API密钥、调整前端样式,且无加密限制。技术实现上,PHP通过cURL处
·
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.css
、index.html
、script.js
、chat.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. 部署步骤
- 上传文件:将源码文件(
style.css
、index.html
、script.js
、chat.php
)上传至服务器目录。 - 配置API密钥:
- 在
chat.php
中找到$apiKey = 'YOUR_API_KEY';
,替换为实际的API密钥(需从支持OpenAI协议的服务商获取)。
- 在
- 访问页面:通过浏览器打开
index.html
,即可开始与AI对话。
2. 前端样式优化
- 修改主题色:在
style.css
中调整.ai-message
、.user-message
的背景色与字体颜色。 - 响应式设计:添加媒体查询规则,确保移动端显示效果良好。
四、注意事项
- API密钥安全:
- 避免在公共仓库中直接提交密钥,建议通过环境变量或配置文件管理。
- 错误处理:
- 在
chat.php
中增加异常捕获逻辑(如网络错误、API限流),并向前端返回友好的提示信息。
- 在
- 性能优化:
- 对高并发场景,可引入Redis缓存用户请求,或使用异步队列处理AI任务。
源码下载:
更多推荐
所有评论(0)