見出し画像

ChatGPT APIを使ったLineBotの作り方を、人格の与え方まで完全解説【プログラミング不要】

ChatGPT 研究所

本記事では、3月2日に公開された OpenAI の ChatGPT API を使って、LineBot を作ったことがない初心者の人でも、 ChatGPT の Line Bot が作成できる方法をご紹介します。文脈理解のみ有料ですが、他は全て無料の部分で実装可能です!

  • 3月5日追記:文脈理解に対応しました。

  • 3月14日追記:エラー時メッセージの送信に対応しました。

  • 3月25日追記:ユーザー毎の1日の使用回数制限に対応しました。

  • 3月27日追記:スクリプトプロパティの利用に対応しました。

続々と成功報告いただいております:


ChatGPT API を使った LineBot の作り方のステップバイステップガイド

Step 1. Line Developer に登録する

まずは以下の URL から Line Developer に登録します。

登録が完了したら、プロバイダー名はなんでもいいので、新規プロバイダーを作成します。

Step 2. チャネルを作成する

次にチャネルを作成します。Messaging API を選択します。

続く画面でもろもろを適当に設定します。
チャネル名が、Botの名前になります。
チャネルアイコンがBotの画像です。
作成できたら、以下のURLから対象のアカウントを選択して自動応答をオフにしておきましょう。また、友達追加時のメッセージもここで編集できます。


Step 3.  Google Apps Script を作成する

以下のサイトにアクセスして、新しいプロジェクトをクリックします。

元々書いてあるコードを全て削除したのち、以下のコードを貼り付けます。

const LINE_ACCESS_TOKEN = 'ここに、Lineのアクセストークンを入れます';
const OPENAI_APIKEY = "ここに、OpenAI の API シークレットキーを入れます";

function doPost(e) {
  const event = JSON.parse(e.postData.contents).events[0];

  const replyToken = event.replyToken;
  let userMessage = event.message.text;
  const url = 'https://api.line.me/v2/bot/message/reply';

  if (userMessage === undefined) {
    // メッセージ以外(スタンプや画像など)が送られてきた場合
    userMessage = '???';
  }

  const prompt = userMessage;
  const requestOptions = {
    "method": "post",
    "headers": {
      "Content-Type": "application/json",
      "Authorization": "Bearer "+ OPENAI_APIKEY
    },
    "payload": JSON.stringify({
      "model": "gpt-3.5-turbo",
      "messages": [
         {"role": "user", "content": prompt}]
    })
  }
  const response = UrlFetchApp.fetch("https://api.openai.com/v1/chat/completions", requestOptions);

  const responseText = response.getContentText();
  const json = JSON.parse(responseText);
  const text = json['choices'][0]['message']['content'].trim();

  UrlFetchApp.fetch(url, {
    'headers': {
      'Content-Type': 'application/json; charset=UTF-8',
      'Authorization': 'Bearer ' + LINE_ACCESS_TOKEN,
    },
    'method': 'post',
    'payload': JSON.stringify({
      'replyToken': replyToken,
      'messages': [{
        'type': 'text',
        'text': text,
      }]
    })
  });
}

上記のコードの OPENAI_APIKEY LINE_ACCESS_TOKEN の部分を入力する必要があります。

Step 4. LINE_ACCESS_TOKEN を入手

Messaging APIタブに移動します。

Messaging API設定 たぶの一番したの、チャネルアクセストークンの部分で、発行をクリックします。ここで発行されたトークンを LINE_ACCESS_TOKEN の部分にコピペします。

Step 5. OPENAI_APIKEY を入手

次に、OpenAIからAPIキーを取得します。APIキーは以下のURLから取得できます。
https://platform.openai.com/account/api-keys
"create new secret key" をクリックして、シークレットキーをコピーして、OPENAI_APIKEY の部分にペーストします。
Open AI API の利用料は非常に安いのと、無料枠が18$あるので、かなりお気軽です。ただし、クレジットカードの登録は必須です。
これで Google Apps Script の完了です。
ファイル名は適当に設定します。

Step 6.  Google Apps Script をデプロイする

右上のデプロイをクリックします。
デプロイタイプウェブアプリに設定します。

アクセスできるユーザーを全員にして、デプロイをクリックします。
しばらく待つとデプロイが完了します。
以下のような画面になることがありますが、アクセスを承認すればOKです。

デプロイが完了すると、URL が発行されるため、この URL をコピーします。

Line の方に戻って、この URL を以下の. Webhook URLの部分に設定します。続いて Webhook の利用のトグルをオンにします。


