AI関連 プログラミング雑記

【PHP】ChatGPTのAPIを登録から出力まで5分で

楠 剛毅(goke)

個人開発から世界を変えるようなプロダクトづくりを目指しています

この記事に辿り着いた方は、

「他の記事のコードを試したけど動かなかった」

「ChatGPTにコードを書いてもらったけど動かなかった」

という流れでここまでいらっしゃったかもしれません。
僕もいろんな記事を見たのですがイマイチ信ぴょう性の高い記事が見つからず、自分でやってみてうまくいった結果を下記にまとめてみました。
僕がつまずいた部分は修正したので下記のステップを踏めば5分で完了すると思います。お役に立てれば幸いです。

合わせて読みたい

実施の手順は下記のとおりです。
特に難しい部分はありません。

  • API Keyを手にいれる
  • 1を含めたコードを書く
  • 実行

API keyを手にいれる

まずはOpenAIのサイトに行き、右上にSign upがあるので押します。

chatGPTのAPIを使うためにサインアップする

するとサインアップ画面になるので、GoogleアカウントかMicrosoftアカウントで登録します。
ここはChatGPTを利用開始した時と同じステップですね。
サインアップすると右上にアイコンが出てくるのでクリックするとView API keysというメニューがあるので押下します。

chatGPTのAPIを使うためにサインアップし、API keyを手に入れる

すると次の画面の中央にCreate new secret keyというボタンがあるのでこれを押下します。
ちなみにsecret keyと言ったりAPI keyと言ったりしますが同じものを指しています。

chatGPTのAPIを使うためにサインアップし、API keyを手に入れる

表示されたものがAPI keyです。
コピーしてどこかに貼り付けておいてください。
一度閉じると2度とみることはできません。わからなくなってしまった場合は改めて発行しなおせばいいです。

chatGPTのAPIを使うためにサインアップし、API keyを手に入れる

実装

コードは下記のとおりです。
「YOUR_API_KEY」に先ほど取得したAPI_KEYを入れてください。

<?php
function call_gpt_3_5_turbo_api($messages, $api_key) {
    // OpenAI API URL
    $url = "https://api.openai.com/v1/chat/completions";

    // リクエストヘッダー
    $headers = array(
        "Content-Type: application/json",
        "Authorization: Bearer " . $api_key
    );

    // リクエストボディ
    $data = array(
        "model" => "gpt-3.5-turbo",
        "messages" => $messages,
        "max_tokens" => 500, // 応答の最大トークン数(≒文字数)を設定
    );

    // cURLを初期化
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_POST, true);
    curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
    curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

    // APIにリクエストを送信し、応答を取得
    $response = curl_exec($ch);

    // cURLを閉じる
    curl_close($ch);

    return $response;
}

$api_key = "YOUR_API_KEY_HERE!"; // ここにAPIキーを入力
$messages = array(
    array("role" => "system", "content" => "You are a helpful assistant."),
    array("role" => "user", "content" => "コーヒーの美味しい淹れ方を教えて")
);

$response = call_gpt_3_5_turbo_api($messages, $api_key);
$response_decoded = json_decode($response, true);

// 応答を表示
echo "Prompt: " . $messages[1]["content"] . "\n";
echo "Response: " . $response_decoded["choices"][0]["message"]["content"] . "\n";
?>

上記を動かしてみると

Prompt: コーヒーの美味しい淹れ方を教えて Response: コーヒーの美味しい淹れ方はいくつかありますが、一般的には以下の手順が良く使われます。 1. 像や手動式のコーヒーミルを使って、豆を挽く。 →挽き方によって味わいが変わります。中挽きから細かめの挽き目まで、お好みの挽き方で試してみてください。 2. コーヒーフィルターとペーパーをセットして、熱湯を通す。 →湯を注いだ際に、フィルターが動かないように、あらかじめフィルターを湿らせておくと良いです。 3. コーヒー粉をフィルターにセット。 →通常、コーヒー粉約10gに対して、140mlの湯で抽出するのが目安です。 4. 湯を注ぎ、蒸らす。 →コーヒー粉に少量の湯を注ぎ、蒸らすことで風味が引き出されます。 5. 残りの湯をじっくり注ぎ、抽出する。 →湯を注ぎながら、コーヒーカップの中で回しながら注ぐと均一に抽出できます。 6. 完成したコーヒーをカップに注いで飲む。 →お好みで砂糖やミルクを加えても美味しくいただけます。 以上が、一般的なコーヒーの淹れ方です。ただし、好みや使用する道具によって変わることもあるので、試行錯誤しながら自分に合った淹れ方を見つけると良いです

のような結果が出ると思います。
たったこれだけでした。とても簡単ですね!

上記のコードに登場するTokenとはおおよそ単語数と同じ意味のようです。
公式ページによると、下記の文章は35 Tokenとのこと。

Multiple models, each with different capabilities and price points. Prices are per 1,000 tokens. You can think of tokens as pieces of words, where 1,000 tokens is about 750 words. This paragraph is 35 tokens.

日本語の場合は

東京は日本の首都です。

という文章のTokenは10になるようですが、ChatGPTによると、トークン化の方法はモデルや使用されるライブラリによって異なることがあるので、日本語の場合は概ね文字数と同じと思っておくとよさそうです。

  • です

パラメータなどの細かい情報は公式を見てチューニングしてみてください。
https://platform.openai.com/docs/introduction/overview

利用料金や制限

利用料金

上記のコードはお金を払わずとも実行できたと思いますが、APIを利用するには料金がかかります
料金はモデル(利用するAPI)ごとに異なります
今回はgpt-3.5-turboのモデルを使用したので1000Tokenにつき$0.002ですね。

openAIのAPI利用料金
https://openai.com/pricing

はじめの$5、または3ヶ月間は無料で利用できるので、上記のコードは課金せずとも動いたわけです。
どれくらい利用したかはご自身の管理ページから確認することができます。
ちなみに、gpt-3.5-turboなら永遠にも思える$5はGPT4のモデルを使うと結構すぐに到達してしまうのでまずは試したい方はgpt-3.5-turboから使うことお勧めします。

ChatGPT APIの利用料金の確認
ChatGPT APIの利用料金の確認

制限

APIの利用には全体の動作を安定させるための制限もあります。
制限はモデル(API)や利用者の契約状況によって異なります。
下記におけるTPMとRPMはそれぞれ

  • TPM(Token Per Minute):1分あたりに利用できるTokenの上限
  • RPM(Request Per Minute):1分あたりにリクエストできる回数の上限
APIコールの制限
https://platform.openai.com/docs/guides/rate-limits/overview

ChatGPTをご利用でかつプログラミングをしている方は気になるだろう、
プロンプトエンジニアの時代はくるか?についてはTwitterでも話題になりました。

下記の記事をご覧ください。

あわせて読みたい

参考:ちなみに、ChatGPTのコーディングには誤りがあった

上記のコードはChatGPTに作ってもらったものなのですが、

プロンプト

gpt-3.5-turboとAPIを使って質問をすると回答してくれる簡単なコードを作って

出力してくれたコードには何箇所か間違いがありました。
まさか自分のAPIを使った実装方法についてエンドポイントや必要なパラメータを間違えるとは…!
そんな時はエラーメッセージを貼り付けたり、怪しい部分を指摘すると直してくれます。

chatGPTのコードの誤りを正す
chatGPTのコードの誤りを正す

chatGPTのコードの誤りを正す
chatGPTのコードの誤りを正す

生成AI系の情報を発信しているのでTwitterもぜひフォローしてください!

  • この記事を書いた人

楠 剛毅(goke)

個人開発から世界を変えるようなプロダクトづくりを目指しています

-AI関連, プログラミング雑記