给菜菜鸟站长对接chatgpt相关的PHP开发教程

查看 59|回复 3
作者:美文苑文学网   
大家都知道chatgpt在国内是无法访问的,是需要FQ去申请账号密码与key的!其实呢我给大家想说的是想稳定还是建议买个日本线路的轻量云!服务器上面不仅可以申请账号与key的!而且还可以反向代理chatgpt的接口地址供国内的轻量云使用!一举两得的事情而且还很稳定!(如果想反向代理自己的地址而又不会的,这个要打赏点费用远程指导)如果是个十足的超级大懒人我在这里强烈推荐别人搭建好的反向代理地址:https://www.openai-proxy.com 稳如老狗!非常稳定!!!!!(例子也是用这个地址)下面开始讲解用php如何开发流式的chatgpt流式输出,拥有像打字机一样逐行逐字的显示结果!体验非常好!
首先前端提交要建立接口需要的JSON,比如
[ol]
  • var data = {
  • message: alytyqw,
  • context: JSON.stringify(contextarray),
  • };
  • var jsondata=JSON.stringify(data);[/ol]复制代码那么后端的php怎么接收呢?参照下面的写法[ol]
  • 'gpt-3.5-turbo-0613',"stream"=>true,"max_tokens"=>3000];
  • $context = json_decode($api->param('context',$data['context'],'RepPostStr')?: "[]", true) ?: [];//提出问题联系上下文需要传入参数context
  • if (!empty($context)) {
  •     $context = array_slice($context, -5);
  •     foreach ($context as $message) {
  •         $postData['messages'][] = ['role' => 'user', 'content' => str_replace("\n", "\\n", $message[0])];
  •         $postData['messages'][] = ['role' => 'assistant', 'content' => str_replace("\n", "\\n", $message[1])];
  •                 $wenxinyiyanask=RepPostStr($message[0]);
  •     }
  • }else{
  • $wenxinyiyanask=$api->param('message',$data['message'],'RepPostStr');        
  • }
  • $postData['messages'][] = ['role' => 'user', 'content' =>$api->param('message',$data['message'],'RepPostStr')];
  • $postData = json_encode($postData);[/ol]复制代码
    上面的$data值就是把前端提交过来的JSON转换成我们需要的数组了,而后就是给予判断了,如果存在上下文的数组那就循环获取下,如果不存在就取数组message里面的值!最后 json_encode函数在把数组转换为curl需要的JSON对象!
    所有的准备工作已经就绪了!下面开始curl函数
    [ol]
  • $ch = curl_init();
  • $headers= ['Content-Type: application/json','Authorization: Bearer ' . $apikey];
  • $callback = function ($ch, $data) {
  •     $complete = json_decode($data);
  •     if (isset($complete->error)) {
  •         setcookie("errcode", $complete->error->type);
  •     setcookie("errmsg", $complete->error->message);        
  •     echo "event: close".PHP_EOL;
  •     echo "data: Connection closed".PHP_EOL . PHP_EOL;
  •     ob_flush();
  •         flush();
  •     }
  •         echo $data;        
  •         ob_flush();
  •         flush();        
  •     return strlen($data);
  • };
  • curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
  • curl_setopt($ch, CURLOPT_URL, $wenxinapiurl);
  • curl_setopt($ch, CURLOPT_POSTFIELDS, $postData);
  • curl_setopt($ch, CURLOPT_POST, 1);
  • curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
  • curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
  • curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
  • curl_setopt($ch, CURLOPT_WRITEFUNCTION, $callback);
  • curl_exec($ch);
  • curl_close($ch);[/ol]复制代码这样就完成chatgpt流式输出数据了!接下来就是前端接收了!注:(sse原生不支持POST数据的,自己百度搜索下载一个SSE.JS的组件,用法与原生的SSE基本一样)

    数组, 地址

  • 长泰   
    看不懂 新技术  
    美文苑文学网
    OP
      

    充分说明机器人也不怎么样?连早就出来了一个有一个叫SSEJS的东西就可以POST的!用法与原生sse一模一样!


    image.png (20.08 KB, 下载次数: 0)
    下载附件
    保存到相册
    8分钟前 上传

    这些都是那机器人AI的回答没有一个是正确的(最可恶的是百度文心一言4.0还是收费的都没有正确回答出来)


    image.png (397.44 KB, 下载次数: 0)
    下载附件
    保存到相册
    10分钟前 上传



    image.png (408.39 KB, 下载次数: 0)
    下载附件
    保存到相册
    9分钟前 上传

    余神   
    看不懂 啊看不懂
    您需要登录后才可以回帖 登录 | 立即注册

    返回顶部