サンプル・プログラムの実行例
サンプル・プログラム
chatOpenAI.php | サンプル・プログラム |
pahooInputData.php | データ入力に関わる関数群。 使い方は「PHPでGET/POSTでフォームから値を受け取る」「数値入力とバリデーション」「文字入力とバリデーション」などを参照。include_path が通ったディレクトリに配置すること。 |
バージョン | 更新日 | 内容 |
---|---|---|
1.0 | 2023/02/18 | 初版 |
バージョン | 更新日 | 内容 |
---|---|---|
1.1.2 | 2023/02/05 | validString() 修正 |
1.11 | 2022/07/03 | isCommandLine() 修正 |
1.1 | 2022/06/04 | getValidString() 修正 |
1.0 | 2022/05/18 | 初版 |
準備:OpenAI APIキーの取得
OpenAIの利用は有料だが、最初、3ヶ月間18ドル分のチケットが付いてくる。これを使ってプログラムの試作ができる。
以上で、API利用のための準備は終わりだ。
準備:定数など
データ入力に関わる関数群を含むファイル "pahooInputData.php" はinclude_pathが通ったディレクトリに配置すること。
  40: //表示幅(ピクセル)
  41: define('WIDTH', 600);
  42:
  43: //入力テキスト(初期値)
  44: define('DEF_SOUR', '');
  45:
  46: //データ入力に関わる関数群:include_pathが通ったディレクトリに配置素いる
  47: require_once('pahooInputData.php');
準備:openAI API クラスと APIキー
プロパティ $OPENAI_API_KEY に、先ほど生成したAPIキーを代入する。
 126: // OpenAI API クラス =======================================================
 127: class pahooOpenAI {
 128: var $webapi; //直前に呼び出したWebAPI URL
 129: var $errmsg; //エラーメッセージ
 130:
 131: //OpenAI APIキー
 132: //https://platform.openai.com/account/api-keys にて登録のこと.
 133: var $OPENAI_API_KEY = '***************';
 134:
 135: /**
解説:OpenAI GPT-3を使ってチャットする
 180: /**
 181: * 入力テキストを指定し,OpenAI GPT-3を使ってチャットする.
 182: * 使用モデル,回答の自由度,コンテクスト長を指定できる.
 183: * @param string $text 入力テキスト
 184: * @param string $model 使用モデル
 185: * @param float $temperature 回答の自由度(0~1:1に近いほど自由)
 186: * @param float $max_tokens コンテクスト長(入力と回答を足したトークン数)
 187: * @return string 返答テキスト/FALSE:失敗
 188: */
 189: function openAI($text, $mode='text-davinci-003', $temperature=1.0, $max_tokens=400) {
 190: $this->webapi = 'https://api.openai.com/v1/completions';
 191: $headers = array(
 192: 'Content-Type: application/json',
 193: 'Authorization: Bearer ' . $this->OPENAI_API_KEY,
 194: );
 195: $payload = array(
 196: 'model' => $mode,
 197: 'prompt' => $text,
 198: 'temperature' => $temperature,
 199: 'max_tokens' => $max_tokens
 200: );
 201:
 202: $ch = curl_init();
 203: curl_setopt($ch, CURLOPT_URL, $this->webapi);
 204: curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
 205: curl_setopt($ch, CURLOPT_POST, TRUE);
 206: curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($payload));
 207: curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
 208:
 209: curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
 210: curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
 211: curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
 212: curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
 213:
 214: $data = curl_exec($ch);
 215: curl_close($ch);
 216:
 217: //APIエラー
 218: if ($data == FALSE) {
 219: $this->errmsg = 'OpenAI APIにアクセスできません';
 220: $ret = FALSE;
 221: } else {
 222: $arr = json_decode($data, TRUE);
 223: if ($arr == FALSE) {
 224: $this->errmsg = 'OpenAI APIの応答が不正です';
 225: $ret = FALSE;
 226: } else if (isset($arr['choices'][0]['text'])) {
 227: $ret = (string)$arr['choices'][0]['text'];
 228: } else {
 229: $this->errmsg = 'OpenAI APIの応答が不正です';
 230: $ret = FALSE;
 231: }
 232: }
 233:
 234: return $ret;
 235: }
OpenAI は複数の言語モデルを開発した。今回使用する GPT-3は、2018年に発表したTransformerと呼ばれる深層学習の手法を用いた言語モデルの第3世代だ。Wikipedia やWebサイトから収集したデータなどから抽出した45TBものテキストデータに対し、いくつかの前処理を行い、570GBのデータセットを学習に用いています。このデータセットに対して、1750億個のパラメータを持つ自己回帰型言語モデルを学習することで、これまでにない巨大な言語モデルを作成している。
じつは、cURLを使ってOpenAIにアクセスするPHPプログラムの作り方をChatGPTに質問し、このメソッドを仕上げた。便利な時代になったものだ。
OpenAIの利用は有料だが、最初、3ヶ月間18ドル分のチケットが付いてくる。これを使ってプログラムの試作ができる。