diff --git a/Server/application/ai/config/route.php b/Server/application/ai/config/route.php index ada60ae65..286b7c247 100644 --- a/Server/application/ai/config/route.php +++ b/Server/application/ai/config/route.php @@ -14,7 +14,6 @@ Route::group('v1/ai', function () { //豆包ai Route::group('doubao', function () { Route::post('text', 'app\ai\controller\DouBaoAI@text'); - Route::post('aiChat', 'app\ai\controller\DouBaoAI@aiChat'); }); diff --git a/Server/application/ai/controller/DouBaoAI.php b/Server/application/ai/controller/DouBaoAI.php index d61a6c891..e7a506461 100644 --- a/Server/application/ai/controller/DouBaoAI.php +++ b/Server/application/ai/controller/DouBaoAI.php @@ -28,67 +28,24 @@ class DouBaoAI } - public function text() + + public function text($params = []) { $this->__init(); - - $content = input('content',''); - if (empty($content)){ + if (empty($params)){ return json_encode(['code' => 500, 'msg' => '提示词缺失']); } - - // 发送请求 - $params = [ - 'model' => 'doubao-1-5-pro-32k-250115', - 'messages' => [ - ['role' => 'system', 'content' => '你是人工智能助手.'], - ['role' => 'user', 'content' => $content], - ], - /*'extra_headers' => [ - 'x-is-encrypted' => true - ], - 'temperature' => 1, - 'top_p' => 0.7, - 'max_tokens' => 4096, - 'frequency_penalty' => 0,*/ - ]; $result = requestCurl($this->apiUrl, $params, 'POST', $this->headers, 'json'); $result = json_decode($result, true); - return successJson($result); - } - - - public function aiChat() - { - $this->__init(); - - $content = input('content',''); - if (empty($content)){ - return json_encode(['code' => 500, 'msg' => '提示词缺失']); + if(isset($result['error'])){ + $error = $result['error']; + return json_encode(['code' => 500, 'msg' => $error['message']]); + }else{ + $content = $result['choices'][0]['message']['content']; + $token = intval($result['usage']['total_tokens']) * 20; + return json_encode(['code' => 200, 'msg' => '成功','data' => ['token' => $token,'content' => $content]]); } - $content = $content. ' - - 请结合上面的聊天记录给我最佳的客服回复'; - - // 发送请求 - $params = [ - 'model' => 'doubao-1-5-pro-32k-250115', - 'messages' => [ - ['role' => 'system', 'content' => '以下是客服跟用户的对话.'], - ['role' => 'user', 'content' => $content], - ], - /*'extra_headers' => [ - 'x-is-encrypted' => true - ], - 'temperature' => 1, - 'top_p' => 0.7, - 'max_tokens' => 4096, - 'frequency_penalty' => 0,*/ - ]; - $result = requestCurl($this->apiUrl, $params, 'POST', $this->headers, 'json'); - $result = json_decode($result, true); - return successJson($result); } diff --git a/Server/application/chukebao/config/route.php b/Server/application/chukebao/config/route.php index 9d2a93a61..5ae4b0fc2 100644 --- a/Server/application/chukebao/config/route.php +++ b/Server/application/chukebao/config/route.php @@ -16,6 +16,7 @@ Route::group('v1/', function () { //群相关 Route::group('wechatChatroom/', function () { Route::get('list', 'app\chukebao\controller\WechatChatroomController@getList'); // 获取好友列表 + Route::post('aiAnnouncement', 'app\chukebao\controller\WechatChatroomController@aiAnnouncement'); // AI群公告 }); //客服相关 @@ -40,22 +41,45 @@ Route::group('v1/', function () { Route::get('detail', 'app\chukebao\controller\QuestionsController@detail'); // 问答详情 }); + //全局配置 Route::group('settings/', function () { Route::get('get', 'app\chukebao\controller\AiSettingsController@getSetting'); Route::post('set', 'app\chukebao\controller\AiSettingsController@setSetting'); }); - + //好友配置 Route::group('friend/', function () { Route::post('set', 'app\chukebao\controller\AiSettingsController@setFriend'); }); + //ai对话 + Route::post('chat', 'app\chukebao\controller\AiChatController@index'); + }); + //代办事项 + Route::group('todo/', function () { + Route::get('list', 'app\chukebao\controller\ToDoController@getList'); + Route::post('add', 'app\chukebao\controller\ToDoController@create'); + Route::get('process', 'app\chukebao\controller\ToDoController@process'); + }); + //跟进提醒 + Route::group('followUp/', function () { + Route::get('list', 'app\chukebao\controller\FollowUpController@getList'); + Route::post('add', 'app\chukebao\controller\FollowUpController@create'); + Route::get('process', 'app\chukebao\controller\FollowUpController@process'); + }); + + + //算力相关 + Route::group('tokensRecord/', function () { + Route::get('list', 'app\chukebao\controller\TokensRecordController@getList'); + }); + }); diff --git a/Server/application/chukebao/controller/CustomerServiceController.php b/Server/application/chukebao/controller/CustomerServiceController.php index 3197e91a6..93892fe53 100644 --- a/Server/application/chukebao/controller/CustomerServiceController.php +++ b/Server/application/chukebao/controller/CustomerServiceController.php @@ -25,8 +25,8 @@ class CustomerServiceController extends BaseController ->group('id') ->select(); foreach ($list as $k=>&$v){ - $v['createTime'] = !empty($v['createTime']) && is_numeric($v['createTime']) ? date('Y-m-d H:i:s',$v['createTime']) : ''; - $v['updateTime'] = !empty($v['updateTime']) && is_numeric($v['updateTime']) ? date('Y-m-d H:i:s',$v['updateTime']) : ''; + $v['createTime'] = !empty($v['createTime']) ? date('Y-m-d H:i:s',$v['createTime']) : ''; + $v['updateTime'] = !empty($v['updateTime']) ? date('Y-m-d H:i:s',$v['updateTime']) : ''; $v['labels'] = json_decode($v['labels'],true); unset( $v['accountUserName'], diff --git a/Server/application/chukebao/controller/WechatChatroomController.php b/Server/application/chukebao/controller/WechatChatroomController.php index 49fb802d1..8753da88e 100644 --- a/Server/application/chukebao/controller/WechatChatroomController.php +++ b/Server/application/chukebao/controller/WechatChatroomController.php @@ -2,6 +2,8 @@ namespace app\chukebao\controller; +use app\ai\controller\DouBaoAI; +use app\chukebao\controller\TokensRecordController as tokensRecord; use library\ResponseHelper; use think\Db; @@ -78,4 +80,65 @@ class WechatChatroomController extends BaseController return ResponseHelper::success(['list'=>$list,'total'=>$total]); } + + + + public function aiAnnouncement() + { + $userId = $this->getUserInfo('id'); + $companyId = $this->getUserInfo('companyId'); + $wechatAccountId = $this->request->param('wechatAccountId', ''); + $groupId = $this->request->param('groupId', ''); + $content = $this->request->param('content', ''); + + if (empty($groupId) || empty($content)|| empty($wechatAccountId)){ + return ResponseHelper::error('参数缺失'); + } + + $tokens = Db::name('users') + ->where('id', $userId) + ->where('companyId', $companyId) + ->value('tokens'); + if ($tokens <= 0){ + return ResponseHelper::error('用户Tokens余额不足'); + } + + $params = [ + 'model' => 'doubao-1-5-pro-32k-250115', + 'messages' => [ + ['role' => 'system', 'content' => '你现在是存客宝的AI助理,你精通中国大陆的法律'], + ['role' => 'user', 'content' => $content], + ], + ]; + + //AI处理 + $ai = new DouBaoAI(); + $res = $ai->text($params); + $res = json_decode($res,true); + + + if ($res['code'] == 200) { + //扣除Tokens + $tokensRecord = new tokensRecord(); + $nickname = Db::table('s2_wechat_chatroom')->where(['id' => $groupId])->value('nickname'); + $remarks = !empty($nickname) ? '生成【'.$nickname.'】群公告' : '生成群公告'; + $data = [ + 'tokens' => $res['data']['token'], + 'type' => 0, + 'form' => 3, + 'wechatAccountId' => $wechatAccountId, + 'friendIdOrGroupId' => $groupId, + 'remarks' => $remarks, + ]; + $tokensRecord->consumeTokens($data); + return ResponseHelper::success($res['data']['content']); + }else{ + return ResponseHelper::error($res['msg']); + } + + + exit_data($res); + + } + } \ No newline at end of file