AI技术
 
使用php调用openai api
1、设置openai的api key
  • $openai_api_key = 'sk-xxxxxx';
2、设置调用地址,我们以chat completions为例。
  • $url = 'https://api.openai.com/v1/chat/completions';
完整的地址,可以参考openai文档中的api endpoint:https://platform.openai.com/docs/guides/text-generation
3、设置api调用的认证信息
  • $header = "Content-Type: application/json\nAuthorization: Bearer $openai_api_key ";
4、设定所需要调用的模型
  • $requestObj = new stdClass();
  • $requestObj->model = 'gpt-4-1106-preview';
完整的模型列表可以参考openapi文档:https://platform.openai.com/docs/models
5、可选:设置返回结果为json格式
为了方便后续代码对返回结果进行处理,我们可以设置返回结果为json格式。如果不需要返回json格式,这一步可以忽略。注意,如果设置了返回结果为json格式,在下面的提示中,也需要明确告诉gpt以json格式返回结果。
  • $response_format = new stdClass();
  • $response_format->type = 'json_object';
  • $requestObj->response_format = $response_format;
6、设置gpt的角色信息
  • $messages = [];
  • $message = new stdClass();
  • $message->role = 'system';
  • $message->content = '你是一个诗人';
  • $messages[] = $message;
7、设置传给gpt的内容信息
  • $message = new stdClass();
  • $message->role = 'user';
  • $message->content = '请写一首关于回归的诗。返回格式为json。';
  • $messages[] = $message;
  • $requestObj->messages = $messages;
注意:如果前面设置了返回格式为json,这里也需要明确要求返回格式为json。
如果内容过长,可以换行,以增强代码的可读性。换行可以使用下面的写法:
  • $message = new stdClass();
  • $message->role = 'user';
  • $message->content = <<<EOD
  • 请写一首关于回归的诗。
  • 返回格式为json。
  • EOD;
  • $messages[] = $message;
  • $requestObj->messages = $messages;
8、序列化请求内容,准备发送给gpt
  • $request = json_encode($requestObj);
9、创建一个请求对象
  • $opts = array(
  •     'http' => [
  •         'method' => 'POST',
  •         'header' => $header,
  •         'content' => $request,
  •         'timeout' => 300
  •     ]
  • );
  • $context = stream_context_create($opts);
在有些情况下,服务器可能缺失ca证书,或者ca证书不是最新的,导致ssl验证失败,这时我们需要更新服务器ca证书,或者干脆忽略证书检查
  • $opts = array(
  •     'http' => [
  •         'method' => 'POST',
  •         'header' => $header,
  •         'content' => $request,
  •         'timeout' => 300
  •     ],
  •     'ssl' => [
  •         'verify_peer' => false,
  •         'verify_peer_name' => false
  •     ]
  • );
  • $context = stream_context_create($opts);
10、发送请求给openai
  • $response = @file_get_contents($url, false, $context);
11、对可能出现的错误进行处理
  • if($response === false){
  •     var_dump($http_response_header);
  •     die();
  • }
如果出错了,请仔细检查错误信息。注意,请求格式不对,比如模型名称写错了时,服务器可能会返回HTTP 400错误,这时需要仔细检查请求信息,并不是openai的服务器出错了。
12、反序列化返回结果,并且进行后续处理
  • $responseObj = json_decode($response);
  • echo $responseObj->choices[0]->message->content;
完整的返回结果可以参考openai文档:https://platform.openai.com/docs/introduction,或者直接执行var_dump($responseObj),观察其中都有哪些属性。
13、完整的代码如下
  • $openai_api_key = 'sk-xxxxxx';
  • $url = 'https://api.openai.com/v1/chat/completions';
  • $header = "Content-Type: application/json Authorization: Bearer $openai_api_key ";
  • $requestObj = new stdClass();
  • $requestObj->model = 'gpt-4-1106-preview';
  • $response_format = new stdClass();
  • $response_format->type = 'json_object';
  • $requestObj->response_format = $response_format;
  • $messages = [];
  • $message = new stdClass();
  • $message->role = 'system';
  • $message->content = '你是一个诗人';
  • $messages[] = $message;
  • $message = new stdClass();
  • $message->role = 'user';
  • $message->content = <<<EOD
  • 请写一首关于回归的诗。
  • 返回格式为json。
  • EOD;
  • $messages[] = $message;
  • $requestObj->messages = $messages;
  • $request = json_encode($requestObj);
  • $opts = array(
  •     'http' => [
  •         'method' => 'POST',
  •         'header' => $header,
  •         'content' => $request,
  •         'timeout' => 300
  •     ],
  •     'ssl' => [
  •         'verify_peer' => false,
  •         'verify_peer_name' => false
  •     ]
  • );
  • $context = stream_context_create($opts);
  • $response = @file_get_contents($url, false, $context);
  • if($response === false){
  •     var_dump($http_response_header);
  •     die();
  • }
  • $responseObj = json_decode($response);
  • echo $responseObj->choices[0]->message->content;
 
关注我们,获取更多资讯
扫码使用笔记,随时记录各种灵感