オリジナルの命令を自動的に追加してから 、GPT-3 APIを呼び出すLINEbotを作る方法 

# 課題
　GPT-3 API を使用した LINEbot を作成しようとしましたが、オリジナルの命令を自動的に追加してから GPT-3 API を呼び出すことができませんでした。
　例えば、「今日の天気を教えて」ではなく、「今日」と入力するだけで、「の天気を教えて」という命令を自動的に付加し、今日の天気を教えてくれるような LINEbot を作成できませんでした。
　GPT-3 API を使用した LINEbot の作成方法はいくつか見つかりましたが、オリジナルの命令を自動的に追加してから GPT-3 API を呼び出す方法は見つかりづらかったため、ここで共有させていただきます。
　使用する言語は、GAS です。


# 結論
GPT-3 APIを呼び出す際に、受け取ったメッセージにオリジナルの命令を追加した、文字列を一緒に送る。

# 準備
　LINEbotの作成においてGASを開くところまで出来てる方は、こちらを飛ばしていただいて結構です。

　準備は主に2つあります。1つ目がOPENAIのAPIキーの取得で、2つ目がLINE Messaging APIをGASで実行するLINEbotの作成です。
　以下に、それぞれを丁寧に説明してくれてるサイトをご紹介します。

①OPENAIのAPIキーの取得方法：
　以下の記事が、わかりやすかったです！

https://laboratory.kazuuu.net/how-to-get-an-openai-api-key/

②LINE Messaging APIをGASで実行するLINEボットの作成
以下の記事が、わかりやすかったです！
ここで、GASにコードを入力するところまでいっていただければ、準備完了です！

https://auto-worker.com/blog/?p=5141#

# コード
以下のコードを使用します。

`"OPENAIのAPIキー"`を、自分のOPENAIのAPIキーで置き換えます。例：`"aaaa-aa-aaa-TW"`
`"LINE Messaging APIで取得したチャネルアクセストークン"`を、自分のチャネルアクセストークン（長期）で置き換えます。例：`"aaaaaaaaaaaaaaaaaa-aa-aa-aaa-PU="`


```javascript:コード.gs
// ChatGPTのAPIを呼び出し応答をリターン
function getChatGptMessage(message) {
  var uri = 'https://api.openai.com/v1/completions';
  var API_KEY = "OPENAIのAPIキー"
  var headers = {
    'Authorization': "Bearer " + API_KEY,
    'Content-type': 'application/json'
  };

  var options = {
    'muteHttpExceptions' : true,
    'headers': headers, 
    'method': 'POST',
    'payload': JSON.stringify({
      "model": "text-davinci-003",
      "max_tokens" : 2048,
      "prompt": message})
  };
  try {
      const response = UrlFetchApp.fetch(uri, options);
      var json=JSON.parse(response.getContentText());
      //結果の文字列をpre_resultsに入れる
      pre_results = json["choices"][0]["text"];
      //デフォルトで入っているすべての改行を、""（空文字）と置き換える
      results = pre_results.replace(/\n/g, "");
      return results;
  } catch(e) {
    console.log('error');
  }
}

//メッセージを受け取ったときにeオブジェクトを取得
function doPost(e) {
  let token = "LINE Messaging APIで取得したチャネルアクセストークン";
  // JSONデータとして取得
  let eventData = JSON.parse(e.postData.contents).events[0];
  // JSONデータからreply用のトークンを取得
  let replyToken = eventData.replyToken;
  // JSONデータからメッセージを取得
  let userMessage = eventData.message.text;
  //追加する命令を記述
  let orderMessage = "ここにオリジナルの命令を記述"
  // 応答メッセージ用のAPI URLを定義
  let url = 'https://api.line.me/v2/bot/message/reply';
  // JSONメッセージからreplyメッセージを準備
  let replyMessage = orderMessage + userMessage;

  //定義したチャットGPTが返答したメッセージをtextをもつペイロード値を設定
  let payload = {
    'replyToken': replyToken,
    'messages': [{
        'type': 'text',
        'text': getChatGptMessage(replyMessage)
      }]
  };
  //HTTPSのPOSTパラメータを設定
  let options = {
    'payload' : JSON.stringify(payload),
    'myamethod'  : 'POST',
    'headers' : {"Authorization" : "Bearer " + token},
    'contentType' : 'application/json'
  };
  //LINE Messaging APIにリクエストして返答
  UrlFetchApp.fetch(url, options);
}

```
　上記コードの、`"ここにオリジナルの命令を記述"`の所に、オリジナルの命令を記述してください。これでGPT-3 APIを呼び出す際に、受け取ったメッセージにオリジナルの命令を追加した、文字列を一緒に送ることができます！
　例えば、`"ここにオリジナルの命令を記述"`のところに`"以下の文章を要約してください：\n"`と入力すれば、メッセージを送るだけで、それを要約して返信するbotをつくれます！

:::note info
補足
""の中に`\n`を入れる事で、改行を表現できます。
:::

# 最後に
　今回は、オリジナルの命令を自動的に追加してから 、GPT-3 API を呼び出すLINEbotを作る方法を共有させていただきました。
　方法としては、GPT-3 API を呼び出す際に、受け取ったメッセージにオリジナルの命令を追加した文字列を一緒に送ることで実現しました。
　このコードを使えば、様々な種類のbotを作れると思いますので、参考にしていただければ幸いです！
　また、「いいね」や「ストック」をしていただけると励みになりますので、よろしければよろしくお願いします！
　最後までお読みいただき、ありがとうございました！

参考になったサイト：

①OPENAIのAPIキーの取得方法：

https://laboratory.kazuuu.net/how-to-get-an-openai-api-key/

②LINE Messaging APIをGASで実行するLINEボットの作成


https://auto-worker.com/blog/?p=5141#

③チャットGPTをLINEで使えるようにする方法

https://algo-ai.work/2022/12/19/post-1561/