123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101 |
- <?php
- namespace app\controller\api;
- use laytp\controller\Api;
- use think\App;
- class BaiduAi extends Api
- {
- public $noNeedLogin = ['chatBaidu'];
- public function __construct(App $app)
- {
- parent::__construct($app);
- header("Access-Control-Allow-Origin: *");
- header("Content-Type: text/event-stream");
- header("X-Accel-Buffering: no");
- set_time_limit(0);
- session_start();
- }
- public function chatBaidu($context){
- $responsedata = "";
- $postData = array(
- 'messages' => [],
- 'stream' => true
- );
- if (!empty($context)) {
- $context = array_slice($context, -5);
- foreach ($context as $message) {
- $postData['messages'][] = ['role' => 'user', 'content' => $message[0]];
- $postData['messages'][] = ['role' => 'assistant', 'content' => $message[1]];
- }
- }
- $postData['messages'][] = ['role' => 'user', 'content' => $_POST['message']];
- $accessToken = $this->getAccessToken();
- $postData = $_SESSION['data'];
- $ch = curl_init();
- curl_setopt_array($ch, array(
- CURLOPT_URL => "https://aip.baidubce.com/rpc/2.0/ai_custom/v1/wenxinworkshop/chat/eb-instant?access_token=".$accessToken,
- CURLOPT_RETURNTRANSFER => true,
- CURLOPT_POST => true,
- CURLOPT_POSTFIELDS => $postData,
- CURLOPT_HTTPHEADER => array(
- 'Content-Type: application/json',
- 'Content-Length: ' . strlen($postData)
- ),
- CURLOPT_WRITEFUNCTION => function ($ch, $data) {
- global $responsedata;
- $complete = json_decode($data);
- if (isset($complete->error_code)) {
- $error = array(
- 'id' => $complete->id,
- 'error_code' => $complete->error_code,
- 'error_msg' => $complete->error_msg
- );
- echo json_encode($error);
- flush();
- $responsedata = $data;
- } else {
- echo $data;
- $responsedata .= $data;
- flush();
- }
- return strlen($data);
- }
- ));
- curl_exec($ch);
- curl_close($ch);
- $responsearr = explode("}\n\ndata: {", $responsedata);
- $answer = "";
- foreach ($responsearr as $msg) {
- $contentarr = json_decode("{" . trim($msg) . "}", true);
- if (isset($contentarr['results'])) {
- $results = $contentarr['results'];
- foreach ($results as $result) {
- if (isset($result['result'])) {
- $answer .= $result['result'] . "\n";
- }
- }
- }
- }
- }
- private function getAccessToken(){
- $curl = curl_init();
- $postData = array(
- 'grant_type' => 'client_credentials',
- 'client_id' => "biAmXmmAbUX4O4dP1YRL3LuX",
- 'client_secret' => "dhTZSa083FfhIsSPahGsroVF5yEPpkHw"
- );
- curl_setopt_array($curl, array(
- CURLOPT_URL => 'https://aip.baidubce.com/oauth/2.0/token',
- CURLOPT_CUSTOMREQUEST => 'POST',
- CURLOPT_RETURNTRANSFER => true,
- CURLOPT_POSTFIELDS => http_build_query($postData)
- ));
- $response = curl_exec($curl);
- curl_close($curl);
- $rtn = json_decode($response);
- return $rtn->access_token;
- }
- }
|