PHP怎么在AI模型响应后流式输出

PHP怎么在AI模型响应后流式输出?

目前市面上的AI模型基本上都是流式输出的,这样做的好处:

  1. 好看;
  2. 模型每秒输出的token受限,如果内容过长,不可能一下子全部输出,所以是以流的形式返回。

那么如果用PHP我们对接了AI模型,也想以流的形式返回给前端怎么办呢?

PHP的CURL就可以做到这一点,自定义一个写入函数即可。

以智谱开放平台的对接为例,直接上代码:

// 发送HTTP请求
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "https://open.bigmodel.cn/api/paas/v4/chat/completions");
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
    "Content-Type: application/json",
    "Authorization: Bearer {$token}"
]);

curl_setopt($ch, CURLOPT_WRITEFUNCTION, function($ch, $response) {
    echo $response; // 直接输出数据
    flush(); // 确保即时输出
    return strlen($response); // 返回接收到的数据长度
});

curl_exec($ch);

//输出错误码
if (curl_errno($ch)) {
    return false;
}

curl_close($ch);

有一点需要注意,return strlen($response);这一行返回的长度必须是上面echo的字符串的长度,不然会报类似Failed writing body (63 != 159)的错误。

上面的示例是把智谱返回的流直接输出了,需要的话可以先做下处理。

Leave a Comment

豫ICP备19001387号-1