Ошибка API OpenAI: «Вы не предоставили ключ API. Вам необходимо указать ключ API в заголовке авторизации с использованием аутентификации на предъявителя»

Я создаю PHP-скрипт для доступа к API Open Ai, чтобы задать запрос и получить ответ.

Я получаю следующую ошибку:

Вы не предоставили ключ API. Вам необходимо предоставить ключ API в Заголовок авторизации с использованием Bearer auth (т. е. Authorization: Bearer ТВОЙ КЛЮЧ)

... но я думал, что предоставляю ключ API в первой переменной?

Вот мой код:

$api_key = "sk-U3B.........7MiL";

$query = "How are you?";

$url = "https://api.openai.com/v1/engines/davinci/jobs";

// Set up the API request headers
$headers = array(
    "Content-Type: application/json",
    "Authorization: Bearer " . $api_key
);

// Set up the API request body
$data = array(
    "prompt" => $query,
    "max_tokens" => 100,
    "temperature" => 0.5
);

// Use WordPress's built-in HTTP API to send the API request
$response = wp_remote_post( $url, array(
    'headers' => $headers,
    'body' => json_encode( $data )
) );

// Check if the API request was successful
if ( is_wp_error( $response ) ) {
    // If the API request failed, display an error message
    echo "Error communicating with OpenAI API: " . $response->get_error_message();
} else {
    // If the API request was successful, extract the response text
    $response_body = json_decode( $response['body'] );
    //$response_text = $response_body->choices[0]->text;
    var_dump($response_body);
    // Display the response text on the web page
    echo $response_body;

Не уверен, но примеры в примечаниях пользователя wp_remote_post используют массив заголовков по-разному (ключ => значение). См. примеры: developer.wordpress.org/reference/functions/wp_remote_post/…

Honk der Hase 09.02.2023 18:07
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
1
230
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Все конечные точки Engines устарели.

Это правильная конечная точка завершения:

https://api.openai.com/v1/completions

Рабочий пример

Если вы запустите php test.php в CMD, API OpenAI вернет следующее завершение:

строка (23) "

Это действительно испытание»

test.php

<?php
    $ch = curl_init();

    $url = 'https://api.openai.com/v1/completions';

    $api_key = 'sk-xxxxxxxxxxxxxxxxxxxx';

    $post_fields = '{
        "model": "text-davinci-003",
        "prompt": "Say this is a test",
        "max_tokens": 7,
        "temperature": 0
    }';

    $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, $post_fields);
    curl_setopt($ch, CURLOPT_HTTPHEADER, $header);

    $result = curl_exec($ch);
    if (curl_errno($ch)) {
        echo 'Error: ' . curl_error($ch);
    }
    curl_close($ch);

    $response = json_decode($result);
    var_dump($response->choices[0]->text);
?>

Большое спасибо за Вашу помощь. Я изменил конечную точку и обновил переменную $url, но, к сожалению, проблемы продолжаются. Я определенно не использовал кредит, поскольку я только начал пытаться использовать API. Итак, вы знаете, что еще я могу делать неправильно?

sw123456 09.02.2023 18:15

Вам это помогает?

Cervus camelopardalis 09.02.2023 18:18

К сожалению, нет, я пытался внести некоторые изменения, описанные в ссылке, но, к сожалению, это не помогло. У вас нет шансов получить образец сценария, который позволит просто задать запрос и получить ответ в php? Спасибо

sw123456 09.02.2023 18:28

Вы просите простой пример PHP?

Cervus camelopardalis 09.02.2023 18:35

Этот PHP-скрипт является частью плагина WordPress и находится на сервере. Может ли быть проблемой способ ввода пароля?

sw123456 09.02.2023 18:35

Простой пример PHP... да, пожалуйста, если возможно?

sw123456 09.02.2023 18:43

Завтра отредактирую свой ответ. :)

Cervus camelopardalis 09.02.2023 19:02

Давайте продолжим обсуждение в чате.

sw123456 10.02.2023 10:10

Другие вопросы по теме