chatgpt流式返回数据

  • A+
所属分类:编程茶楼

用普通方式请求chatgpt返回数据没啥亮点很简单,但是显然已经不能满足使用时的速度和逼格了

这时候只需要再请求时添加一个参数即可获得openai接口的流式返回了

'stream' => true,
chatgpt流式返回数据

这时候需要用到curl的一个选项 CURLOPT_WRITEFUNCTION

CURLOPT_WRITEFUNCTION是一个 cURL 选项,用于指定一个回调函数,该函数将被 cURL 库调用来处理接收到的响应数据。通过使用CURLOPT_WRITEFUNCTION,你可以自定义处理响应数据的方式。

具体怎么用呢:

curl请求openai的代码这里就省略了

curl_setopt($ch, CURLOPT_WRITEFUNCTION, function ($ch,$data)  {
  // 在这里处理接收到的响应数据
  // $data 参数是接收到的数据
  // 可以将数据保存到文件、输出到屏幕等等
  echo $data;
  return strlen($data);//返回接收到的数据长度
}

由于接口返回的数据是一个完整的字符串,所以我们需要处理一下才可以转换成可以操作的数组

// 1、把所有的 'data: {' 替换为 '{' ,'data: [' 换成 '['
$buffer = str_replace('data: {', '{', $buffer);
$buffer = str_replace('data: [', '[', $buffer);

// 2、把所有的 '}\n\n{' 替换维 '}[br]{' , '}\n\n[' 替换为 '}[br]['
$buffer = str_replace("}\n\n{", '}[br]{', $buffer);
$buffer = str_replace("}\n\n[", '}[br][', $buffer);

// 3、用 '[br]' 分割成多行数组
$lines = explode('[br]', $buffer);

然后呢就可以将处理好的数据返回给前端,此时返回的数据是一个字一个字的过去,前端只需要将拿到的数据追加到页面中即可

我这里用的webman框架,前后端通过 webman/push插件进行通信,轻松就将数据推送给前端

后端将数据发送到前端的方式有很多,这里就不作赘述了,最后来看一下效果

chatgpt流式返回数据

注:PHP环境需大于8.1

示例代码下载

  • 我的微信
  • 这是我的微信扫一扫
  • weinxin
  • 我的微信公众号
  • 我的微信公众号扫一扫
  • weinxin

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: