【ChatGPT】PHPでOpenAI APIの使い方をマスター!独自サービスを作ろう!

OpenAI社は、OpenAI APIというAPIを提供しています。最近人気のChatGPTをはじめとするAIサービスを利用できるAPIです。うまく活用すれば、AIを使った独自サービスが作れます。今回は、OpenAI APIの概要と使い方について解説いたします。

OpenAI APIの活用事例については別記事で解説しております。こちらもあわせてご覧ください。
https://soune.co.jp/chatgpt-api-whisper-api/

目次 [ひらく ▼]

OpenAI APIとは

OpenAI API」は、ChatGPTなどを実行できるAPIです。
APIなので、プログラミング言語を問わずに利用できることが特徴です。

基本的には、質問を投げると返答が返ってくるだけのシンプルな機能のAPIです。
使い方も簡単なので、ぜひマスターしましょう。

今記事で扱うのは「OpenAI API」となります。それとは別に「ChatGPT API」も存在します。

利用料金について

OpenAI APIの利用には料金がかかります

トークン」という単位で料金が計算されます。
英語の場合、1単語あたりだいたい1トークンになりますが、日本語の場合、文字の種類によって1~3トークンで変動します。
法則性は分かりませんが、漢字よりひらがなの方がトークン数が少なくなる傾向があります。

日本語は、英語と比較して1文字あたりの情報量が多いと言われています。
そう考えると、日本語の料金が高いとは一概に言えないかもしれません。

送信・受信する文章のトークン数と、後述のモデルごとに決められている単価をもとに、実際の利用金額が計算されます。

公式サイトに、トークン数が計測できるページが用意されています。
試しにいろんな文章を入力してみましょう。
https://platform.openai.com/tokenizer

ひとつのアカウントにつき、無料で18ドル分使うことができます。
技術検証や開発時に活用しましょう。

モデルについて

OpenAI APIを利用するにあたり、「モデル」を指定する必要があります。
機能が向上していたり、実行にかかるコスト、AIの訓練に利用されたデータが異なるなどの違いがあります。

公式サイトに利用できるモデルが掲載されています。
新しいモデルが公開されることもあるので、ぜひ確認しましょう。
https://platform.openai.com/docs/models

例えばGPT-3.5のモデルでも、「gpt-3.5-turbo」「text-davinci-003」など、複数のモデルが用意されています。
他にも、音声の文字起こしが可能な「Whisper」、画像生成AI「DALL·E」なども利用可能です。

モデルによって、APIのURLや使い方が異なります
公式サイトに掲載されていますので、API利用前に一度確認しましょう。
https://platform.openai.com/docs/models/model-endpoint-compatibility

APIキーの取得

APIの利用には、APIキーが必要です。
OpenAIの公式サイトから取得しましょう。

まずは下記URLから、OpenAIのサイトにログインします。
https://chat.openai.com/auth/login

まだアカウントがなければ、上記URLの「Sign up」からアカウントを新規作成しましょう。
メールアドレスだけで作成できます。

右上のアカウント部分をクリック→「View API keys」→「Create new secret key」ボタンを押すと、APIキーが作成されます。

こちらのURLからでも、APIキー作成ページを開けます。
https://platform.openai.com/account/api-keys

取得したAPIキーは再表示できません
ブラウザを閉じる前に忘れずメモをとりましょう

もし忘れてしまった場合は、新しいAPIキーを再発行しましょう。

PHPからAPIを使う

サンプルコード

今記事では例として、OpenAI APIをPHPから実行してみるコードを元に説明いたします。
PHPから実行する場合は、cURLを使うことになります。

例として、モデル「gpt-3.5-turbo」を使用する際のコードを記載します。
sk-APIKEY」の部分に、先ほど取得したAPIキーを設定しましょう。

$apikey = "sk-APIKEY";
$url = "https://api.openai.com/v1/chat/completions";

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

// リクエストボディ
$data = array(
  'model' => 'gpt-3.5-turbo',
  'messages' => [
      ["role" => "system", "content" => "関西弁で話して"],
      ['role' => 'user', 'content' => "ここに質問文を書きます")],
  ],
  'max_tokens' => 500,
);

// cURLを使用してAPIにリクエストを送信 
$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL, $url); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
curl_setopt($ch, CURLOPT_POST, true); 
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data)); 
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); 

$response = curl_exec($ch); 
curl_close($ch); 

// 結果をデコード
$result = json_decode($response, true);
$result_message = $result["choices"][0]["message"]["content"];

// 結果を出力 
echo $result_message; 

messages

ChatGPTに送信したいメッセージは、$data内の’messages’に設定します。

上記ソースコードで「ここに質問文を書きます」とある箇所です。

‘messages’は、「‘role’」と「‘content’」からなります。
‘content’」は、メッセージ本文を入れます。
‘role’」は、このメッセージがどのような扱いなのかを指定します。

role名概要
userユーザーから送信されたメッセージ(プロンプト)として扱われます。
AIに質問・教育したいときなどに使用します。
assistantAIから送信されたメッセージとして扱われます。
やり取りの前提条件を指定したいときなどに使用します。
systemAIの受け答え方などを指定できます。
例えば、上記サンプルコードのように「関西弁で答えて」と指定すると、関西弁で返答してくれるようになります。

APIの結果

APIの結果は、JSON形式で返ってきます
下記に、実際に返ってくるJSONの例を挙げます。

{
  "id": "chatcmpl-AAAAAAAAAAAAAAAAAA",
  "object": "chat.completion",
  "created": 1681289477,
  "model": "gpt-3.5-turbo-0301",
  "usage": {
    "prompt_tokens": 87,
    "completion_tokens": 312,
    "total_tokens": 399
  },
  "choices": [
    {
      "message": {
        "role": "assistant",
        "content": "ここにAIからの返答が入ります"
      },
      "finish_reason": "stop",
      "index": 0
    }
  ]
}

ChatGPTからの返答文は”content”に入っています
普通のテキストとして入っていますので、取り出して自由に使えます。

上記サンプルコードでは、結果をjson_decode()でデコードした後、返答文を取り出しています。

他に確認すべき内容としては、“finish_reason”があります。
これに“stop”が入っていると、質問に対する返答が最後まで完了したことを表します。

“length”が入っていると、返答が長すぎるため途中で終わってしまったことを表します。
この場合、max_tokensを増やしましょう
API実行時に渡すデータの中にある”max_tokens”の値を増やしましょう

ここまでの内容をマスターすれば、PHPで動作しているWordPress製サイトでもOpenAI APIを使えます。

まとめ

今記事では、PHPでの実行を例にご紹介しました。
APIなので、ほぼ全てのプログラミング言語でも利用できます

プログラミング言語によってAPIの利用方法は変わります。
例えばpythonではOpen AI API用モジュールが用意されています。ぜひ活用しましょう。

使い方をマスターして、自分だけの独自サービスの制作などに役立てましょう。

余談ですが、今記事のサンプルコードはChatGPTに作ってもらい、私が修正・動作確認した上で掲載しています。
ChatGPTのことはChatGPTに聞いてみるのもよいかもしれません。

松下 将大
Front-end , Back-end engineer

1990年生まれ。複数のシステム開発会社にてPHP、VB.NET、C#を経験。2022年からフリーランスに。応用情報技術者試験合格。10年以上の業界経験を活かし、「PHPのエラーが直せなくなった…」「WordPressのカスタマイズをしたい…」「よくわからないけど動かない…」などのお悩み解決をお手伝いいたします。メンターご相談はこちらから