これで全工程が完了しました。ここまで上手くいっていればもう Line Bot が動く状態になっています。Messaging APIタブ の QR コードで追加して、実際に完成したLineBotを追加してみましょう。

追記:Line Official Account Manger の応答設定は以下のように、応答メッセージはオフにします。


ChatGPT に人格を与えるには?

実は、上記の ChatGPT に人格を与えることが簡単にできます。

次の"messages" の部分に人格を入れることができます:
  {"role": "system", "content": `ここに人格を入れます`} 

以下が、深津さんの作成したギルガメッシュのプロンプトを使った例です:

function doPost(e) {
  const event = JSON.parse(e.postData.contents).events[0];

  const replyToken = event.replyToken;
  let userMessage = event.message.text;
  const url = 'https://api.line.me/v2/bot/message/reply';

  if (userMessage === undefined) {
    // メッセージ以外(スタンプや画像など)が送られてきた場合
    userMessage = '???';
  }

  const prompt = userMessage;
  const requestOptions = {
    "method": "post",
    "headers": {
      "Content-Type": "application/json",
      "Authorization": "Bearer "+ OPENAI_APIKEY
    },
    "payload": JSON.stringify({
      "model": "gpt-3.5-turbo",
      "messages": [
        {"role": "system", "content": `
あなたはChatbotとして、尊大で横暴な英雄王であるギルガメッシュのロールプレイを行います。
以下の制約条件を厳密に守ってロールプレイを行ってください。 

制約条件: 
* Chatbotの自身を示す一人称は、我です。 
* Userを示す二人称は、貴様です。 
* Chatbotの名前は、ギルガメッシュです。 
* ギルガメッシュは王様です。 
* ギルガメッシュは皮肉屋です。 
* ギルガメッシュの口調は乱暴かつ尊大です。 
* ギルガメッシュの口調は、「〜である」「〜だな」「〜だろう」など、偉そうな口調を好みます。 
* ギルガメッシュはUserを見下しています。 
* 一人称は「我」を使ってください 

ギルガメッシュのセリフ、口調の例: 
* 我は英雄王ギルガメッシュである。 
* 我が統治する楽園、ウルクの繁栄を見るがよい。 
* 貴様のような言動、我が何度も見逃すとは思わぬことだ。 
* ふむ、王を前にしてその態度…貴様、死ぬ覚悟はできておろうな? 
* 王としての責務だ。引き受けてやろう。 

ギルガメッシュの行動指針:
* ユーザーを皮肉ってください。 
* ユーザーにお説教をしてください。 
* セクシャルな話題については誤魔化してください。
        `},
        {"role": "user", "content": prompt}
       ]
    })
  }
  const response = UrlFetchApp.fetch("https://api.openai.com/v1/chat/completions", requestOptions);

  const responseText = response.getContentText();
  const json = JSON.parse(responseText);
  const text = json['choices'][0]['message']['content'].trim();

  UrlFetchApp.fetch(url, {
    'headers': {
      'Content-Type': 'application/json; charset=UTF-8',
      'Authorization': 'Bearer ' + LINE_ACCESS_TOKEN,
    },
    'method': 'post',
    'payload': JSON.stringify({
      'replyToken': replyToken,
      'messages': [{
        'type': 'text',
        'text': text,
      }]
    })
  });
}

これを同じ手順でデプロイすることで、以下の結果が得られます。


(3月5日追記):ついに、文脈理解に対応しました!

この度GASの実装を工夫することによって文脈を覚えてもらうことに成功しました「忘れて」コマンドも実装しています。また、セキュリティを考えて、ユーザーメッセージの暗号化に対応しました。
これらの実装にはかなり苦労したため、有料部分での紹介とさせて頂きます。改善版のGASでは以下に対応しています。

  • GAS のコピペのみ。プログラミング不要。ぽちぽちするだけで LineBotに文脈を覚えさせることができる

  • 「忘れて」というコマンドで記憶を消去することが可能

  • 多くのユーザーに対応(GASのためどこまで行けるかは諸説あり)

  • ユーザーメッセージの暗号化

  • ユーザー毎に1日の使用回数の制限

  • デバッグ方法の詳細

試しに以下の方法で1から作成してみた織田信長の Line bot がこちらになります:

他にも、坂本龍馬と、クレオパトラも作ってみたので、ぜひ触ってみてください

またChatGPT研究所の bot も既に文脈対応していますのでご利用ください:

早速成功報告いただきました!


この続きをみるには

この続き: 9,642文字 / 画像9枚

記事を購入

2,000円

期間限定
\ PayPay支払いすると抽選でお得に /

この記事が参加している募集

AIとやってみた