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);
これにより、正しくデコードされているか、必要なデータが含まれているか、などを確認することができます。