ChatGPTとおしゃべりしながら「サイトのフォームからOpenAPIに投げてリクエストを返すプログラム」を開発

OpenAPIのAPIが3月2日に公開されてまだ3日しか経っていません。

それなのにtwitterを見ていると土、日も挟んで世間では休みなのに物凄い速度で開発が進んでいます。

LINEでのチャットボットはできたので、
次はウェブサイトにチャットボットを埋め込むことができればと思ってちょっと書いてみました。

正確には、これも私が質問してChatGPT君がソースを書いてくれたのです。

フォームからOpenAPIに投げてリクエストを返すプログラム

下記のソースコードは、
OpenAIのAPIを使用して文字生成を行うWebページを作成するものです。

ソースコードの説明

HTMLのボディ部分のフォーム部分には、「Enter prompt:」というテキストボックスがあり、そこに入力したテキストから文字生成を行います。入力したテキストは、「Generate Text」ボタンを押すことで、OpenAI APIに送信されます。

OpenAI APIに送信されるリクエストには、APIキー、リクエストボディ、リクエストヘッダが含まれています。リクエストボディには、生成させたいテキスト(「prompt」)、生成する最大トークン数(「max_tokens」)、生成する文章数(「n」)、生成を終了するトークン(「stop」)、生成する文章の温度(「temperature」)などが含まれます。

cURLを使用してOpenAI APIにリクエストを送信します。APIからのレスポンスを受け取った後、cURLを終了します。

APIからのレスポンスをデコードし、「choices」キーが存在するかどうかをチェックします。「choices」キーが存在する場合、生成されたテキスト(「choices」配列の「text」キー)を抽出して表示します。「choices」キーが存在しない場合は、「An error occurred while generating text.」というエラーメッセージを表示します。

<html>
<head>
    <title>ChatGPT Generated Text</title>
</head>
<body>
    <h1>ChatGPT Generated Text</h1>
    <form action="index.php" method="post">
        <label for="prompt">Enter prompt:</label>
        <input type="text" id="prompt" name="prompt">
        <input type="submit" value="Generate Text">
    </form>
    <?php
    if ($_SERVER["REQUEST_METHOD"] === "POST") {
        // OpenAI API endpoint
        $endpoint = "https://api.openai.com/v1/engines/davinci/jobs";

        // API key
        $api_key = "APIキー";

        // Input text to generate from
        $prompt = $_POST["prompt"];

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

        // API request body
        $data = array(
            "prompt" => $prompt,
            "max_tokens" => 100,
            "n" => 1,
            "stop" => "",
            "temperature" => 0.5
        );

        // Initialize cURL
        $ch = curl_init();

        // Set cURL options
        curl_setopt($ch, CURLOPT_URL, $endpoint);
        curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($ch, CURLOPT_POST, true);
        curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));

        // Execute the API request
        $response = curl_exec($ch);

        // Check if the API request was successful
        if ($response === false) {
            // Output the error message
            echo "cURL error: " . curl_error($ch);
        }

        // Close cURL
        curl_close($ch);

        // Decode the API response
        $result = json_decode($response, true);

        // Check if the API request was successful
        if (isset($result["choices"])) {
            // Extract the generated text from the response
            $generated_text = $result["choices"][0]["text"];

            // Output the generated text
            echo "<p>{$generated_text}</p>";
        } else {
            // Output an error message
            echo "<p>An error occurred while generating text.</p>";
        }
    }
    ?>
</body>
</html>

デバッグ方法

私の質問

このエラーは何ですか?
An error occurred while generating text.

ChatGPTの返答

「An error occurred while generating text」というエラーメッセージは、テキスト生成時にエラーが発生したことを示しています。

このエラーが発生する原因は様々ですが、通常は以下のようなものが考えられます。

  • APIキーが正しくない
  • APIリクエストのURLが間違っている
  • APIリクエストのヘッダーが正しくない
  • APIリクエストのボディが正しくない
  • APIサーバーへのアクセスがブロックされている

このようなエラーが発生した場合は、APIドキュメンテーションを確認して、APIリクエストを再度実行することで解決することができます。また、APIサポートチームに問い合わせることもできます。

私の質問

APIからのレスポンスをデコードしてかえってきているかどう確認したらいい?

ChatGPTの返答

APIからのレスポンスをデコードして正しく帰ってきているか確認するためには、var_dump関数を使うといいです。以下のように、レスポンスをデコードした変数(ここでは$result)に対してvar_dump関数を使うことで、中身がどのようなデータ型・値であるかを確認することができます。

var_dump($result);

これにより、正しくデコードされているか、必要なデータが含まれているか、などを確認することができます。

Bio

田端厚賢

名前:田端厚賢(Atsuyoshi Tabata)

WordPressを中心に企業様から委託を受けてサイトやサーバーの保守・管理、システム開発を行っています。

2024年4月より東大の松尾研でLLLMの開発プロジェクトに参加しています。

プロフィール詳細
Web制作依頼の詳細
お問い合わせはコチラ