本文目录导读:

在PHP项目中实现生成式对话,通常有以下几种可行方案,从简单到复杂排列:
调用第三方AI API(推荐首选)
这是最直接、效果最好的方式,PHP端只需做HTTP请求即可。
使用OpenAI API示例
<?php
class AIChat {
private $apiKey;
public function __construct($apiKey) {
$this->apiKey = $apiKey;
}
public function chat($messages, $model = 'gpt-3.5-turbo') {
$url = 'https://api.openai.com/v1/chat/completions';
$data = [
'model' => $model,
'messages' => $messages,
'temperature' => 0.7,
'max_tokens' => 1000
];
$ch = curl_init($url);
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_HTTPHEADER => [
'Authorization: Bearer ' . $this->apiKey,
'Content-Type: application/json'
],
CURLOPT_POSTFIELDS => json_encode($data),
CURLOPT_RETURNTRANSFER => true,
CURLOPT_TIMEOUT => 60
]);
$response = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
if ($httpCode !== 200) {
throw new Exception('API请求失败: ' . $response);
}
$result = json_decode($response, true);
return $result['choices'][0]['message']['content'];
}
}
// 使用示例
$chat = new AIChat('your-api-key-here');
$messages = [
['role' => 'system', 'content' => '你是一个友好的AI助手'],
['role' => 'user', 'content' => '帮我写一段PHP代码']
];
try {
$reply = $chat->chat($messages);
echo $reply;
} catch (Exception $e) {
echo '错误: ' . $e->getMessage();
}
常用AI API提供商
- OpenAI - ChatGPT系列
- 百度文心一言 - 国内速度快
- 阿里通义千问 - 国内免费额度较多
- DeepSeek - 性价比高
使用PHP本地AI库
适合需要离线部署或数据安全的场景。
使用llama-cpp-php
<?php
// 需要先安装PHP扩展:php-llama-cpp
$model = new LlamaCPP\Model('/path/to/model.gguf');
$response = $model->prompt(
'介绍PHP语言的特点',
[
'temperature' => 0.7,
'max_tokens' => 500
]
);
echo $response;
使用Rubix ML(机器学习库)
<?php
require_once 'vendor/autoload.php';
use Rubix\ML\Persisters\Persister;
use Rubix\ML\Transformers\TextNormalizer;
use Rubix\ML\Datasets\Labeled;
// 实现简单的对话 - 基于预训练词向量
class SimpleChatBot {
private $responses = [];
private $tokenizer;
public function __construct() {
// 加载训练数据
$this->responses = [
'你好' => '你好!有什么可以帮助你的?',
'PHP' => 'PHP是一种流行的服务器端脚本语言',
'默认' => '我还在学习,请换个问题试试'
];
}
public function respond($input) {
// 简单的关键词匹配
foreach ($this->responses as $key => $response) {
if (strpos($input, $key) !== false) {
return $response;
}
}
return $this->responses['默认'];
}
}
结合微服务架构
将AI对话逻辑分离为独立服务:
<?php
// PHP微服务客户端
class ChatServiceClient {
private $serviceUrl;
public function __construct($serviceUrl) {
$this->serviceUrl = $serviceUrl;
}
public function sendMessage($message, $sessionId = null) {
$payload = [
'message' => $message,
'session_id' => $sessionId ?? uniqid(),
'context' => [
'user' => [
'id' => $_SESSION['user_id'] ?? null,
'preferences' => $this->getUserPreferences()
]
]
];
// 使用Guzzle发送请求
$client = new \GuzzleHttp\Client();
$response = $client->post($this->serviceUrl . '/chat', [
'json' => $payload,
'timeout' => 30
]);
return json_decode($response->getBody(), true);
}
private function getUserPreferences() {
// 从数据库获取用户偏好
return ['language' => 'zh-CN', 'style' => 'friendly'];
}
}
完整的对话系统架构
数据库表设计
CREATE TABLE conversation_history (
id INT AUTO_INCREMENT PRIMARY KEY,
session_id VARCHAR(64) NOT NULL,
role ENUM('user', 'assistant', 'system') NOT NULL,
content TEXT NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
INDEX idx_session (session_id),
INDEX idx_created (created_at)
);
完整的PHP对话控制器
<?php
class ChatController {
private $aiClient;
private $db;
public function __construct($aiClient, $db) {
$this->aiClient = $aiClient;
$this->db = $db;
}
public function handleChat($userMessage) {
$sessionId = $this->getOrCreateSession();
// 保存用户消息
$this->saveMessage($sessionId, 'user', $userMessage);
// 获取对话上下文(最近10条)
$context = $this->getContext($sessionId, 10);
// 构建API请求格式
$messages = [];
foreach ($context as $msg) {
$messages[] = [
'role' => $msg['role'],
'content' => $msg['content']
];
}
// 调用AI接口
$aiResponse = $this->aiClient->chat($messages);
// 保存AI回复
$this->saveMessage($sessionId, 'assistant', $aiResponse);
return [
'response' => $aiResponse,
'session_id' => $sessionId
];
}
private function getOrCreateSession() {
// 从Cookie或Session获取/创建会话ID
}
private function saveMessage($sessionId, $role, $content) {
$stmt = $this->db->prepare(
"INSERT INTO conversation_history (session_id, role, content) VALUES (?, ?, ?)"
);
$stmt->execute([$sessionId, $role, $content]);
}
private function getContext($sessionId, $limit = 10) {
$stmt = $this->db->prepare(
"SELECT role, content FROM conversation_history
WHERE session_id = ?
ORDER BY created_at DESC LIMIT ?"
);
$stmt->execute([$sessionId, $limit]);
return array_reverse($stmt->fetchAll());
}
}
性能优化建议
<?php
// 1. 缓存常用回复
$cache = new \Redis();
$cache->connect('127.0.0.1', 6379);
function getCachedResponse($query) {
global $cache;
$key = 'chat_response:' . md5($query);
if ($cached = $cache->get($key)) {
return json_decode($cached, true);
}
$response = callAI($query);
$cache->setex($key, 3600, json_encode($response)); // 缓存1小时
return $response;
}
// 2. 流式响应(SSE)
header('Content-Type: text/event-stream');
header('Cache-Control: no-cache');
function streamResponse($messages) {
$url = 'https://api.openai.com/v1/chat/completions';
$data = [
'model' => 'gpt-3.5-turbo',
'messages' => $messages,
'stream' => true
];
$ch = curl_init();
curl_setopt_array($ch, [
CURLOPT_URL => $url,
CURLOPT_POST => true,
CURLOPT_HTTPHEADER => [
'Authorization: Bearer ' . API_KEY,
'Content-Type: application/json'
],
CURLOPT_POSTFIELDS => json_encode($data),
CURLOPT_WRITEFUNCTION => function($ch, $data) {
echo "data: $data\n\n";
ob_flush();
flush();
return strlen($data);
}
]);
curl_exec($ch);
curl_close($ch);
}
选择建议
| 场景 | 推荐方案 | 成本 | 难度 |
|---|---|---|---|
| 生产级应用 | OpenAI/国产大模型API | 低 | |
| 数据安全要求高 | 本地部署LLaMA等 | 高 | |
| 简单问答 | PHP本地简单模型 | 免费 | 低 |
| 高性能要求 | 微服务架构+异步处理 | 中 |
最佳实践:对于大多数PHP项目,直接调用成熟的AI API(如OpenAI、DeepSeek、文心一言)是最实际的选择,成本可控且效果最好,如果对数据隐私有要求,可以选择国内大模型API或私有化部署。
版权声明:足球直播
足球直播
足球直播
足球直播
足球直播
中超直播
中超直播
中超直播
中超直播
中超直播
英超直播
英超直播
英超直播
英超直播
英超直播
德甲直播
德甲直播
德甲直播
德甲直播
德甲直播
西甲直播
西甲直播
西甲直播
西甲直播
西甲直播
意甲直播
意甲直播
意甲直播
意甲直播
意甲直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
足球直播
足球直播
足球直播
足球直播
足球直播
中超直播
中超直播
中超直播
中超直播
中超直播
英超直播
英超直播
英超直播
英超直播
英超直播
德甲直播
德甲直播
德甲直播
德甲直播
德甲直播
西甲直播
西甲直播
西甲直播
西甲直播
西甲直播
意甲直播
意甲直播
意甲直播
意甲直播
意甲直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
足球直播
足球直播
足球直播
足球直播
足球直播
中超直播
中超直播
中超直播
中超直播
中超直播
英超直播
英超直播
英超直播
英超直播
英超直播
德甲直播
德甲直播
德甲直播
德甲直播
德甲直播
西甲直播
西甲直播
西甲直播
西甲直播
西甲直播
意甲直播
意甲直播
意甲直播
意甲直播
意甲直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播