技术文摘

给菜菜鸟站长对接openai开发流式sse输出的PHP开发教程

作者:雨祺   发表于:
浏览:81次    字数:1704  原创
级别: 站长   总稿: 69 篇,  月稿: 0
大家都知道openai在国内是无法访问的,是需要FQ去申请账号密码与key的!其实呢我给大家想说的是想稳定还是建议买个日本线路的轻量云!服务器上面不仅可以申请账号与key的!而且还可以反向代理openai的接口地址供国内的轻量云使用!一举两得的事情而且还很稳定!(如果想反向代理自己的地址而又不会的,这个要打赏点费用远程指导)如果是个十足的超级大懒人我在这里强烈推荐别人搭建好的反向代理地址:
  1. https://www.openai-proxy.com 
稳如老狗!非常稳定!!!!!(例子也是用这个地址)下面开始讲解用php如何开发流式的chatgpt流式输出,拥有像打字机一样逐行逐字的显示结果!体验非常好!

首先前端提交要建立接口需要的JSON,比如
  1. var data = { 
  2. message: alytyqw, 
  3. context: JSON.stringify(contextarray), 
  4. }; 
  5. var jsondata=JSON.stringify(data); 
那么后端的php怎么接收呢?参照下面的写法
  1. <?php 
  2. header('Access-Control-Allow-Origin: *'); 
  3. header("Content-Type: text/event-stream"); 
  4. $apikey = 'sk-1oVG9dq1s6wjikoowkwKYVPJ34J58FgsBprSpYv4p';//到chatgpt申请 
  5. $wenxinapiurl="https://api.openai-proxy.com/v1/chat/completions";//chatgpt接口地址有反向代理 
  6. $data = json_decode(file_get_contents('php://input'), true); 
  7. $postData = ["model"=>'gpt-3.5-turbo-0613',"stream"=>true,"max_tokens"=>3000]; 
  8. $context = json_decode($api->param('context',$data['context'],'RepPostStr')?: "[]"true) ?: [];//提出问题联系上下文需要传入参数context 
  9. if (!empty($context)) { 
  10.     $context = array_slice($context, -5); 
  11.     foreach ($context as $message) { 
  12.         $postData['messages'][] = ['role' => 'user''content' => str_replace("n""\n", $message[0])]; 
  13.         $postData['messages'][] = ['role' => 'assistant''content' => str_replace("n""\n", $message[1])]; 
  14.                 $wenxinyiyanask=RepPostStr($message[0]); 
  15.     } 
  16. }else
  17. $wenxinyiyanask=$api->param('message',$data['message'],'RepPostStr');        
  18. $postData['messages'][] = ['role' => 'user''content' =>$api->param('message',$data['message'],'RepPostStr')]; 
  19. $postData = json_encode($postData); 
上面的$data值就是把前端提交过来的JSON转换成我们需要的数组了,而后就是给予判断了,如果存在上下文的数组那就循环获取下,如果不存在就取数组message里面的值!最后 json_encode函数在把数组转换为curl需要的JSON对象!

所有的准备工作已经就绪了!下面开始curl函数
  1. $ch = curl_init(); 
  2. $headers= ['Content-Type: application/json','Authorization: Bearer ' . $apikey]; 
  3. $callback = function ($ch, $data) { 
  4.     $complete = json_decode($data); 
  5.     if (isset($complete->error)) { 
  6.         setcookie("errcode", $complete->error->type); 
  7.     setcookie("errmsg", $complete->error->message);         
  8.     echo "event: close".PHP_EOL; 
  9.     echo "data: Connection closed".PHP_EOL . PHP_EOL; 
  10.     ob_flush(); 
  11.         flush(); 
  12.     } 
  13.         echo $data;         
  14.         ob_flush(); 
  15.         flush();         
  16.     return strlen($data); 
  17. }; 
  18. curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); 
  19. curl_setopt($ch, CURLOPT_URL, $wenxinapiurl); 
  20. curl_setopt($ch, CURLOPT_POSTFIELDS, $postData); 
  21. curl_setopt($ch, CURLOPT_POST, 1); 
  22. curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
  23. curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); 
  24. curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE); 
  25. curl_setopt($ch, CURLOPT_WRITEFUNCTION, $callback); 
  26. curl_exec($ch); 
  27. curl_close($ch); 
这样就完成chatgpt流式输出数据了!接下来就是前端接收了!注:(sse原生不支持POST数据的,自己百度搜索下载一个SSE.JS的组件,用法与原生的SSE基本一样)

【审核人:站长】

收藏   加好友   生成海报   分享
点赞(0)
打赏
Tags: PHP 二次开发 openai 教程 站长 菜鸟

发布者资料

热门文章

技术文摘

查看更多技术文摘
首页
栏目
搜索
会员
投稿