使用PHP Curl调用OpenAI API仅返回元数据数组,无Prompt响应
PHP Curl调用OpenAI API仅返回元数据无响应的问题解决
问题情况
使用PHP Curl请求OpenAI的v1/completions接口时,仅得到Curl请求的元数据数组,没有针对Prompt的实际响应内容。已查阅OpenAI官方指南但未找到解决方法,推测是简单错误导致。
代码问题分析
从提供的代码和返回数据来看,主要存在两个问题:
- 错误输出了Curl请求的元数据(通过
curl_getinfo()获取的信息),而非OpenAI API返回的响应内容 max_tokens设置为7,数值过小,无法容纳针对提问的有效回答内容
解决方案
- 确保获取并输出的是
curl_exec()返回的API响应,而非curl_getinfo()的元数据 - 调整
max_tokens参数至合理值(比如200),保证能返回完整回答 - 添加基础错误处理,排查请求是否失败或响应解析异常
修正后的代码
$Url = "https://api.openai.com/v1/completions"; $OpenAIModel = "text-davinci-003"; $Headers = [ 'Accept: application/json', 'Content-Type: application/json', 'Authorization: Bearer ' . $ApiKey ]; $Messages = "What is the capital of France and how many people live there?"; $Data = array( 'model' => $OpenAIModel, 'prompt' => $Messages, 'max_tokens' => 200, // 调整为足够返回完整回答的数值 'temperature' => 0.5, 'top_p' => 1, 'best_of' => 2, 'frequency_penalty' => 0.0, 'presence_penalty' => 0.0, ); $Ch = curl_init(); curl_setopt($Ch, CURLOPT_URL, $Url); curl_setopt($Ch, CURLOPT_SSL_VERIFYPEER, true); curl_setopt($Ch, CURLOPT_HTTPHEADER, $Headers); curl_setopt($Ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($Ch, CURLOPT_POST, 1); curl_setopt($Ch, CURLOPT_POSTFIELDS, json_encode($Data)); $Response = curl_exec($Ch); // 添加错误处理 if(curl_errno($Ch)){ echo 'Curl错误: ' . curl_error($Ch); } else { // 解析JSON响应 $responseData = json_decode($Response, true); if(json_last_error() === JSON_ERROR_NONE){ // 输出API返回的实际响应内容 var_dump($responseData); // 直接提取回答内容 if(isset($responseData['choices'][0]['text'])){ echo '回答内容: ' . trim($responseData['choices'][0]['text']); } } else { echo 'JSON解析失败'; } } // 关闭Curl资源 curl_close($Ch);
验证说明
修正后,执行代码会输出OpenAI API返回的包含回答内容的JSON数据,而非Curl的元信息。调整后的max_tokens能确保返回足够长度的回答,覆盖提问中的两个问题(首都和人口)。
内容的提问来源于stack exchange,提问作者Chris E
相关产品推荐
相关产品推荐

