TaskSystem/app/api/controller/XunFeiController.php
2023-10-09 22:39:21 +08:00

142 lines
4.8 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?php
// +----------------------------------------------------------------------
// | likeadmin快速开发前后端分离管理后台PHP版
// +----------------------------------------------------------------------
// | 欢迎阅读学习系统程序代码,建议反馈是我们前进的动力
// | 开源版本可自由商用可去除界面版权logo
// | gitee下载https://gitee.com/likeshop_gitee/likeadmin
// | github下载https://github.com/likeshop-github/likeadmin
// | 访问官网https://www.likeadmin.cn
// | likeadmin团队 版权所有 拥有最终解释权
// +----------------------------------------------------------------------
// | author: likeadminTeam
// +----------------------------------------------------------------------
namespace app\api\controller;
use IFlytek\Xfyun\Speech\ChatClient;
use IFlytek\Xfyun\Speech\IatClient;
use WebSocket\Client;
/**
* 讯飞
* Class WechatController
*/
class XunFeiController extends BaseApiController
{
public array $notNeedLogin = ['chat', 'iat'];
private $app_id='2eda6c2e';
private $api_key='12ec1f9d113932575fc4b114a2f60ffd';
private $api_secret='MDEyMzE5YTc5YmQ5NjMwOTU1MWY4N2Y2';
public function chat()
{
header('X-Accel-Buffering: no');
$parmas=$this->request->param('content');
if(empty($parmas)){
return $this->success('success');
}
$chat=new ChatClient($this->app_id,$this->api_key,$this->api_secret);
$client = new Client($chat->assembleAuthUrl('wss://spark-api.xf-yun.com/v2.1/chat'));
// 连接到 WebSocket 服务器
if ($client) {
// 发送数据到 WebSocket 服务器
$data = $this->getBody($this->app_id,$parmas);
$client->send($data);
// 从 WebSocket 服务器接收数据
$answer = "";
while(true){
$response = $client->receive();
$resp = json_decode($response,true);
$code = $resp["header"]["code"];
// echo "从服务器接收到的数据: " . $response;
if(0 == $code){
$status = $resp["header"]["status"];
if($status != 2){
$content = $resp['payload']['choices']['text'][0]['content'];
$answer .= $content;
print($answer);
ob_flush(); // 刷新输出缓冲区
flush(); // 刷新系统输出缓冲区
}else{
$content = $resp['payload']['choices']['text'][0]['content'];
$answer .= $content;
$total_tokens = $resp['payload']['usage']['text']['total_tokens'];
print("\n本次消耗token用量\n");
print($total_tokens);
ob_flush(); // 刷新输出缓冲区
flush(); // 刷新系统输出缓冲区
break;
}
}else{
return $this->fail( "服务返回报错".$response);
break;
}
}
ob_flush(); // 刷新输出缓冲区
flush(); // 刷新系统输出缓冲区
return $this->success('success');
} else {
return $this->fail('无法连接到 WebSocket 服务器');
}
}
//构造参数体
function getBody($appid,$question){
$header = array(
"app_id" => $appid,
"uid" => "1"
);
$parameter = array(
"chat" => array(
"domain" => "generalv2",
"temperature" => 0.5,
"max_tokens" => 1024
)
);
$payload = array(
"message" => array(
"text" => array(
array("role" => "user", "content" => $question)
)
)
);
$json_string = json_encode(array(
"header" => $header,
"parameter" => $parameter,
"payload" => $payload
));
return $json_string;
}
public function iat()
{
header('X-Accel-Buffering: no');
$parmas=$this->request->param('content');
$appid = "fa185cd6";
$apiSecret = "1474397d85f34828194622aab80f1e51";
$apiKey = "ZjQOYjhjMmE2NmMzYzhiMjU30GE1NjJl";
$hostUrl = "wss://iat-api.xfyun.cn/v2/iat";
// $iat=new IatClient($appid,$apiKey,$apiSecret);
$iat=new IatClient($this->app_id,$this->api_key,$this->api_secret);
halt($iat->assembleAuthUrl($hostUrl));
$client = new Client($iat->assembleAuthUrl($hostUrl));
usleep(1); //等待数据接收完成
}
}