サンプル・プログラムの実行例
目次
サンプル・プログラム
chatOpenAI.php | サンプル・プログラム |
pahooInputData.php | データ入力に関わる関数群。 使い方は「PHPでGET/POSTでフォームから値を受け取る」「数値入力とバリデーション」「文字入力とバリデーション」などを参照。include_path が通ったディレクトリに配置すること。 |
バージョン | 更新日 | 内容 |
---|---|---|
1.1.0 | 2024/10/08 | openAI() -- WebAPI変更,エラー処理変更 |
1.0 | 2023/02/18 | 初版 |
バージョン | 更新日 | 内容 |
---|---|---|
1.7.0 | 2024/10/09 | validURL() validEmail() 追加 |
1.6.0 | 2024/10/07 | isButton() -- buttonタグに対応 |
1.5.0 | 2024/01/28 | exitIfExceedVersion() 追加 |
1.4.2 | 2024/01/28 | exitIfLessVersion() メッセージ修正 |
1.4.1 | 2023/09/30 | コメントの訂正 |
準備:OpenAI APIキーの取得
OpenAIの利用は有料だが、最初、3ヶ月間18ドル分(2023年3月からは5ドル分)のチケットが付いてくる。これを使ってプログラムの試作ができる。
以上で、API利用のための準備は終わりだ。
準備:定数など
データ入力に関わる関数群を含むファイル "pahooInputData.php" はinclude_pathが通ったディレクトリに配置すること。
準備:openAI API クラスと APIキー
プロパティ $OPENAI_API_KEY に、先ほど生成したAPIキーを代入する。
chatOpenAI.php
118: // OpenAI API クラス =======================================================
119: class pahooOpenAI {
120: var $webapi; //直前に呼び出したWebAPI URL
121: var $errmsg; //エラーメッセージ
122:
123: //OpenAI APIキー
124: //https://platform.openai.com/account/api-keys にて登録のこと.
125: var $OPENAI_API_KEY = '*****************************************';
126:
127: /**
解説:OpenAI GPT-3を使ってチャットする
chatOpenAI.php
172: /**
173: * 入力テキストを指定し,OpenAI GPT-3を使ってチャットする.
174: * 使用モデル,回答の自由度,コンテクスト長を指定できる.
175: * @param string $text 入力テキスト
176: * @param string $model 使用モデル
177: * @param float $temperature 回答の自由度(0~1:1に近いほど自由)
178: * @param float $max_tokens コンテクスト長(入力と回答を足したトークン数)
179: * @return string 返答テキスト/FALSE:失敗
180: */
181: function openAI($text, $model='gpt-3.5-turbo', $temperature=1.0, $max_tokens=400) {
182: $this->webapi = 'https://api.openai.com/v1/chat/completions';
183: $headers = array(
184: 'Content-Type: application/json',
185: 'Authorization: Bearer ' . $this->OPENAI_API_KEY,
186: );
187: $payload = array(
188: 'model' => $model,
189: 'messages' => [
190: ['role' => 'user', 'content' => $text],
191: ],
192: 'temperature' => $temperature,
193: 'max_tokens' => $max_tokens
194: );
195: $ret = FALSE;
196:
197: $ch = curl_init();
198: curl_setopt($ch, CURLOPT_URL, $this->webapi);
199: curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
200: curl_setopt($ch, CURLOPT_POST, TRUE);
201: curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($payload));
202: curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
203:
204: curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
205: curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
206: curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
207: curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
208:
209: $data = curl_exec($ch);
210: curl_close($ch);
211: // var_dump($data);
212:
213: //エラー処理
214: if ($data == FALSE) {
215: $this->errmsg = 'OpenAI APIにアクセスできません';
216: $ret = FALSE;
217: } else {
218: $arr = json_decode($data, TRUE);
219: if ($arr == FALSE) {
220: $this->errmsg = 'OpenAI APIの応答が不正です';
221: $ret = FALSE;
222: } else if (isset($arr['error'])) {
223: $this->errmsg = $arr['error']['message'];
224: //正常応答
225: } else if (isset($arr['choices'][0]['text'])) {
226: $ret = (string)$arr['choices'][0]['text'];
227: } else {
228: $this->errmsg = 'OpenAI APIの応答が不正です';
229: $ret = FALSE;
230: }
231: }
232:
233: return $ret;
234: }
OpenAI は複数の言語モデルを開発した。今回使用する GPT-3は、2018年に発表したTransformerと呼ばれる深層学習の手法を用いた言語モデルの第3世代だ。Wikipedia やWebサイトから収集したデータなどから抽出した45TBものテキストデータに対し、いくつかの前処理を行い、570GBのデータセットを学習に用いています。このデータセットに対して、1750億個のパラメータを持つ自己回帰型言語モデルを学習することで、これまでにない巨大な言語モデルを作成している。
じつは、cURLを使ってOpenAIにアクセスするPHPプログラムの作り方をChatGPTに質問し、このメソッドを仕上げた。便利な時代になったものだ。
OpenAIの利用は有料だが、最初、3ヶ月間18ドル分(2023年3月からは5ドル分)のチケットが付いてくる。これを使ってプログラムの試作ができる。