使用PHP访问ChatGPT API

Ban*_*ian 3 openai-api chatgpt-api

我正在编写一个简单的 PHP 脚本,没有依赖项来访问 ChatGPT API,但它抛出了一个我不明白的错误:

这是到目前为止的脚本:

    $apiKey = "Your-API-Key";
    $url = 'https://api.openai.com/v1/chat/completions';  
    
    $headers = array(
        "Authorization: Bearer {$apiKey}",
        "OpenAI-Organization: YOUR-ORG-STRING", 
        "Content-Type: application/json"
    );
    
    // Define messages
    $messages = array();
    $messages["role"] = "user";
    $messages["content"] = "Hello future overlord!";
    
    // Define data
    $data = array();
    $data["model"] = "gpt-3.5-turbo";
    $data["messages"] = $messages;
    $data["max_tokens"] = 50;

    // init curl
    $curl = curl_init($url);
    curl_setopt($curl, CURLOPT_POST, 1);
    curl_setopt($curl, CURLOPT_POSTFIELDS, json_encode($data));
    curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
    
    $result = curl_exec($curl);
    if (curl_errno($curl)) {
        echo 'Error:' . curl_error($curl);
    } else {
        echo $result;
    }
    
    curl_close($curl);

Run Code Online (Sandbox Code Playgroud)

这会从 API 返回一个错误:

{"model":"gpt-3.5-turbo","messages":{"role":"user","content":"你好未来的霸主!"},"max_tokens":50}{ "error": { "message": "{'role': 'user', 'content': '你好未来霸主!'} 不是 'array' - 'messages' 类型", "type": "invalid_request_error", "param":空,“代码”:空 } }

AFAIK,我将消息参数作为数组发送。这哪里出了问题?这是 json_encode 的问题吗?为什么 API 不认为这是一个数组?

提前致谢!

Ban*_*ian 5

啊...我看到了这个问题...如果其他人有同样的问题,请在这里留下这个答案:

有两个不同的参数,“message”和“messages”。我没有注意到错误消息中的单数/复数。

更正后的代码在这里:

// Define messages
$messages = array();
$message = array();
$message["role"] = "user";
$message["content"] = "Hello future overlord!";
$messages[] = $message;

// Define data
$data = array();
$data["model"] = "gpt-3.5-turbo";
$data["messages"] = $messages;
$data["max_tokens"] = 50;
Run Code Online (Sandbox Code Playgroud)

谢谢楼上各位的评论。