调用OpenAI Chat Completions API返回NULL?排查PHP代码问题
修复调用GPT-3.5-Turbo API返回NULL的问题
你的代码存在两处关键错误,导致请求失败或解析出NULL:
1. messages参数格式不符合API要求
OpenAI Chat Completions API要求messages是包含消息对象的数组,你当前直接传入单个关联数组,没有用外层数组包裹,会导致API无法正确解析请求,返回错误响应,最终json_decode后得到NULL。
2. 响应解析路径错误
API返回的choices[0]->message是一个对象,而非数组,你用message[0]访问会直接得到NULL,正确的访问方式是message->content。
修正后的完整代码
$ch = curl_init(); $query = "What is the capital city of England?"; $url = 'https://api.openai.com/v1/chat/completions'; $api_key = 'sk-**************************************'; // 修正messages格式:外层添加数组包裹 $post_fields = [ "model" => "gpt-3.5-turbo", "messages" => [["role" => "user","content" => $query]], "max_tokens" => 500, "temperature" => 0.8 ]; $header = [ 'Content-Type: application/json', 'Authorization: Bearer ' . $api_key ]; curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($post_fields)); curl_setopt($ch, CURLOPT_HTTPHEADER, $header); $result = curl_exec($ch); if (curl_errno($ch)) { echo 'CURL错误: ' . curl_error($ch); exit; } curl_close($ch); // 调试时可先打印原始响应,排查API返回的错误信息 // var_dump($result); $response = json_decode($result); // 检查JSON解析是否成功 if (json_last_error() !== JSON_ERROR_NONE) { echo 'JSON解析错误: ' . json_last_error_msg(); exit; } // 修正响应内容的访问路径 if (isset($response->choices[0]->message->content)) { $content = $response->choices[0]->message->content; echo $content; } else { echo '未获取到有效响应内容'; // 打印完整响应排查问题 var_dump($response); }
额外调试建议
- 先打印
$result查看API返回的原始内容,若返回错误信息(如密钥无效、额度不足等),可直接定位问题 - 使用
json_last_error()检查JSON解析是否失败,避免因响应格式错误导致后续操作报错
内容的提问来源于stack exchange,提问作者sw123456
相关产品推荐
相关产品推荐

