昨日、OpenAI から公開されたばかりの ChatGPT のAPIを利用して、チャットボットを実装してみました。公式の ChatGPT よりもレスポンスが格段に速いです。
前回の実装では単純にフォームから POST された question のテキストの中身を API に送信しておりましたが、ChatGPT で文脈を理解するために過去の対話の履歴を分割して配列(messages)として送信する必要があります。送信側で以下のように配列をJSON形式に変換し、PHP側でJSONをデコードし、API に送信しております。
// messages の中身
[
{
"role": "user",
"content": "過去のプロンプト1"
},
{
"role": "assistant",
"content": "過去の回答1"
},
{
"role": "user",
"content": "過去のプロンプト2"
},
{
"role": "user",
"assistant": "過去の回答2"
},
{
"role": "user",
"content": "新しいプロンプト"
}
]
<?php
//
// OpenAI のアカウントを作成 ( https://beta.openai.com/signup )
// API Key を取得 ( https://beta.openai.com/account/api-keys )
//
$API_KEY = 'API Key';
$header = [
'Authorization: Bearer '.$API_KEY,
'Content-type: application/json',
];
$messages = json_decode($_POST['messages'], true);
$params = json_encode([
'model' => 'gpt-3.5-turbo',
'messages' => $messages,
'temperature' => floatval($_POST['temperature']),
'max_tokens' => floatval($_POST['max_tokens']),
'top_p' => floatval($_POST['top_p']),
'frequency_penalty' => floatval($_POST['frequency_penalty']),
'presence_penalty' => floatval($_POST['presence_penalty'])
]);
$curl = curl_init('https://api.openai.com/v1/chat/completions');
$options = [
CURLOPT_POST => true,
CURLOPT_HTTPHEADER =>$header,
CURLOPT_POSTFIELDS => $params,
CURLOPT_RETURNTRANSFER => true,
];
curl_setopt_array($curl, $options);
$response = curl_exec($curl);
$httpcode = curl_getinfo($curl, CURLINFO_RESPONSE_CODE);
if(200 == $httpcode)
{
$json_array = json_decode($response, true);
$choices = $json_array['choices'];
foreach($choices as $c)
{
echo $c['message']['content'].'<br>';
}
}
?>
API に送信するパラメータの内容は以下の通りです。
model | 使用する言語モデル GPT-3.5 を使用する場合は、gpt-3.5-turbo を指定。 |
messages | 対話の履歴およびロールを指定。 { “role”: “assistant”, “content”: “\n\nHello there, how may I assist you today?”,} |
temperature | 生成するトークンをサンプリングする確率、ランダム性。 デフォルト値:1.0 |
max_tokens | トークン数の上限。 1024 |
top_p | Top-p サンプリング、多様性。 デフォルト値:1.0 |
frequency_penalty | 頻出ペナルティ、高いほど同じ話題を繰り返さなくなる。 デフォルト値:0 |
presence_penalty | プレゼンスペナルティ、高いほど新しいトピックが出現しやすくなる。 デフォルト値:0 |
詳細には以下のOpenAI社のドキュメントを参照してください。
Open AI API reference – Chat
https://platform.openai.com/docs/api-reference/chat
実際にデモページを作成いたしました。予算の上限に達したら停止します。履歴等は取っていません。
ChatGPT(GPT3.5)との対話
https://labs.irohasoft.com/chatgpt/