也不能说异步不好啊?至少对接对接大模型的API确实很好的!至少不会卡住影响其他的。比如小编的AI冷场监控- //冷场监控(定时任务)private static function chatColdMonitor(){global $public_r;$chatinfo = self::Adminchatconfig();// 读取聊天室后台配置$msgId= bin2hex(random_bytes(10)) . dechex(time());$robotAvatar = $public_r['add_pcurl'] . "/e/extend/chat/img/xiaobing.png";$headers= ['Content-Type' => 'application/json','Authorization' => 'Bearer ' . $public_r['add_siliconflow']];$lastSpeakTime = self::$redis->get('chat:last_msg_time');//最后发言时间$coldLimit=$chatinfo['chatcoldtime'] * 60;// 聊天室冷场默认配置30分钟$nowTime= time();if (!$lastSpeakTime) {self::$redis->set('chat:last_msg_time', $nowTime);return;}$diff = $nowTime - $lastSpeakTime;if ($diff < $coldLimit) {return;}$hour = (int)date('H');$minute = (int)date('i');$timeTip = '';if ($hour == 0) {// 0 点if ($minute < 30) {$timeTip = "全程压低语调安静温柔,轻声陪护;冷场规则:少量氛围铺垫,不刻意抛出话题,守住深夜静谧感";} else {$timeTip = "声线轻柔舒缓,安静陪伴;冷场规则:缩减主动内容输出,不营造热闹感,不破坏深夜安静";}}elseif ($hour == 1) {// 1 点if ($minute < 30) {$timeTip = "声线轻柔舒缓,安静陪伴;冷场规则:缩减主动内容输出,不营造热闹感,不破坏深夜安静";} else {$timeTip = "语调安静柔和,放慢语速轻声陪伴;冷场规则:仅轻微烘托氛围,不主动引导大家发言";}}elseif ($hour == 2) {// 2 点if ($minute < 30) {$timeTip = "语调安静柔和,放慢语速轻声陪伴;冷场规则:仅轻微烘托氛围,不主动引导大家发言";} else {$timeTip = "说话声量轻柔微弱,降低自身存在感;冷场规则:房间长时间冷清就低调陪护,不刻意活跃气氛";}}elseif ($hour == 3) {// 3 点if ($minute < 30) {$timeTip = "说话声量轻柔微弱,降低自身存在感;冷场规则:房间长时间冷清就低调陪护,不刻意活跃气氛";} else {$timeTip = "天将拂晓,语调低沉柔和;冷场规则:只用简短文字烘托氛围,不大量输出暖场内容";}}elseif ($hour == 4) {// 4 点if ($minute < 30) {$timeTip = "天将拂晓,语调低沉柔和;冷场规则:只用简短文字烘托氛围,不大量输出暖场内容";} else {$timeTip = "清晨将至,语调清新轻柔;冷场规则:简单渲染清晨氛围,不强行带动互动";}}elseif ($hour == 5) {// 5 点if ($minute < 30) {$timeTip = "清晨将至,语调清新轻柔;冷场规则:简单渲染清晨氛围,不强行带动互动";} else {$timeTip = "清晨刚刚到来,语气清新舒缓;冷场规则:细腻描绘清晨日常,温和勾起大家聊天欲望";}}elseif ($hour == 6) {// 6 点if ($minute < 30) {$timeTip = "清晨刚刚到来,语气清新舒缓;冷场规则:细腻描绘清晨日常,温和勾起大家聊天欲望";} else {$timeTip = "崭新一天开启,语调清爽元气治愈;冷场规则:适度描写晨间日常画面,柔和缓和冷清氛围";}}elseif ($hour == 7) {// 7 点if ($minute < 30) {$timeTip = "崭新一天开启,语调清爽元气治愈;冷场规则:适度描写晨间日常画面,柔和缓和冷清氛围";} else {$timeTip = "早安晨间时段,语气温润清爽;冷场规则:围绕早餐、通勤日常烘托氛围,温柔化解冷清";}}elseif ($hour == 8) {// 8 点if ($minute < 30) {$timeTip = "早安晨间时段,语气温润清爽;冷场规则:围绕早餐、通勤日常烘托氛围,温柔化解冷清";} else {$timeTip = "上午精力充沛,温柔富有元气;冷场规则:自然描写轻松日常小事,柔和带动聊天室气氛";}}elseif ($hour == 9) {// 9 点if ($minute < 30) {$timeTip = "上午精力充沛,温柔富有元气;冷场规则:自然描写轻松日常小事,柔和带动聊天室气氛";} else {$timeTip = "上午氛围松弛,语气温柔亲切;冷场规则:铺垫轻松休闲的日常感,自然冲淡房间冷清感";}}elseif ($hour == 10) {// 10 点if ($minute < 30) {$timeTip = "上午氛围松弛,语气温柔亲切;冷场规则:铺垫轻松休闲的日常感,自然冲淡房间冷清感";} else {$timeTip = "临近正午,语调轻快柔和;冷场规则:围绕午餐、下午茶氛围描写,轻松柔和暖场";}}elseif ($hour == 11) {// 11 点if ($minute < 30) {$timeTip = "临近正午,语调轻快柔和;冷场规则:围绕午餐、下午茶氛围描写,轻松柔和暖场";} else {$timeTip = "即将午休,语气慵懒松弛;冷场规则:舒缓描写放松的感受,不亢奋、不刻意热闹";}}elseif ($hour == 12) {// 12 点if ($minute < 30) {$timeTip = "即将午休,语气慵懒松弛;冷场规则:舒缓描写放松的感受,不亢奋、不刻意热闹";} else {$timeTip = "午后休憩时光,语调悠闲平缓;冷场规则:轻度烘托氛围,保持松弛安静,不强行热闹";}}elseif ($hour == 13) {// 13 点if ($minute < 30) {$timeTip = "午后休憩时光,语调悠闲平缓;冷场规则:轻度烘托氛围,保持松弛安静,不强行热闹";} else {$timeTip = "午后氛围松弛,语气温和惬意;冷场规则:缓缓描写下午茶、小憩等舒适场景,温和暖场";}}elseif ($hour == 14) {// 14 点if ($minute < 30) {$timeTip = "午后氛围松弛,语气温和惬意;冷场规则:缓缓描写下午茶、小憩等舒适场景,温和暖场";} else {$timeTip = "悠闲午后,语调柔和亲切;冷场规则:轻柔刻画松弛休闲画面,打造舒服的聊天氛围";}}elseif ($hour == 15) {// 15 点if ($minute < 30) {$timeTip = "悠闲午后,语调柔和亲切;冷场规则:轻柔刻画松弛休闲画面,打造舒服的聊天氛围";} else {$timeTip = "午后安静闲适,语气温柔舒缓;冷场规则:平缓烘托治愈氛围,低活跃度温柔陪伴";}}elseif ($hour == 16) {// 16 点if ($minute < 30) {$timeTip = "午后安静闲适,语气温柔舒缓;冷场规则:平缓烘托治愈氛围,低活跃度温柔陪伴";} else {$timeTip = "傍晚将至,语调温柔治愈;冷场规则:围绕晚霞、归家、晚餐烘托画面,暖心柔和暖场";}}elseif ($hour == 17) {// 17 点if ($minute < 30) {$timeTip = "傍晚将至,语调温柔治愈;冷场规则:围绕晚霞、归家、晚餐烘托画面,暖心柔和暖场";} else {$timeTip = "黄昏时分,语气暖心柔和;冷场规则:描绘温馨归家氛围,温柔驱散聊天室冷清";}}elseif ($hour == 18) {// 18 点if ($minute < 30) {$timeTip = "黄昏时分,语气暖心柔和;冷场规则:描绘温馨归家氛围,温柔驱散聊天室冷清";} else {$timeTip = "夜晚正式到来,语气温柔亲切;冷场规则:铺垫晚间休闲日常,温馨柔和带动氛围";}}elseif ($hour == 19) {// 19 点if ($minute < 30) {$timeTip = "夜晚正式到来,语气温柔亲切;冷场规则:铺垫晚间休闲日常,温馨柔和带动氛围";} else {$timeTip = "晚间休闲时段,语调暖心治愈;冷场规则:围绕追剧、饭后放松等日常描写,轻松舒心暖场";}}elseif ($hour == 20) {// 20 点if ($minute < 30) {$timeTip = "晚间休闲时段,语调暖心治愈;冷场规则:围绕追剧、饭后放松等日常描写,轻松舒心暖场";} else {$timeTip = "晚间静谧放松时段,语气温柔舒缓;冷场规则:柔和烘托治愈氛围,减少频繁主动输出";}}elseif ($hour == 21) {// 21 点if ($minute < 30) {$timeTip = "晚间静谧放松时段,语气温柔舒缓;冷场规则:柔和烘托治愈氛围,减少频繁主动输出";} else {$timeTip = "夜色已深,语调安静温柔;冷场规则:极少主动铺陈文字,只淡淡烘托氛围,不喧闹";}}elseif ($hour == 22) {// 22 点if ($minute < 30) {$timeTip = "夜色已深,语调安静温柔;冷场规则:极少主动铺陈文字,只淡淡烘托氛围,不喧闹";} else {$timeTip = "深夜临近,声线放轻压低;冷场规则:简化暖场内容,维持聊天室静谧安静的状态";}}else {// 23 点if ($minute < 30) {$timeTip = "声线放轻压低,轻声陪护;冷场规则:简化暖场内容,维持聊天室静谧安静的状态";} else {$timeTip = "临近零点,语调安静温润;冷场规则:只用极简文字烘托氛围,不大量铺陈,保持深夜舒适安静";}}$prompt = "你是{$chatinfo['sitename']}聊天室专属助手小冰,当前聊天室氛围冷清安静,{$timeTip}。请用生活化口语、自然温柔的语气,生成一段200至300字的暖场文案。严格要求:不用官方客套话术、不主动提问、不@任何人、不用特殊符号和格式,只做氛围暖心铺垫,温柔带动大家愿意开口聊天即可。";$body = ['model'=>$chatinfo['chataimodelname'],'messages'=> [['role' => 'user', 'content' => $prompt]],'stream'=>true,'temperature'=> 1,'enable_search' => true,'enable_thinking' => false];self::asynccurlRequest('request', $chatinfo['chataiurl'], ['method'=> 'POST','headers' => $headers,'data'=>json_encode($body, JSON_UNESCAPED_UNICODE),'progress' => function ($buffer) use ($robotAvatar, $msgId) {static $dataList = [];static $usageList = [];if (!isset($dataList[$msgId])) {$dataList[$msgId] = '';}if (!isset($usageList[$msgId])) {$usageList[$msgId] = ['prompt_tokens' => 0,'completion_tokens' => 0,'total_tokens' => 0];} $lines = explode("\n", $buffer);foreach ($lines as $line) {$line = trim($line);if(!$line) continue;if(strpos($line, 'data: ') !== 0) continue;$json = substr($line, 6);if ($json === '[DONE]') {Gateway::sendToAll(json_encode(['type' => 'ai_stream_end','msgid' => $msgId,'userid' =>0,'from_chatuname' => '小冰(Ai老铁)','token_usage' => $usageList[$msgId]]));unset($dataList[$msgId]);unset($usageList[$msgId]);// 用完清理return; }$data = json_decode($json, true);if (!empty($data['usage'])) {$usageList[$msgId]['prompt_tokens'] = $data['usage']['prompt_tokens'] ?? 0;$usageList[$msgId]['completion_tokens'] = $data['usage']['completion_tokens'] ?? 0;$usageList[$msgId]['total_tokens'] = $data['usage']['total_tokens'] ?? 0;}$content = $data['choices'][0]['delta']['content'] ?? '';if(!$content) continue;$dataList[$msgId] .= $content;Gateway::sendToAll(json_encode(['type' => 'ai_stream','msgid' => $msgId,'userid' =>0,'from_chatuname' => '小冰(Ai老铁)','content' => $content,'headerimg' => $robotAvatar,'time' => date('Y-m-d H:i:s')]));} },'success' => function () {},], null, null, true);}
复制代码 |