本文目录导读:

我来详细介绍如何在PHP项目中实现混合式对话(结合规则匹配和AI模型)。
混合式对话架构设计
核心组件
<?php
// 混合式对话引擎
class HybridDialogueEngine {
private $ruleEngine; // 规则引擎
private $aiEngine; // AI引擎
private $router; // 路由决策器
public function __construct() {
$this->ruleEngine = new RuleEngine();
$this->aiEngine = new AIEngine();
$this->router = new DialogueRouter();
}
public function process($userInput, $context = []) {
// 1. 意图识别
$intent = $this->analyzeIntent($userInput);
// 2. 路由决策
$strategy = $this->router->decideStrategy($intent, $context);
// 3. 执行对话
switch ($strategy) {
case 'rule':
return $this->ruleEngine->respond($userInput, $context);
case 'ai':
return $this->aiEngine->respond($userInput, $context);
case 'hybrid':
return $this->hybridRespond($userInput, $intent, $context);
default:
return $this->aiEngine->respond($userInput, $context);
}
}
}
?>
规则引擎实现
<?php
class RuleEngine {
private $rules = [];
private $patterns = [];
public function __construct() {
$this->loadRules();
$this->loadPatterns();
}
// 加载规则
private function loadRules() {
$this->rules = [
'greeting' => [
'patterns' => ['你好', '您好', 'hi', 'hello', '嗨'],
'responses' => [
'你好!有什么可以帮您的吗?',
'您好!欢迎使用智能客服系统。',
'嗨!很高兴为您服务。'
],
'priority' => 1
],
'farewell' => [
'patterns' => ['再见', '拜拜', 'bye', '88'],
'responses' => [
'再见!祝您生活愉快!',
'感谢您的使用,再见!'
],
'priority' => 1
],
'help' => [
'patterns' => ['帮助', 'help', '功能', '能做什么'],
'responses' => [
'我可以帮您:\n1. 查询信息\n2. 解答问题\n3. 执行操作\n4. 提供建议'
],
'priority' => 2
],
'weather' => [
'patterns' => ['天气', '温度', '下雨', '下雪'],
'responses' => [
'天气查询功能正在维护,请稍后再试。',
'目前暂不支持天气查询,建议您查看天气预报APP。'
],
'priority' => 3
]
];
}
// 加载正则模式
private function loadPatterns() {
$this->patterns = [
'/\d+年\d+月\d+日/' => 'date_pattern',
'/\d{11}/' => 'phone_pattern',
'/[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}/' => 'email_pattern'
];
}
// 匹配规则
public function match($input) {
$matchedRule = null;
$highestPriority = 0;
foreach ($this->rules as $key => $rule) {
foreach ($rule['patterns'] as $pattern) {
if (mb_strpos($input, $pattern) !== false) {
if ($rule['priority'] > $highestPriority) {
$highestPriority = $rule['priority'];
$matchedRule = $key;
}
break;
}
}
}
return $matchedRule;
}
// 响应生成
public function respond($input, $context = []) {
$ruleKey = $this->match($input);
if ($ruleKey && isset($this->rules[$ruleKey])) {
$responses = $this->rules[$ruleKey]['responses'];
return $responses[array_rand($responses)];
}
return null; // 无法匹配
}
}
?>
AI引擎实现(支持多种AI服务)
<?php
class AIEngine {
private $providers = [];
private $currentProvider;
public function __construct() {
// 初始化AI提供商
$this->providers = [
'openai' => new OpenAIProvider(),
'baidu' => new BaiduAIProvider(),
'local' => new LocalAIModelProvider()
];
// 默认使用OpenAI
$this->currentProvider = $this->providers['openai'];
}
// 设置AI提供商
public function setProvider($name) {
if (isset($this->providers[$name])) {
$this->currentProvider = $this->providers[$name];
}
}
// AI响应
public function respond($input, $context = []) {
// 构建对话历史
$messages = $this->buildConversationHistory($input, $context);
// 调用AI API
$response = $this->currentProvider->generateResponse($messages);
// 后处理
return $this->postProcess($response);
}
// 构建对话历史
private function buildConversationHistory($input, $context) {
$messages = [];
// 添加系统提示
$messages[] = [
'role' => 'system',
'content' => '你是一个智能客服助手,请用中文回答用户问题。'
];
// 添加上下文
if (!empty($context['history'])) {
foreach ($context['history'] as $msg) {
$messages[] = [
'role' => $msg['role'],
'content' => $msg['content']
];
}
}
// 添加当前输入
$messages[] = [
'role' => 'user',
'content' => $input
];
return $messages;
}
// 后处理
private function postProcess($response) {
// 过滤敏感词
$response = $this->filterSensitiveWords($response);
// 格式化
$response = $this->formatResponse($response);
return $response;
}
}
?>
OpenAI Provider实现
<?php
class OpenAIProvider {
private $apiKey;
private $apiUrl = 'https://api.openai.com/v1/chat/completions';
private $model = 'gpt-3.5-turbo';
public function __construct() {
$this->apiKey = getenv('OPENAI_API_KEY');
}
public function generateResponse($messages) {
$data = [
'model' => $this->model,
'messages' => $messages,
'temperature' => 0.7,
'max_tokens' => 500,
'top_p' => 1,
'frequency_penalty' => 0,
'presence_penalty' => 0
];
$response = $this->makeRequest($data);
return $response['choices'][0]['message']['content'] ?? '';
}
private function makeRequest($data) {
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $this->apiUrl);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));
curl_setopt($ch, CURLOPT_HTTPHEADER, [
'Content-Type: application/json',
'Authorization: Bearer ' . $this->apiKey
]);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_TIMEOUT, 30);
$response = curl_exec($ch);
$error = curl_error($ch);
curl_close($ch);
if ($error) {
throw new Exception("OpenAI API Error: " . $error);
}
return json_decode($response, true);
}
}
?>
路由决策器
<?php
class DialogueRouter {
private $thresholds = [
'rule_confidence' => 0.8,
'ai_confidence' => 0.6
];
// 决策策略
public function decideStrategy($intent, $context) {
// 检查是否有高优先级规则匹配
if ($this->hasHighPriorityRule($intent)) {
return 'rule';
}
// 检查上下文是否要求AI
if ($this->requiresAI($context)) {
return 'ai';
}
// 混合模式
return 'hybrid';
}
// 意图分析
public function analyzeIntent($input) {
$intent = [
'type' => 'unknown',
'confidence' => 0,
'entities' => [],
'context' => []
];
// 关键词匹配
$keywords = $this->extractKeywords($input);
// NLP分析
$nlpResult = $this->nlpAnalysis($input);
// 融合结果
$intent['type'] = $this->determineIntentType($keywords, $nlpResult);
$intent['confidence'] = $this->calculateConfidence($keywords, $nlpResult);
$intent['entities'] = $this->extractEntities($input);
return $intent;
}
// 提取关键词
private function extractKeywords($input) {
// 简单分词
$words = preg_split('/[\s,,。!?、]+/u', $input);
return array_filter($words);
}
// NLP分析
private function nlpAnalysis($input) {
// 使用百度NLP或本地模型
return [
'sentiment' => 'positive',
'keywords' => [],
'category' => 'general'
];
}
}
?>
混合响应生成
<?php
class HybridResponder {
private $ruleEngine;
private $aiEngine;
public function hybridRespond($input, $intent, $context) {
// 1. 尝试规则匹配
$ruleResponse = $this->ruleEngine->respond($input, $context);
// 2. 获取AI响应
$aiResponse = $this->aiEngine->respond($input, $context);
// 3. 合并策略
if ($ruleResponse && $intent['confidence'] > 0.8) {
// 高置信度规则响应
return $this->enhanceWithAI($ruleResponse, $aiResponse);
} else if ($intent['confidence'] > 0.5) {
// 中等置信度,混合响应
return $this->blendResponses($ruleResponse, $aiResponse, $intent);
} else {
// 低置信度,使用AI
return $aiResponse;
}
}
// 用AI增强规则响应
private function enhanceWithAI($ruleResponse, $aiResponse) {
if (mb_strlen($ruleResponse) < 20) {
// 规则响应太短,用AI补充
return $ruleResponse . "\n" . $aiResponse;
}
return $ruleResponse;
}
// 混合响应
private function blendResponses($ruleResponse, $aiResponse, $intent) {
$blended = [];
if ($ruleResponse) {
$blended[] = $ruleResponse;
$blended[] = "" . $aiResponse;
} else {
$blended[] = $aiResponse;
}
// 添加相关建议
$suggestions = $this->generateSuggestions($intent);
if (!empty($suggestions)) {
$blended[] = "您可能还想了解:\n" . implode("\n", $suggestions);
}
return implode("\n\n", $blended);
}
}
?>
完整的对话管理器
<?php
class DialogueManager {
private $hybridEngine;
private $sessionManager;
private $logger;
public function __construct() {
$this->hybridEngine = new HybridDialogueEngine();
$this->sessionManager = new SessionManager();
$this->logger = new Logger();
}
// 处理用户输入
public function handleInput($userId, $input) {
// 获取会话上下文
$context = $this->sessionManager->getContext($userId);
// 更新上下文
$context['current_input'] = $input;
$context['timestamp'] = time();
// 处理对话
$response = $this->hybridEngine->process($input, $context);
// 更新会话历史
$this->updateSessionHistory($userId, $input, $response);
// 记录日志
$this->logger->log($userId, $input, $response);
return $response;
}
// 更新会话历史
private function updateSessionHistory($userId, $input, $response) {
$history = $this->sessionManager->getHistory($userId);
$history[] = [
'role' => 'user',
'content' => $input,
'timestamp' => time()
];
$history[] = [
'role' => 'assistant',
'content' => $response,
'timestamp' => time()
];
// 只保留最近20条记录
if (count($history) > 20) {
$history = array_slice($history, -20);
}
$this->sessionManager->setHistory($userId, $history);
}
}
// 使用示例
$chat = new DialogueManager();
// Web接口
if ($_POST['action'] === 'chat') {
$userId = $_POST['user_id'] ?? 'anonymous';
$input = $_POST['message'] ?? '';
$response = $chat->handleInput($userId, $input);
header('Content-Type: application/json');
echo json_encode([
'success' => true,
'response' => $response
]);
}
?>
配置和部署建议
<?php
// config.php
return [
'ai' => [
'provider' => 'openai', // openai, baidu, local
'openai' => [
'api_key' => 'your-api-key',
'model' => 'gpt-3.5-turbo'
],
'baidu' => [
'app_id' => 'your-app-id',
'api_key' => 'your-api-key'
]
],
'rules' => [
'cache_enabled' => true,
'cache_ttl' => 3600
],
'session' => [
'driver' => 'redis', // file, redis, database
'lifetime' => 3600
],
'performance' => [
'max_response_time' => 3000, // ms
'max_token_length' => 500
]
];
?>
这个实现提供了完整的混合式对话系统,结合了规则匹配的确定性和AI模型的灵活性,你可以根据实际需求调整各个组件的配置和实现。