3
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

ChatGPT APIを扱う基本のGAS

Posted at

この記事では、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つのプロパティ rolecontent を持ちます。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にサポートしてもらいながら作成しておりますが、技術上の誤りがあれば指摘していただけると助かります。

参考

OpenAI API documentation

3
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?