ErnieBotTurbo.php 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. <?php
  2. namespace app\controller\api;
  3. use app\service\api\ImageCensorServiceFacade;
  4. use app\service\api\InsServiceFacade;
  5. use app\service\api\UserServiceFacade;
  6. use app\service\ConfServiceFacade;
  7. use app\service\MemberServiceFacade;
  8. use laytp\controller\Api;
  9. class ErnieBotTurbo extends Api
  10. {
  11. public $noNeedLogin = [
  12. "test",
  13. ];
  14. const API_KEY = "biAmXmmAbUX4O4dP1YRL3LuX";
  15. const SECRET_KEY = "dhTZSa083FfhIsSPahGsroVF5yEPpkHw";
  16. public function test(){
  17. $this->run(['messages' => [["role" => "user","content"=>"写一篇2000字的文章,关于我的母亲"]],"stream" => true]); //,
  18. }
  19. /**
  20. * 运行
  21. * @param array $message
  22. * @return bool|string
  23. */
  24. public function run(array $message) {
  25. $i = 0;
  26. // ob_start();
  27. $callback = function ($ch, $data) use(&$stdout,&$i){
  28. $i++;
  29. $jsonString = substr($data, 6, -1);
  30. $complete = @json_decode($jsonString, true);
  31. if ($complete['is_end']){
  32. header('Connection: close');
  33. // 刷新输出缓冲区并关闭输出缓冲
  34. ob_end_flush();
  35. // 结束当前脚本
  36. exit;
  37. }
  38. echo $complete['result'];
  39. ob_flush();
  40. flush();
  41. return strlen($data);
  42. };
  43. $ch = curl_init();
  44. curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
  45. curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
  46. curl_setopt($ch, CURLOPT_URL, "https://aip.baidubce.com/rpc/2.0/ai_custom/v1/wenxinworkshop/chat/eb-instant?access_token={$this->getAccessToken()}");
  47. curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
  48. curl_setopt($ch, CURLOPT_HTTPHEADER, array(
  49. 'Content-Type: application/json'
  50. ));
  51. curl_setopt($ch, CURLOPT_POST, true);
  52. curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($message,256));
  53. curl_setopt($ch, CURLOPT_WRITEFUNCTION, $callback);
  54. register_shutdown_function(function() use ($ch, $stdout) {
  55. curl_close($ch);
  56. fclose($stdout);
  57. });
  58. curl_exec($ch);
  59. }
  60. /**
  61. * 使用 AK,SK 生成鉴权签名(Access Token)
  62. * @return string 鉴权签名信息(Access Token)
  63. */
  64. private function getAccessToken(){
  65. $curl = curl_init();
  66. $postData = array(
  67. 'grant_type' => 'client_credentials',
  68. 'client_id' => self::API_KEY,
  69. 'client_secret' => self::SECRET_KEY
  70. );
  71. curl_setopt_array($curl, array(
  72. CURLOPT_URL => 'https://aip.baidubce.com/oauth/2.0/token',
  73. CURLOPT_CUSTOMREQUEST => 'POST',
  74. CURLOPT_RETURNTRANSFER => true,
  75. CURLOPT_POSTFIELDS => http_build_query($postData)
  76. ));
  77. $response = curl_exec($curl);
  78. curl_close($curl);
  79. $rtn = json_decode($response);
  80. return $rtn->access_token;
  81. }
  82. }