ChatGPT API (GPT-3.5) の利用方法


昨日、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_pTop-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/

関連記事:

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA


このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください