この記事では、Google Apps Script (GAS) を使用して、OpenAI の ChatGPT API を使ってテキストを生成する方法について説明します。
ChatGPT APIとは?
ChatGPT API は、OpenAI が提供する自然言語処理の API の1つで、テキストの自動生成を行うことができます。GPT(Generative Pre-trained Transformer)は、大規模なテキストデータセットを学習して、そのデータセットに基づいてテキストを生成するニューラルネットワークのモデルです。ChatGPT API は、このモデルをベースにして、会話形式のテキスト生成を行うことができるようにしたものです。
動作環境
この記事で紹介するコードは、GAS 上で動作します。GAS は、Google スプレッドシートや Google フォームなどの Google アプリケーション上で JavaScript を使ってスクリプトを作成することができるサービスです。この記事では、GAS を使用して ChatGPT API を扱います。
ChatGPT APIの使い方
ChatGPT API を使うには、まず OpenAI のアカウントを作成して、API キーを取得する必要があります。次に、GAS 上で以下のようなコードを実装します。
function gptTurbo(messages, temperature, apiKey) {
var headers = {
'Content-Type': 'application/json',
'Authorization': 'Bearer ' + apiKey
};
var payload = {
"model": "gpt-3.5-turbo",
"messages": messages,
"temperature": temperature
};
var options = {
'method': 'POST',
'headers': headers,
'payload': JSON.stringify(payload),
"muteHttpExceptions": true
};
try {
var response = UrlFetchApp.fetch('https://api.openai.com/v1/chat/completions', options);
Logger.log(response)
} catch (e) {
// 例外エラー処理
Logger.log('Error:')
Logger.log(e)
}
var data = JSON.parse(response.getContentText());
return data;
}
このコードは、gptTurbo という関数を定義しています。この関数は、以下の3つの引数を受け取ります。
-
messages
:話者であるrole
と会話内容であるcontent
からなる会話記録オブジェクトの配列。 -
temperature
:生成されるテキストの多様性を制御するためのパラメータ。数字が0に近づくほど回答が決定論的になる -
apiKey
:OpenAI の API キー。
この関数は、OpenAI の ChatGPT API に POST リクエストを送信し、生成されたテキストを返します。以下では、各引数について説明します。
messages
messages
は以下のような形式のオブジェクトの配列からなっています。
[
{ "role": "user", "content": "こんにちは" },
{ "role": "assistant", "content": "こんにちは。ご用件は何でしょうか?" },
{ "role": "user", "content": "今日の天気を教えてください" },
{ "role": "assistant", "content": "今日の天気は曇りです。" }
]
各オブジェクトは、2つのプロパティ role
と content
を持ちます。role
は、話者の役割を表す文字列で、content
は話者が発言したテキストを表す文字列です。
temperature
temperature
は、生成されるテキストの多様性を制御するためのパラメータです。値が高いほど、生成されるテキストが多様になります。一方、値が低いほど、生成されるテキストはより予測可能になります。通常、0.5 から 1.0 の範囲で設定することが推奨されています。
apiKey
apiKey
は、OpenAI の API キーを表す文字列です。このキーは、OpenAI の Web サイトでアカウントを作成することで取得できます。API キーは、OpenAI API にアクセスするための認証情報として使用されます。
実行例
以下は、gptTurbo
関数を使用して、会話を生成する例です。
function testGptTurbo() {
var apiKey = "YOUR_API_KEY";
var messages = [
{ "role": "user", "content": "こんにちは" },
{ "role": "assistant", "content": "こんにちは。ご用件は何でしょうか?" },
{ "role": "user", "content": "今日の天気を教えてください" },
{ "role": "assistant", "content": "申し訳ありませんが、私はあなたの地域を知ることができません。" }
{ "role": "user", "content": "残念です" }
];
var temperature = 0.2;
var response = gptTurbo(messages, temperature, apiKey);
Logger.log(response.choices[0].message.content);
}
/*レスポンスの例(トークン数やidはデタラメな値を入れています)
{
'id': 'chatcmpl-6p9XYPYSTTRi0xEviKjjilqrWU2Ve',
'object': 'chat.completion',
'created': 1677649420,
'model': 'gpt-3.5-turbo',
'usage': {'prompt_tokens': 56, 'completion_tokens': 31, 'total_tokens': 87},
'choices': [
{
'message': {
'role': 'assistant',
'content': '申し訳ありません。それでも何かお手伝いできることがあれば、遠慮なくおっしゃってください。'},
'finish_reason': 'stop',
'index': 0
}
]
}*/
この例では、messages
配列に5つのメッセージを設定し、temperature
を 0.2 に設定しています。また、apiKey
には自分の API キーを設定してください。この例では、gptTurbo
関数の戻り値である JSON オブジェクトの choices[0].message.content
をログに出力しています。choices[0].message.content
は、生成されたテキストを表すプロパティです。
おわりに
この記事では、GASとChatGPT API を組み合わせる方法について説明しました。APIによる挙動をこのようにコーディングしてあとでライブラリとして読み込めば、自動応答システムやチャットボットなど、さまざまなアプリケーションの開発が容易に進みます。なお、本記事を書いた私は非IT職であり、本記事もChatGPTにサポートしてもらいながら作成しておりますが、技術上の誤りがあれば指摘していただけると助かります。